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 LinePathGM : public GM { 1545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgpublic: 1645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org LinePathGM() {} 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("linepath"); 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, 15*SK_Scalar1); 8245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org path.fPath.lineTo(75*SK_Scalar1, 15*SK_Scalar1); 8345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org path.fName = "moveTo-line"; 8445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 8545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint titlePaint; 8645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint.setColor(SK_ColorBLACK); 8745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint.setAntiAlias(true); 8845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint.setLCDRenderText(true); 8945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint.setTextSize(15 * SK_Scalar1); 9045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const char title[] = "Line Drawn Into Rectangle Clips With " 9145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org "Indicated Style, Fill and Linecaps, with stroke width 10"; 9245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawText(title, strlen(title), 9345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 20 * SK_Scalar1, 9445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 20 * SK_Scalar1, 9545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint); 9645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 97e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkLCGRandom rand; 9845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkRect rect = SkRect::MakeWH(100*SK_Scalar1, 30*SK_Scalar1); 9945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 10045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->translate(10 * SK_Scalar1, 30 * SK_Scalar1); 10145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 10245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org for (size_t cap = 0; cap < SK_ARRAY_COUNT(gCaps); ++cap) { 10345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org if (0 < cap) { 10445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->translate((rect.width() + 40 * SK_Scalar1) * SK_ARRAY_COUNT(gStyles), 0); 10545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 10645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 10745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org for (size_t fill = 0; fill < SK_ARRAY_COUNT(gFills); ++fill) { 10845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org if (0 < fill) { 10945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->translate(0, rect.height() + 40 * SK_Scalar1); 11045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 11145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 11245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org for (size_t style = 0; style < SK_ARRAY_COUNT(gStyles); ++style) { 11345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org if (0 < style) { 11445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->translate(rect.width() + 40 * SK_Scalar1, 0); 11545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 116d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 11745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkColor color = 0xff007000; 11845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org this->drawPath(path.fPath, canvas, color, rect, 11945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org gCaps[cap].fCap, gCaps[cap].fJoin, gStyles[style].fStyle, 12045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org gFills[fill].fFill, SK_Scalar1*10); 121d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 12245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint rectPaint; 12345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org rectPaint.setColor(SK_ColorBLACK); 12445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org rectPaint.setStyle(SkPaint::kStroke_Style); 12545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org rectPaint.setStrokeWidth(-1); 12645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org rectPaint.setAntiAlias(true); 12745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawRect(rect, rectPaint); 128d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 12945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint labelPaint; 13045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint.setColor(color); 13145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint.setAntiAlias(true); 13245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint.setLCDRenderText(true); 13345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint.setTextSize(10 * SK_Scalar1); 13445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawText(gStyles[style].fName, 13545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org strlen(gStyles[style].fName), 13645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 0, rect.height() + 12 * SK_Scalar1, 13745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint); 13845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawText(gFills[fill].fName, 13945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org strlen(gFills[fill].fName), 14045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 0, rect.height() + 24 * SK_Scalar1, 14145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint); 14245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawText(gCaps[cap].fName, 14345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org strlen(gCaps[cap].fName), 14445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 0, rect.height() + 36 * SK_Scalar1, 14545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint); 14645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 14745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->restore(); 14845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 14945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->restore(); 15045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 15145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->restore(); 15245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->restore(); 15345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 154d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 15545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgprivate: 15645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org typedef GM INHERITED; 15745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org}; 15845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 15945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgclass LineClosePathGM : public GM { 16045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgpublic: 16145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org LineClosePathGM() {} 16245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 16345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgprotected: 16445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkString onShortName() { 16545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org return SkString("lineclosepath"); 16645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 167d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 168f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina SkISize onISize() { return SkISize::Make(1240, 390); } 169d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 17045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org void drawPath(SkPath& path,SkCanvas* canvas,SkColor color, 17145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const SkRect& clip,SkPaint::Cap cap, SkPaint::Join join, 17245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint::Style style, SkPath::FillType fill, 17345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkScalar strokeWidth) { 17445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org path.setFillType(fill); 17545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint paint; 17645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org paint.setStrokeCap(cap); 17745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org paint.setStrokeWidth(strokeWidth); 17845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org paint.setStrokeJoin(join); 17945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org paint.setColor(color); 18045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org paint.setStyle(style); 18145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 18245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->clipRect(clip); 18345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawPath(path, paint); 18445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->restore(); 18545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 186d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 18745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org virtual void onDraw(SkCanvas* canvas) { 18845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org struct FillAndName { 18945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPath::FillType fFill; 19045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const char* fName; 19145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 19245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org static const FillAndName gFills[] = { 19345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPath::kWinding_FillType, "Winding"}, 19445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPath::kEvenOdd_FillType, "Even / Odd"}, 19545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPath::kInverseWinding_FillType, "Inverse Winding"}, 19645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPath::kInverseEvenOdd_FillType, "Inverse Even / Odd"}, 19745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 19845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org struct StyleAndName { 19945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint::Style fStyle; 20045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const char* fName; 20145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 20245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org static const StyleAndName gStyles[] = { 20345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kFill_Style, "Fill"}, 20445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kStroke_Style, "Stroke"}, 20545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kStrokeAndFill_Style, "Stroke And Fill"}, 20645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 20745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org struct CapAndName { 20845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint::Cap fCap; 20945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint::Join fJoin; 21045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const char* fName; 21145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 21245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org static const CapAndName gCaps[] = { 21345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kButt_Cap, SkPaint::kBevel_Join, "Butt"}, 21445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kRound_Cap, SkPaint::kRound_Join, "Round"}, 21545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org {SkPaint::kSquare_Cap, SkPaint::kBevel_Join, "Square"} 21645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 21745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org struct PathAndName { 21845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPath fPath; 21945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const char* fName; 22045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org }; 22145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org PathAndName path; 22245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org path.fPath.moveTo(25*SK_Scalar1, 15*SK_Scalar1); 22345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org path.fPath.lineTo(75*SK_Scalar1, 15*SK_Scalar1); 22445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org path.fPath.close(); 22545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org path.fName = "moveTo-line-close"; 22645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 22745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint titlePaint; 22845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint.setColor(SK_ColorBLACK); 22945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint.setAntiAlias(true); 23045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint.setLCDRenderText(true); 23145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint.setTextSize(15 * SK_Scalar1); 23245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org const char title[] = "Line Closed Drawn Into Rectangle Clips With " 23345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org "Indicated Style, Fill and Linecaps, with stroke width 10"; 23445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawText(title, strlen(title), 23545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 20 * SK_Scalar1, 23645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 20 * SK_Scalar1, 23745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org titlePaint); 23845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 239e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkLCGRandom rand; 24045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkRect rect = SkRect::MakeWH(100*SK_Scalar1, 30*SK_Scalar1); 24145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 24245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->translate(10 * SK_Scalar1, 30 * SK_Scalar1); 24345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 24445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org for (size_t cap = 0; cap < SK_ARRAY_COUNT(gCaps); ++cap) { 24545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org if (0 < cap) { 24645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->translate((rect.width() + 40 * SK_Scalar1) * SK_ARRAY_COUNT(gStyles), 0); 24745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 24845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 24945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org for (size_t fill = 0; fill < SK_ARRAY_COUNT(gFills); ++fill) { 25045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org if (0 < fill) { 25145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->translate(0, rect.height() + 40 * SK_Scalar1); 25245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org } 25345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->save(); 25445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org for (size_t style = 0; style < SK_ARRAY_COUNT(gStyles); ++style) { 25545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org if (0 < style) { 25645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->translate(rect.width() + 40 * SK_Scalar1, 0); 2574da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org } 258d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 25945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkColor color = 0xff007000; 26045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org this->drawPath(path.fPath, canvas, color, rect, 26145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org gCaps[cap].fCap, gCaps[cap].fJoin, gStyles[style].fStyle, 26245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org gFills[fill].fFill, SK_Scalar1*10); 263d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 26445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint rectPaint; 26545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org rectPaint.setColor(SK_ColorBLACK); 26645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org rectPaint.setStyle(SkPaint::kStroke_Style); 26745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org rectPaint.setStrokeWidth(-1); 26845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org rectPaint.setAntiAlias(true); 26945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawRect(rect, rectPaint); 270d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 27145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org SkPaint labelPaint; 27245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint.setColor(color); 27345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint.setAntiAlias(true); 27445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint.setLCDRenderText(true); 27545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint.setTextSize(10 * SK_Scalar1); 27645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawText(gStyles[style].fName, 27745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org strlen(gStyles[style].fName), 27845cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 0, rect.height() + 12 * SK_Scalar1, 27945cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint); 28045cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawText(gFills[fill].fName, 28145cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org strlen(gFills[fill].fName), 28245cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 0, rect.height() + 24 * SK_Scalar1, 28345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint); 28445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org canvas->drawText(gCaps[cap].fName, 28545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org strlen(gCaps[cap].fName), 28645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 0, rect.height() + 36 * SK_Scalar1, 28745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org labelPaint); 2884da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org } 2894da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org canvas->restore(); 2904da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org } 2914da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org canvas->restore(); 2924da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org } 2934da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org canvas->restore(); 2944da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org canvas->restore(); 2954da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org } 296d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 2974da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.orgprivate: 2984da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org typedef GM INHERITED; 2994da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org}; 3004da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org 3014da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org////////////////////////////////////////////////////////////////////////////// 3024da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org 30345cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgstatic GM* LinePathFactory(void*) { return new LinePathGM; } 30445cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgstatic GMRegistry regLinePath(LinePathFactory); 30545cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.org 30645cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgstatic GM* LineClosePathFactory(void*) { return new LineClosePathGM; } 30745cbfdd53533693927ac13d44e42104269ce7a9eschenney@chromium.orgstatic GMRegistry regLineClosePath(LineClosePathFactory); 3084da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org 3094da06ab3351f2a96f9216d96106db33a77b19644schenney@chromium.org} 310