aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm
diff options
context:
space:
mode:
authorGravatar caryclark <caryclark@google.com>2016-01-21 07:07:02 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-01-21 07:07:02 -0800
commit1a7eb266644d2e1b0968dbca606ca0a91903419d (patch)
tree94db877ef4ed5be86f57163c26a997e6f76ca9d3 /gm
parent46895be9189f9d43f10fe5d57be6ca1eb1a795d2 (diff)
resolution dependent path measure
When a dash is drawn through a canvas with a scaled up matrix, path measure needs the pixel resolution through the matrix to construct the dash with sufficient resolution. Pass the resolution through to path measure. Replicate chrome bug in skia GM. R=reed@google.com BUG=530095 GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1608353002 Review URL: https://codereview.chromium.org/1608353002
Diffstat (limited to 'gm')
-rw-r--r--gm/bug530095.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/gm/bug530095.cpp b/gm/bug530095.cpp
new file mode 100644
index 0000000000..690da3c9d0
--- /dev/null
+++ b/gm/bug530095.cpp
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "gm.h"
+#include "SkPath.h"
+#include "SkDashPathEffect.h"
+
+DEF_SIMPLE_GM(bug530095, canvas, 900, 1200) {
+ SkPath path1, path2;
+ path1.addCircle(200, 200, 124);
+ path2.addCircle(2, 2, 1.24f);
+
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ paint.setStyle(SkPaint::kStroke_Style);
+ paint.setStrokeWidth(26);
+ SkScalar intervals[] = {700, 700 };
+ int intervalCount = (int) SK_ARRAY_COUNT(intervals);
+ paint.setPathEffect(SkDashPathEffect::Create(intervals, intervalCount, -40))->unref();
+ canvas->drawPath(path1, paint);
+
+ paint.setStrokeWidth(0.26f);
+ SkScalar smIntervals[] = {7, 7 };
+ int smIntervalCount = (int) SK_ARRAY_COUNT(smIntervals);
+ paint.setPathEffect(SkDashPathEffect::Create(smIntervals, smIntervalCount, -0.40f))->unref();
+ canvas->save();
+ canvas->scale(100, 100);
+ canvas->translate(4, 0);
+ canvas->drawPath(path2, paint);
+ canvas->restore();
+
+ paint.setStrokeWidth(26);
+ paint.setPathEffect(SkDashPathEffect::Create(intervals, intervalCount, 0))->unref();
+ canvas->save();
+ canvas->translate(0, 400);
+ canvas->drawPath(path1, paint);
+ canvas->restore();
+
+ paint.setStrokeWidth(0.26f);
+ paint.setPathEffect(SkDashPathEffect::Create(smIntervals, smIntervalCount, 0))->unref();
+ canvas->scale(100, 100);
+ canvas->translate(4, 4);
+ canvas->drawPath(path2, paint);
+}