14da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org/* 24da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org * Copyright 2011 Google Inc. 34da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org * 44da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org * Use of this source code is governed by a BSD-style license that can be 54da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org * found in the LICENSE file. 64da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org */ 74da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org#include "gm.h" 84da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org#include "SkCanvas.h" 94da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org#include "SkPaint.h" 104da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org#include "SkRandom.h" 114da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org 124da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.orgnamespace skiagm { 134da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org 1445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgclass QuadPathGM : public GM { 1545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgpublic: 1645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org QuadPathGM() {} 1745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 1845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgprotected: 19a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 20a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipTiled_Flag; 21a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org } 22a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 2345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkString onShortName() { 2445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org return SkString("quadpath"); 2545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 26d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 27f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina SkISize onISize() { return SkISize::Make(1240, 390); } 28d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 2945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org void drawPath(SkPath& path,SkCanvas* canvas,SkColor color, 3045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const SkRect& clip,SkPaint::Cap cap, SkPaint::Join join, 3145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint::Style style, SkPath::FillType fill, 3245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkScalar strokeWidth) { 3345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org path.setFillType(fill); 3445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint paint; 3545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org paint.setStrokeCap(cap); 3645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org paint.setStrokeWidth(strokeWidth); 3745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org paint.setStrokeJoin(join); 3845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org paint.setColor(color); 3945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org paint.setStyle(style); 4045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 4145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->clipRect(clip); 4245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawPath(path, paint); 4345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->restore(); 4445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 45d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 4645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org virtual void onDraw(SkCanvas* canvas) { 4745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org struct FillAndName { 4845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPath::FillType fFill; 4945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const char* fName; 5045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 5145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org static const FillAndName gFills[] = { 5245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPath::kWinding_FillType, "Winding"}, 5345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPath::kEvenOdd_FillType, "Even / Odd"}, 5445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPath::kInverseWinding_FillType, "Inverse Winding"}, 5545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPath::kInverseEvenOdd_FillType, "Inverse Even / Odd"}, 5645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 5745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org struct StyleAndName { 5845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint::Style fStyle; 5945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const char* fName; 6045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 6145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org static const StyleAndName gStyles[] = { 6245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kFill_Style, "Fill"}, 6345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kStroke_Style, "Stroke"}, 6445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kStrokeAndFill_Style, "Stroke And Fill"}, 6545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 6645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org struct CapAndName { 6745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint::Cap fCap; 6845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint::Join fJoin; 6945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const char* fName; 7045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 7145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org static const CapAndName gCaps[] = { 7245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kButt_Cap, SkPaint::kBevel_Join, "Butt"}, 7345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kRound_Cap, SkPaint::kRound_Join, "Round"}, 7445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kSquare_Cap, SkPaint::kBevel_Join, "Square"} 7545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 7645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org struct PathAndName { 7745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPath fPath; 7845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const char* fName; 7945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 8045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org PathAndName path; 8145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org path.fPath.moveTo(25*SK_Scalar1, 10*SK_Scalar1); 8245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org path.fPath.quadTo(50*SK_Scalar1, 20*SK_Scalar1, 8345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 75*SK_Scalar1, 10*SK_Scalar1); 8445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org path.fName = "moveTo-quad"; 8545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 8645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint titlePaint; 8745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint.setColor(SK_ColorBLACK); 8845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint.setAntiAlias(true); 8945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint.setLCDRenderText(true); 9045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint.setTextSize(15 * SK_Scalar1); 9145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const char title[] = "Quad Drawn Into Rectangle Clips With " 9245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org "Indicated Style, Fill and Linecaps, with stroke width 10"; 9345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawText(title, strlen(title), 9445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 20 * SK_Scalar1, 9545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 20 * SK_Scalar1, 9645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint); 9745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 98e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkLCGRandom rand; 9945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkRect rect = SkRect::MakeWH(100*SK_Scalar1, 30*SK_Scalar1); 10045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 10145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->translate(10 * SK_Scalar1, 30 * SK_Scalar1); 10245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 10345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org for (size_t cap = 0; cap < SK_ARRAY_COUNT(gCaps); ++cap) { 10445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org if (0 < cap) { 10545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->translate((rect.width() + 40 * SK_Scalar1) * SK_ARRAY_COUNT(gStyles), 0); 10645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 10745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 10845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org for (size_t fill = 0; fill < SK_ARRAY_COUNT(gFills); ++fill) { 10945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org if (0 < fill) { 11045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->translate(0, rect.height() + 40 * SK_Scalar1); 11145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 11245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 11345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org for (size_t style = 0; style < SK_ARRAY_COUNT(gStyles); ++style) { 11445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org if (0 < style) { 11545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->translate(rect.width() + 40 * SK_Scalar1, 0); 11645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 117d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 11845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkColor color = 0xff007000; 11945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org this->drawPath(path.fPath, canvas, color, rect, 12045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org gCaps[cap].fCap, gCaps[cap].fJoin, gStyles[style].fStyle, 12145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org gFills[fill].fFill, SK_Scalar1*10); 122d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 12345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint rectPaint; 12445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org rectPaint.setColor(SK_ColorBLACK); 12545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org rectPaint.setStyle(SkPaint::kStroke_Style); 12645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org rectPaint.setStrokeWidth(-1); 12745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org rectPaint.setAntiAlias(true); 12845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawRect(rect, rectPaint); 129d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 13045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint labelPaint; 13145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint.setColor(color); 13245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint.setAntiAlias(true); 13345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint.setLCDRenderText(true); 13445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint.setTextSize(10 * SK_Scalar1); 13545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawText(gStyles[style].fName, 13645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org strlen(gStyles[style].fName), 13745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 0, rect.height() + 12 * SK_Scalar1, 13845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint); 13945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawText(gFills[fill].fName, 14045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org strlen(gFills[fill].fName), 14145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 0, rect.height() + 24 * SK_Scalar1, 14245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint); 14345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawText(gCaps[cap].fName, 14445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org strlen(gCaps[cap].fName), 14545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 0, rect.height() + 36 * SK_Scalar1, 14645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint); 14745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 14845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->restore(); 14945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 15045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->restore(); 15145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 15245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->restore(); 15345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->restore(); 15445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 155d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 15645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgprivate: 15745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org typedef GM INHERITED; 15845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org}; 15945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 16045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgclass QuadClosePathGM : public GM { 16145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgpublic: 16245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org QuadClosePathGM() {} 16345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 16445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgprotected: 165a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 166a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipTiled_Flag; 167a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org } 168a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 16945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkString onShortName() { 17045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org return SkString("quadclosepath"); 17145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 172d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 173f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina SkISize onISize() { return SkISize::Make(1240, 390); } 174d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 17545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org void drawPath(SkPath& path,SkCanvas* canvas,SkColor color, 17645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const SkRect& clip,SkPaint::Cap cap, SkPaint::Join join, 17745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint::Style style, SkPath::FillType fill, 17845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkScalar strokeWidth) { 17945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org path.setFillType(fill); 18045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint paint; 18145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org paint.setStrokeCap(cap); 18245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org paint.setStrokeWidth(strokeWidth); 18345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org paint.setStrokeJoin(join); 18445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org paint.setColor(color); 18545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org paint.setStyle(style); 18645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 18745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->clipRect(clip); 18845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawPath(path, paint); 18945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->restore(); 19045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 191d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 19245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org virtual void onDraw(SkCanvas* canvas) { 19345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org struct FillAndName { 19445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPath::FillType fFill; 19545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const char* fName; 19645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 19745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org static const FillAndName gFills[] = { 19845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPath::kWinding_FillType, "Winding"}, 19945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPath::kEvenOdd_FillType, "Even / Odd"}, 20045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPath::kInverseWinding_FillType, "Inverse Winding"}, 20145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPath::kInverseEvenOdd_FillType, "Inverse Even / Odd"}, 20245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 20345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org struct StyleAndName { 20445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint::Style fStyle; 20545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const char* fName; 20645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 20745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org static const StyleAndName gStyles[] = { 20845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kFill_Style, "Fill"}, 20945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kStroke_Style, "Stroke"}, 21045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kStrokeAndFill_Style, "Stroke And Fill"}, 21145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 21245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org struct CapAndName { 21345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint::Cap fCap; 21445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint::Join fJoin; 21545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const char* fName; 21645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 21745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org static const CapAndName gCaps[] = { 21845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kButt_Cap, SkPaint::kBevel_Join, "Butt"}, 21945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kRound_Cap, SkPaint::kRound_Join, "Round"}, 22045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kSquare_Cap, SkPaint::kBevel_Join, "Square"} 22145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 22245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org struct PathAndName { 22345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPath fPath; 22445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const char* fName; 22545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 22645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org PathAndName path; 22745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org path.fPath.moveTo(25*SK_Scalar1, 10*SK_Scalar1); 22845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org path.fPath.quadTo(50*SK_Scalar1, 20*SK_Scalar1, 22945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 75*SK_Scalar1, 10*SK_Scalar1); 23045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org path.fPath.close(); 23145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org path.fName = "moveTo-quad-close"; 23245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 23345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint titlePaint; 23445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint.setColor(SK_ColorBLACK); 23545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint.setAntiAlias(true); 23645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint.setLCDRenderText(true); 23745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint.setTextSize(15 * SK_Scalar1); 23845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const char title[] = "Quad Closed Drawn Into Rectangle Clips With " 23945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org "Indicated Style, Fill and Linecaps, with stroke width 10"; 24045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawText(title, strlen(title), 24145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 20 * SK_Scalar1, 24245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 20 * SK_Scalar1, 24345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint); 24445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 245e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkLCGRandom rand; 24645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkRect rect = SkRect::MakeWH(100*SK_Scalar1, 30*SK_Scalar1); 24745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 24845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->translate(10 * SK_Scalar1, 30 * SK_Scalar1); 24945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 25045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org for (size_t cap = 0; cap < SK_ARRAY_COUNT(gCaps); ++cap) { 25145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org if (0 < cap) { 25245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->translate((rect.width() + 40 * SK_Scalar1) * SK_ARRAY_COUNT(gStyles), 0); 25345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 25445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 25545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org for (size_t fill = 0; fill < SK_ARRAY_COUNT(gFills); ++fill) { 25645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org if (0 < fill) { 25745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->translate(0, rect.height() + 40 * SK_Scalar1); 25845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 25945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 26045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org for (size_t style = 0; style < SK_ARRAY_COUNT(gStyles); ++style) { 26145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org if (0 < style) { 26245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->translate(rect.width() + 40 * SK_Scalar1, 0); 2634da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org } 264d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 26545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkColor color = 0xff007000; 26645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org this->drawPath(path.fPath, canvas, color, rect, 26745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org gCaps[cap].fCap, gCaps[cap].fJoin, gStyles[style].fStyle, 26845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org gFills[fill].fFill, SK_Scalar1*10); 269d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 27045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint rectPaint; 27145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org rectPaint.setColor(SK_ColorBLACK); 27245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org rectPaint.setStyle(SkPaint::kStroke_Style); 27345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org rectPaint.setStrokeWidth(-1); 27445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org rectPaint.setAntiAlias(true); 27545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawRect(rect, rectPaint); 276d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 27745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint labelPaint; 27845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint.setColor(color); 27945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint.setAntiAlias(true); 28045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint.setLCDRenderText(true); 28145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint.setTextSize(10 * SK_Scalar1); 28245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawText(gStyles[style].fName, 28345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org strlen(gStyles[style].fName), 28445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 0, rect.height() + 12 * SK_Scalar1, 28545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint); 28645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawText(gFills[fill].fName, 28745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org strlen(gFills[fill].fName), 28845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 0, rect.height() + 24 * SK_Scalar1, 28945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint); 29045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawText(gCaps[cap].fName, 29145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org strlen(gCaps[cap].fName), 29245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 0, rect.height() + 36 * SK_Scalar1, 29345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint); 2944da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org } 2954da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org canvas->restore(); 2964da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org } 2974da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org canvas->restore(); 2984da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org } 2994da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org canvas->restore(); 3004da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org canvas->restore(); 3014da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org } 302d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 3034da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.orgprivate: 3044da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org typedef GM INHERITED; 3054da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org}; 3064da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org 3074da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org////////////////////////////////////////////////////////////////////////////// 3084da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org 30945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgstatic GM* QuadPathFactory(void*) { return new QuadPathGM; } 31045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgstatic GMRegistry regQuadPath(QuadPathFactory); 31145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 31245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgstatic GM* QuadClosePathFactory(void*) { return new QuadClosePathGM; } 31345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgstatic GMRegistry regQuadClosePath(QuadClosePathFactory); 3144da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org 3150b71f6cedd57de177b8368c48dfaab14feda9677schenney@chromium.org} 316