1 /* 2 * Copyright 2011 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "gm.h" 9 #include "SkCanvas.h" 10 #include "SkPath.h" 11 #include "SkTypeface.h" 12 13 namespace skiagm { 14 15 class StrokeFillGM : public GM { 16 public: 17 StrokeFillGM() { 18 19 } 20 21 protected: 22 virtual SkString onShortName() { 23 return SkString("stroke-fill"); 24 } 25 26 virtual SkISize onISize() { 27 return make_isize(640, 480); 28 } 29 30 static void show_bold(SkCanvas* canvas, const void* text, int len, 31 SkScalar x, SkScalar y, const SkPaint& paint) { 32 SkPaint p(paint); 33 canvas->drawText(text, len, x, y, p); 34 p.setFakeBoldText(true); 35 canvas->drawText(text, len, x, y + SkIntToScalar(120), p); 36 } 37 38 virtual void onDraw(SkCanvas* canvas) { 39 SkScalar x = SkIntToScalar(100); 40 SkScalar y = SkIntToScalar(88); 41 42 SkPaint paint; 43 paint.setAntiAlias(true); 44 paint.setTextSize(SkIntToScalar(100)); 45 paint.setStrokeWidth(SkIntToScalar(5)); 46 47 SkTypeface* face = SkTypeface::CreateFromName("Papyrus", SkTypeface::kNormal); 48 SkSafeUnref(paint.setTypeface(face)); 49 show_bold(canvas, "Hello", 5, x, y, paint); 50 51 face = SkTypeface::CreateFromName("Hiragino Maru Gothic Pro", SkTypeface::kNormal); 52 SkSafeUnref(paint.setTypeface(face)); 53 const unsigned char hyphen[] = { 0xE3, 0x83, 0xBC }; 54 show_bold(canvas, hyphen, SK_ARRAY_COUNT(hyphen), x + SkIntToScalar(300), y, paint); 55 56 paint.setStyle(SkPaint::kStrokeAndFill_Style); 57 58 SkPath path; 59 path.setFillType(SkPath::kWinding_FillType); 60 path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCW_Direction); 61 path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(40), SkPath::kCCW_Direction); 62 canvas->drawPath(path, paint); 63 64 SkPath path2; 65 path2.setFillType(SkPath::kWinding_FillType); 66 path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCCW_Direction); 67 path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(40), SkPath::kCW_Direction); 68 canvas->drawPath(path2, paint); 69 70 path2.reset(); 71 path2.addCircle(x + SkIntToScalar(240), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCCW_Direction); 72 canvas->drawPath(path2, paint); 73 SkASSERT(path2.cheapIsDirection(SkPath::kCCW_Direction)); 74 75 path2.reset(); 76 SkASSERT(!path2.cheapComputeDirection(NULL)); 77 path2.addCircle(x + SkIntToScalar(360), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCW_Direction); 78 SkASSERT(path2.cheapIsDirection(SkPath::kCW_Direction)); 79 canvas->drawPath(path2, paint); 80 } 81 82 private: 83 typedef GM INHERITED; 84 }; 85 86 ////////////////////////////////////////////////////////////////////////////// 87 88 static GM* MyFactory(void*) { return new StrokeFillGM; } 89 static GMRegistry reg(MyFactory); 90 91 } 92