OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2003, 2006 Apple Computer, Inc. All rights reserved. | 2 * Copyright (C) 2003, 2006 Apple Computer, Inc. All rights reserved. |
3 * 2006 Rob Buis <buis@kde.org> | 3 * 2006 Rob Buis <buis@kde.org> |
4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> | 4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> |
5 * Copyright (C) 2013 Google Inc. All rights reserved. | 5 * Copyright (C) 2013 Google Inc. All rights reserved. |
6 * | 6 * |
7 * Redistribution and use in source and binary forms, with or without | 7 * Redistribution and use in source and binary forms, with or without |
8 * modification, are permitted provided that the following conditions | 8 * modification, are permitted provided that the following conditions |
9 * are met: | 9 * are met: |
10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 sweepDegrees += s360; | 311 sweepDegrees += s360; |
312 | 312 |
313 m_path.arcTo(oval, startDegrees, sweepDegrees, false); | 313 m_path.arcTo(oval, startDegrees, sweepDegrees, false); |
314 } | 314 } |
315 | 315 |
316 void Path::addRect(const FloatRect& rect) | 316 void Path::addRect(const FloatRect& rect) |
317 { | 317 { |
318 m_path.addRect(rect); | 318 m_path.addRect(rect); |
319 } | 319 } |
320 | 320 |
| 321 void Path::addEllipse(const FloatPoint& p, float radiusX, float radiusY, float r
otation, float startAngle, float endAngle, bool anticlockwise) |
| 322 { |
| 323 // Optimize the common case of an entire ellipse. |
| 324 SkScalar twoPiScalar = WebCoreFloatToSkScalar(2 * piFloat); |
| 325 SkScalar endAngleScalar = WebCoreFloatToSkScalar(endAngle); |
| 326 if (!rotation && !startAngle && SkScalarNearlyEqual(twoPiScalar, SkScalarAbs
(endAngleScalar))) { |
| 327 FloatRect boundingRect(p - FloatSize(radiusX, radiusY), FloatSize(2 * ra
diusX, 2 * radiusY)); |
| 328 if (anticlockwise && SkScalarNearlyEqual(twoPiScalar, -endAngleScalar))
{ |
| 329 m_path.addOval(boundingRect, SkPath::kCCW_Direction); |
| 330 return; |
| 331 } |
| 332 if (!anticlockwise && SkScalarNearlyEqual(twoPiScalar, endAngleScalar))
{ |
| 333 m_path.addOval(boundingRect); |
| 334 return; |
| 335 } |
| 336 } |
| 337 |
| 338 // Add an arc after the relevant transform. |
| 339 AffineTransform ellipseTransform = AffineTransform::translation(p.x(), p.y()
).rotate(rad2deg(rotation)).scale(radiusX, radiusY); |
| 340 ASSERT(ellipseTransform.isInvertible()); |
| 341 AffineTransform inverseEllipseTransform = ellipseTransform.inverse(); |
| 342 transform(inverseEllipseTransform); |
| 343 addArc(FloatPoint::zero(), 1 /* unit circle */, startAngle, endAngle, anticl
ockwise); |
| 344 transform(ellipseTransform); |
| 345 } |
| 346 |
321 void Path::addEllipse(const FloatRect& rect) | 347 void Path::addEllipse(const FloatRect& rect) |
322 { | 348 { |
323 m_path.addOval(rect); | 349 m_path.addOval(rect); |
324 } | 350 } |
325 | 351 |
326 void Path::addRoundedRect(const RoundedRect& r) | 352 void Path::addRoundedRect(const RoundedRect& r) |
327 { | 353 { |
328 addRoundedRect(r.rect(), r.radii().topLeft(), r.radii().topRight(), r.radii(
).bottomLeft(), r.radii().bottomRight()); | 354 addRoundedRect(r.rect(), r.radii().topLeft(), r.radii().topRight(), r.radii(
).bottomLeft(), r.radii().bottomRight()); |
329 } | 355 } |
330 | 356 |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 { | 440 { |
415 m_path.offset(WebCoreFloatToSkScalar(size.width()), WebCoreFloatToSkScalar(s
ize.height())); | 441 m_path.offset(WebCoreFloatToSkScalar(size.width()), WebCoreFloatToSkScalar(s
ize.height())); |
416 } | 442 } |
417 | 443 |
418 bool Path::unionPath(const Path& other) | 444 bool Path::unionPath(const Path& other) |
419 { | 445 { |
420 return Op(m_path, other.m_path, kUnion_PathOp, &m_path); | 446 return Op(m_path, other.m_path, kUnion_PathOp, &m_path); |
421 } | 447 } |
422 | 448 |
423 } | 449 } |
OLD | NEW |