• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
StrokeFillGM()17     StrokeFillGM() {
18 
19     }
20 
21 protected:
onShortName()22     virtual SkString onShortName() {
23         return SkString("stroke-fill");
24     }
25 
onISize()26     virtual SkISize onISize() {
27         return make_isize(640, 480);
28     }
29 
show_bold(SkCanvas * canvas,const char text[],SkScalar x,SkScalar y,const SkPaint & paint)30     static void show_bold(SkCanvas* canvas, const char text[], SkScalar x,
31                           SkScalar y, const SkPaint& paint) {
32         size_t len = strlen(text);
33         SkPaint p(paint);
34         canvas->drawText(text, len, x, y, p);
35         p.setFakeBoldText(true);
36         canvas->drawText(text, len, x, y + SkIntToScalar(120), p);
37     }
38 
onDraw(SkCanvas * canvas)39     virtual void onDraw(SkCanvas* canvas) {
40         SkScalar x = SkIntToScalar(100);
41         SkScalar y = SkIntToScalar(88);
42 
43         SkPaint paint;
44         paint.setAntiAlias(true);
45         paint.setTextSize(SkIntToScalar(100));
46         paint.setStrokeWidth(SkIntToScalar(5));
47 
48         SkTypeface* face = SkTypeface::CreateFromName("Papyrus", SkTypeface::kNormal);
49         SkSafeUnref(paint.setTypeface(face));
50         show_bold(canvas, "Hello", x, y, paint);
51 
52         face = SkTypeface::CreateFromName("Hiragino Maru Gothic Pro", SkTypeface::kNormal);
53         SkSafeUnref(paint.setTypeface(face));
54         const char hyphen[] = { 0xE3, 0x83, 0xBC, 0 };
55         show_bold(canvas, hyphen, x + SkIntToScalar(300), y, paint);
56 
57         paint.setStyle(SkPaint::kStrokeAndFill_Style);
58 
59         SkPath path;
60         path.setFillType(SkPath::kWinding_FillType);
61         path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCW_Direction);
62         path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(40), SkPath::kCCW_Direction);
63         canvas->drawPath(path, paint);
64 
65         SkPath path2;
66         path2.setFillType(SkPath::kWinding_FillType);
67         path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCCW_Direction);
68         path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(40), SkPath::kCW_Direction);
69         canvas->drawPath(path2, paint);
70 
71         path2.reset();
72         path2.addCircle(x + SkIntToScalar(240), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCCW_Direction);
73         canvas->drawPath(path2, paint);
74         SkASSERT(path2.cheapIsDirection(SkPath::kCCW_Direction));
75 
76         path2.reset();
77         SkASSERT(!path2.cheapComputeDirection(NULL));
78         path2.addCircle(x + SkIntToScalar(360), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCW_Direction);
79         SkASSERT(path2.cheapIsDirection(SkPath::kCW_Direction));
80         canvas->drawPath(path2, paint);
81     }
82 
83 private:
84     typedef GM INHERITED;
85 };
86 
87 //////////////////////////////////////////////////////////////////////////////
88 
MyFactory(void *)89 static GM* MyFactory(void*) { return new StrokeFillGM; }
90 static GMRegistry reg(MyFactory);
91 
92 }
93