1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2011 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "gm.h" 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "sk_tool_utils.h" 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPath.h" 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkRandom.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkDashPathEffect.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkParsePath.h" 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define W 400 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define H 400 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define N 50 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotconstexpr SkScalar SW = SkIntToScalar(W); 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotconstexpr SkScalar SH = SkIntToScalar(H); 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void rnd_rect(SkRect* r, SkPaint* paint, SkRandom& rand) { 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar x = rand.nextUScalar1() * W; 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar y = rand.nextUScalar1() * H; 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar w = rand.nextUScalar1() * (W >> 2); 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar h = rand.nextUScalar1() * (H >> 2); 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar hoffset = rand.nextSScalar1(); 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar woffset = rand.nextSScalar1(); 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot r->set(x, y, x + w, y + h); 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot r->offset(-w/2 + woffset, -h/2 + hoffset); 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint->setColor(rand.nextU()); 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint->setAlpha(0xFF); 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass StrokesGM : public skiagm::GM { 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot StrokesGM() {} 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString onShortName() override { 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkString("strokes_round"); 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkISize onISize() override { 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkISize::Make(W, H*2); 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onDraw(SkCanvas* canvas) override { 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint paint; 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStyle(SkPaint::kStroke_Style); 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStrokeWidth(SkIntToScalar(9)/2); 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int y = 0; y < 2; y++) { 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setAntiAlias(!!y); 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkAutoCanvasRestore acr(canvas, true); 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(0, SH * y); 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->clipRect(SkRect::MakeLTRB( 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkIntToScalar(2), SkIntToScalar(2) 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , SW - SkIntToScalar(2), SH - SkIntToScalar(2) 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot )); 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRandom rand; 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int i = 0; i < N; i++) { 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect r; 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot rnd_rect(&r, &paint, rand); 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawOval(r, paint); 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot rnd_rect(&r, &paint, rand); 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawRoundRect(r, r.width()/4, r.height()/4, paint); 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot rnd_rect(&r, &paint, rand); 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef skiagm::GM INHERITED; 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* See 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot https://code.google.com/p/chromium/issues/detail?id=422974 and 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot http://jsfiddle.net/1xnku3sg/2/ 85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass ZeroLenStrokesGM : public skiagm::GM { 87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPath fMoveHfPath, fMoveZfPath, fDashedfPath, fRefPath[4]; 88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPath fCubicPath, fQuadPath, fLinePath; 89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onOnceBeforeDraw() override { 91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkAssertResult(SkParsePath::FromSVGString("M0,0h0M10,0h0M20,0h0", &fMoveHfPath)); 93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkAssertResult(SkParsePath::FromSVGString("M0,0zM10,0zM20,0z", &fMoveZfPath)); 94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkAssertResult(SkParsePath::FromSVGString("M0,0h25", &fDashedfPath)); 95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkAssertResult(SkParsePath::FromSVGString("M 0 0 C 0 0 0 0 0 0", &fCubicPath)); 96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkAssertResult(SkParsePath::FromSVGString("M 0 0 Q 0 0 0 0", &fQuadPath)); 97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkAssertResult(SkParsePath::FromSVGString("M 0 0 L 0 0", &fLinePath)); 98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int i = 0; i < 3; ++i) { 100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fRefPath[0].addCircle(i * 10.f, 0, 5); 101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fRefPath[1].addCircle(i * 10.f, 0, 10); 102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fRefPath[2].addRect(i * 10.f - 4, -2, i * 10.f + 4, 6); 103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fRefPath[3].addRect(i * 10.f - 10, -10, i * 10.f + 10, 10); 104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString onShortName() override { 108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkString("zeroPath"); 109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkISize onISize() override { 112fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkISize::Make(W, H*2); 113fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 114fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 115fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onDraw(SkCanvas* canvas) override { 116fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint fillPaint, strokePaint, dashPaint; 117fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fillPaint.setAntiAlias(true); 118fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot strokePaint = fillPaint; 119fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot strokePaint.setStyle(SkPaint::kStroke_Style); 120fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int i = 0; i < 2; ++i) { 121fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fillPaint.setAlpha(255); 122fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot strokePaint.setAlpha(255); 123fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot strokePaint.setStrokeWidth(i ? 8.f : 10.f); 124fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot strokePaint.setStrokeCap(i ? SkPaint::kSquare_Cap : SkPaint::kRound_Cap); 125fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->save(); 126fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(10 + i * 100.f, 10); 127fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(fMoveHfPath, strokePaint); 128fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(0, 20); 129fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(fMoveZfPath, strokePaint); 130fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot dashPaint = strokePaint; 131fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkScalar intervals[] = { 0, 10 }; 132fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot dashPaint.setPathEffect(SkDashPathEffect::Make(intervals, 2, 0)); 133fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPath fillPath; 134fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot dashPaint.getFillPath(fDashedfPath, &fillPath); 135fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(0, 20); 136fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(fDashedfPath, dashPaint); 137fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(0, 20); 138fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(fRefPath[i * 2], fillPaint); 139fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot strokePaint.setStrokeWidth(20); 140fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot strokePaint.setAlpha(127); 141fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(0, 50); 142fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(fMoveHfPath, strokePaint); 143fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(0, 30); 144fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(fMoveZfPath, strokePaint); 145fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(0, 30); 146fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fillPaint.setAlpha(127); 147fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(fRefPath[1 + i * 2], fillPaint); 148fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(0, 30); 149fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(fCubicPath, strokePaint); 150fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(0, 30); 151fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(fQuadPath, strokePaint); 152fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(0, 30); 153fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(fLinePath, strokePaint); 154fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->restore(); 155fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 156fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 157fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 158fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 159fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef skiagm::GM INHERITED; 160fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 161fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 162fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass TeenyStrokesGM : public skiagm::GM { 163fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 164fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString onShortName() override { 165fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkString("teenyStrokes"); 166fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 167fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 168fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkISize onISize() override { 169fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkISize::Make(W, H*2); 170fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 171fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 172fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static void line(SkScalar scale, SkCanvas* canvas, SkColor color) { 173fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint p; 174fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setAntiAlias(true); 175fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setStyle(SkPaint::kStroke_Style); 176fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setColor(color); 177fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(50, 0); 178fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->save(); 179fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setStrokeWidth(scale * 5); 180fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->scale(1 / scale, 1 / scale); 181fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawLine(20 * scale, 20 * scale, 20 * scale, 100 * scale, p); 182fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawLine(20 * scale, 20 * scale, 100 * scale, 100 * scale, p); 183fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->restore(); 184fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 185fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 186fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onDraw(SkCanvas* canvas) override { 187fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot line(0.00005f, canvas, SK_ColorBLACK); 188fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot line(0.000045f, canvas, SK_ColorRED); 189fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot line(0.0000035f, canvas, SK_ColorGREEN); 190fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot line(0.000003f, canvas, SK_ColorBLUE); 191fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot line(0.000002f, canvas, SK_ColorBLACK); 192fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 193fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 194fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef skiagm::GM INHERITED; 195fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 196fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 197fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_SIMPLE_GM(CubicStroke, canvas, 384, 384) { 198fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint p; 199fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setAntiAlias(true); 200fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setStyle(SkPaint::kStroke_Style); 201fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setStrokeWidth(1.0720f); 202fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPath path; 203fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.moveTo(-6000,-6000); 204fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.cubicTo(-3500,5500,-500,5500,2500,-6500); 205fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(path, p); 206fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setStrokeWidth(1.0721f); 207fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(10, 10); 208fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(path, p); 209fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setStrokeWidth(1.0722f); 210fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(10, 10); 211fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(path, p); 212fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 213fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 214fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_SIMPLE_GM(zerolinestroke, canvas, 90, 120) { 215fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint paint; 216fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStyle(SkPaint::kStroke_Style); 217fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStrokeWidth(20); 218fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setAntiAlias(true); 219fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStrokeCap(SkPaint::kRound_Cap); 220fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 221fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPath path; 222fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.moveTo(30, 90); 223fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.lineTo(30, 90); 224fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.lineTo(60, 90); 225fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.lineTo(60, 90); 226fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(path, paint); 227fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 228fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.reset(); 229fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.moveTo(30, 30); 230fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.lineTo(60, 30); 231fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(path, paint); 232fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 233fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.reset(); 234fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.moveTo(30, 60); 235fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.lineTo(30, 60); 236fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.lineTo(60, 60); 237fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(path, paint); 238fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 239fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 240fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_SIMPLE_GM(quadcap, canvas, 200, 200) { 241fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint p; 242fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setAntiAlias(true); 243fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setStyle(SkPaint::kStroke_Style); 244fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setStrokeWidth(0); 245fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPath path; 246fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPoint pts[] = {{105.738571f,13.126318f}, 247fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot {105.738571f,13.126318f}, 248fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot {123.753784f,1.f}}; 249fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkVector tangent = pts[1] - pts[2]; 250fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot tangent.normalize(); 251fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPoint pts2[3]; 252fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot memcpy(pts2, pts, sizeof(pts)); 253fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkScalar capOutset = SK_ScalarPI / 8; 254fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot pts2[0].fX += tangent.fX * capOutset; 255fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot pts2[0].fY += tangent.fY * capOutset; 256fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot pts2[1].fX += tangent.fX * capOutset; 257fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot pts2[1].fY += tangent.fY * capOutset; 258fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot pts2[2].fX += -tangent.fX * capOutset; 259fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot pts2[2].fY += -tangent.fY * capOutset; 260fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.moveTo(pts2[0]); 261fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.quadTo(pts2[1], pts2[2]); 262fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(path, p); 263fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 264fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.reset(); 265fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.moveTo(pts[0]); 266fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.quadTo(pts[1], pts[2]); 267fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setStrokeCap(SkPaint::kRound_Cap); 268fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(30, 0); 269fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(path, p); 270fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 271fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 272fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass Strokes2GM : public skiagm::GM { 273fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPath fPath; 274fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 275fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onOnceBeforeDraw() override { 276fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRandom rand; 277fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fPath.moveTo(0, 0); 278fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int i = 0; i < 13; i++) { 279fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar x = rand.nextUScalar1() * (W >> 1); 280fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar y = rand.nextUScalar1() * (H >> 1); 281fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fPath.lineTo(x, y); 282fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 283fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 284fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 285fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 286fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString onShortName() override { 287fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkString("strokes_poly"); 288fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 289fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 290fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkISize onISize() override { 291fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkISize::Make(W, H*2); 292fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 293fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 294fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onDraw(SkCanvas* canvas) override { 295fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawColor(SK_ColorWHITE); 296fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 297fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint paint; 298fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStyle(SkPaint::kStroke_Style); 299fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStrokeWidth(SkIntToScalar(9)/2); 300fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 301fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int y = 0; y < 2; y++) { 302fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setAntiAlias(!!y); 303fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkAutoCanvasRestore acr(canvas, true); 304fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(0, SH * y); 305fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->clipRect(SkRect::MakeLTRB(SkIntToScalar(2), 306fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkIntToScalar(2), 307fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SW - SkIntToScalar(2), 308fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SH - SkIntToScalar(2))); 309fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 310fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRandom rand; 311fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int i = 0; i < N/2; i++) { 312fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect r; 313fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot rnd_rect(&r, &paint, rand); 314fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->rotate(SkIntToScalar(15), SW/2, SH/2); 315fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(fPath, paint); 316fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 317fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 318fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 319fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 320fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 321fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef skiagm::GM INHERITED; 322fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 323fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 324fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot////////////////////////////////////////////////////////////////////////////// 325fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 326fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic SkRect inset(const SkRect& r) { 327fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect rr(r); 328fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot rr.inset(r.width()/10, r.height()/10); 329fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return rr; 330fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 331fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 332fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass Strokes3GM : public skiagm::GM { 333fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static void make0(SkPath* path, const SkRect& bounds, SkString* title) { 334fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path->addRect(bounds, SkPath::kCW_Direction); 335fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path->addRect(inset(bounds), SkPath::kCW_Direction); 336fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot title->set("CW CW"); 337fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 338fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 339fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static void make1(SkPath* path, const SkRect& bounds, SkString* title) { 340fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path->addRect(bounds, SkPath::kCW_Direction); 341fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path->addRect(inset(bounds), SkPath::kCCW_Direction); 342fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot title->set("CW CCW"); 343fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 344fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 345fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static void make2(SkPath* path, const SkRect& bounds, SkString* title) { 346fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path->addOval(bounds, SkPath::kCW_Direction); 347fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path->addOval(inset(bounds), SkPath::kCW_Direction); 348fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot title->set("CW CW"); 349fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 350fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 351fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static void make3(SkPath* path, const SkRect& bounds, SkString* title) { 352fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path->addOval(bounds, SkPath::kCW_Direction); 353fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path->addOval(inset(bounds), SkPath::kCCW_Direction); 354fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot title->set("CW CCW"); 355fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 356fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 357fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static void make4(SkPath* path, const SkRect& bounds, SkString* title) { 358fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path->addRect(bounds, SkPath::kCW_Direction); 359fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect r = bounds; 360fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot r.inset(bounds.width() / 10, -bounds.height() / 10); 361fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path->addOval(r, SkPath::kCW_Direction); 362fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot title->set("CW CW"); 363fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 364fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 365fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static void make5(SkPath* path, const SkRect& bounds, SkString* title) { 366fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path->addRect(bounds, SkPath::kCW_Direction); 367fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect r = bounds; 368fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot r.inset(bounds.width() / 10, -bounds.height() / 10); 369fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path->addOval(r, SkPath::kCCW_Direction); 370fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot title->set("CW CCW"); 371fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 372fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 373fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 374fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot Strokes3GM() {} 375fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 376fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 377fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 378fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString onShortName() override { 379fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkString("strokes3"); 380fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 381fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 382fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkISize onISize() override { 383fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkISize::Make(1500, 1500); 384fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 385fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 386fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onDraw(SkCanvas* canvas) override { 387fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint origPaint; 388fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot origPaint.setAntiAlias(true); 389fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot origPaint.setStyle(SkPaint::kStroke_Style); 390fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint fillPaint(origPaint); 391fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fillPaint.setColor(SK_ColorRED); 392fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint strokePaint(origPaint); 393fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot strokePaint.setColor(sk_tool_utils::color_to_565(0xFF4444FF)); 394fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 395fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void (*procs[])(SkPath*, const SkRect&, SkString*) = { 396fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot make0, make1, make2, make3, make4, make5 397fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot }; 398fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 399fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(SkIntToScalar(20), SkIntToScalar(80)); 400fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 401fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect bounds = SkRect::MakeWH(SkIntToScalar(50), SkIntToScalar(50)); 402fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar dx = bounds.width() * 4/3; 403fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar dy = bounds.height() * 5; 404fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 405fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (size_t i = 0; i < SK_ARRAY_COUNT(procs); ++i) { 406fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPath orig; 407fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString str; 408fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot procs[i](&orig, bounds, &str); 409fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 410fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->save(); 411fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int j = 0; j < 13; ++j) { 412fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot strokePaint.setStrokeWidth(SK_Scalar1 * j * j); 413fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(orig, strokePaint); 414fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(orig, origPaint); 415fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPath fill; 416fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot strokePaint.getFillPath(orig, &fill); 417fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(fill, fillPaint); 418fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(dx + strokePaint.getStrokeWidth(), 0); 419fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 420fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->restore(); 421fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(0, dy); 422fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 423fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 424fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 425fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 426fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef skiagm::GM INHERITED; 427fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 428fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 429fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass Strokes4GM : public skiagm::GM { 430fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 431fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot Strokes4GM() {} 432fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 433fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 434fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 435fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString onShortName() override { 436fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkString("strokes_zoomed"); 437fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 438fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 439fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkISize onISize() override { 440fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkISize::Make(W, H*2); 441fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 442fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 443fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onDraw(SkCanvas* canvas) override { 444fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint paint; 445fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStyle(SkPaint::kStroke_Style); 446fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStrokeWidth(0.055f); 447fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 448fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->scale(1000, 1000); 449fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawCircle(0, 2, 1.97f, paint); 450fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 451fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 452fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 453fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef skiagm::GM INHERITED; 454fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 455fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 456fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot// Test stroking for curves that produce degenerate tangents when t is 0 or 1 (see bug 4191) 457fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass Strokes5GM : public skiagm::GM { 458fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 459fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot Strokes5GM() {} 460fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 461fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 462fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 463fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString onShortName() override { 464fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkString("zero_control_stroke"); 465fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 466fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 467fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkISize onISize() override { 468fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkISize::Make(W, H*2); 469fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 470fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 471fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onDraw(SkCanvas* canvas) override { 472fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint p; 473fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setColor(SK_ColorRED); 474fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setAntiAlias(true); 475fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setStyle(SkPaint::kStroke_Style); 476fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setStrokeWidth(40); 477fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setStrokeCap(SkPaint::kButt_Cap); 478fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 479fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPath path; 480fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.moveTo(157.474f,111.753f); 481fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.cubicTo(128.5f,111.5f,35.5f,29.5f,35.5f,29.5f); 482fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(path, p); 483fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.reset(); 484fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.moveTo(250, 50); 485fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.quadTo(280, 80, 280, 80); 486fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(path, p); 487fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.reset(); 488fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.moveTo(150, 50); 489fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.conicTo(180, 80, 180, 80, 0.707f); 490fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(path, p); 491fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 492fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.reset(); 493fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.moveTo(157.474f,311.753f); 494fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.cubicTo(157.474f,311.753f,85.5f,229.5f,35.5f,229.5f); 495fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(path, p); 496fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.reset(); 497fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.moveTo(280, 250); 498fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.quadTo(280, 250, 310, 280); 499fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(path, p); 500fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.reset(); 501fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.moveTo(180, 250); 502fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.conicTo(180, 250, 210, 280, 0.707f); 503fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(path, p); 504fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 505fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 506fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 507fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef skiagm::GM INHERITED; 508fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 509fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 510fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 511fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot////////////////////////////////////////////////////////////////////////////// 512fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 513fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_GM( return new StrokesGM; ) 514fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_GM( return new Strokes2GM; ) 515fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_GM( return new Strokes3GM; ) 516fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_GM( return new Strokes4GM; ) 517fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_GM( return new Strokes5GM; ) 518fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 519fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_GM( return new ZeroLenStrokesGM; ) 520fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_GM( return new TeenyStrokesGM; ) 521fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 522fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_SIMPLE_GM(zerolinedash, canvas, 256, 256) { 523fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->clear(SK_ColorWHITE); 524fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 525fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint paint; 526fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setColor(SkColorSetARGB(255, 0, 0, 0)); 527fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStrokeWidth(11); 528fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStrokeCap(SkPaint::kRound_Cap); 529fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStrokeJoin(SkPaint::kBevel_Join); 530fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 531fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar dash_pattern[] = {1, 5}; 532fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setPathEffect(SkDashPathEffect::Make(dash_pattern, 2, 0)); 533fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 534fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawLine(100, 100, 100, 100, paint); 535fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 536fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 537fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifdef PDF_IS_FIXED_SO_THIS_DOESNT_BREAK_IT 538fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_SIMPLE_GM(longrect_dash, canvas, 250, 250) { 539fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->clear(SK_ColorWHITE); 540fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 541fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint paint; 542fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setColor(SkColorSetARGB(255, 0, 0, 0)); 543fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStrokeWidth(5); 544fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStrokeCap(SkPaint::kRound_Cap); 545fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStrokeJoin(SkPaint::kBevel_Join); 546fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStyle(SkPaint::kStroke_Style); 547fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar dash_pattern[] = {1, 5}; 548fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setPathEffect(SkDashPathEffect::Make(dash_pattern, 2, 0)); 549fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // try all combinations of stretching bounds 550fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (auto left : { 20.f, -100001.f } ) { 551fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (auto top : { 20.f, -100001.f } ) { 552fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (auto right : { 40.f, 100001.f } ) { 553fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (auto bottom : { 40.f, 100001.f } ) { 554fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->save(); 555fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->clipRect({10, 10, 50, 50}); 556fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawRect({left, top, right, bottom}, paint); 557fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->restore(); 558fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(60, 0); 559fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 560fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 561fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(-60 * 4, 60); 562fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 563fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 564fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 565fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 566