aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar robertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-08-20 17:24:16 +0000
committerGravatar robertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-08-20 17:24:16 +0000
commit17bb458fe897411218d8c9781770948d4398b723 (patch)
treed2396f5677b678aaac5d344d68bd4916677f3e05 /src
parentb00a85b7f30c9c3dc549524205631b9f2f429cf8 (diff)
Add fast path in arcTo and addArc for 0==sweep && 0|360==sweepAngle
Diffstat (limited to 'src')
-rw-r--r--src/core/SkPath.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp
index 674ba980f6..8184345a5b 100644
--- a/src/core/SkPath.cpp
+++ b/src/core/SkPath.cpp
@@ -933,6 +933,16 @@ void SkPath::addCircle(SkScalar x, SkScalar y, SkScalar r, Direction dir) {
static int build_arc_points(const SkRect& oval, SkScalar startAngle,
SkScalar sweepAngle,
SkPoint pts[kSkBuildQuadArcStorage]) {
+
+ if (0 == sweepAngle &&
+ (0 == startAngle || SkIntToScalar(360) == startAngle)) {
+ // Chrome uses this path to move into and out of ovals. If not
+ // treated as a special case the moves can distort the oval's
+ // bounding box (and break the circle special case).
+ pts[0].set(oval.fRight, oval.centerY());
+ return 1;
+ }
+
SkVector start, stop;
start.fY = SkScalarSinCos(SkDegreesToRadians(startAngle), &start.fX);