skia2/gm/bug530095.cpp
caryclark 1a7eb26664 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
2016-01-21 07:07:02 -08:00

49 lines
1.5 KiB
C++

/*
* 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);
}