• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "SampleCode.h"
2 #include "SkView.h"
3 #include "SkCanvas.h"
4 #include "SkCornerPathEffect.h"
5 #include "SkCullPoints.h"
6 #include "SkGradientShader.h"
7 #include "SkPath.h"
8 #include "SkRegion.h"
9 #include "SkShader.h"
10 #include "SkUtils.h"
11 
12 class FillTypeView : public SampleView {
13     SkPath fPath;
14 public:
FillTypeView()15 	FillTypeView() {
16         const SkScalar radius = SkIntToScalar(45);
17         fPath.addCircle(SkIntToScalar(50), SkIntToScalar(50), radius);
18         fPath.addCircle(SkIntToScalar(100), SkIntToScalar(100), radius);
19 
20         this->setBGColor(0xFFDDDDDD);
21     }
22 
23 protected:
24     // overrides from SkEventSink
onQuery(SkEvent * evt)25     virtual bool onQuery(SkEvent* evt) {
26         if (SampleCode::TitleQ(*evt)) {
27             SampleCode::TitleR(evt, "FillType");
28             return true;
29         }
30         return this->INHERITED::onQuery(evt);
31     }
32 
showPath(SkCanvas * canvas,int x,int y,SkPath::FillType ft,SkScalar scale,const SkPaint & paint)33     void showPath(SkCanvas* canvas, int x, int y, SkPath::FillType ft,
34                   SkScalar scale, const SkPaint& paint) {
35 
36         const SkRect r = { 0, 0, SkIntToScalar(150), SkIntToScalar(150) };
37 
38         canvas->save();
39         canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
40         canvas->clipRect(r);
41         canvas->drawColor(SK_ColorWHITE);
42         fPath.setFillType(ft);
43         canvas->translate(r.centerX(), r.centerY());
44         canvas->scale(scale, scale);
45         canvas->translate(-r.centerX(), -r.centerY());
46         canvas->drawPath(fPath, paint);
47         canvas->restore();
48     }
49 
showFour(SkCanvas * canvas,SkScalar scale,const SkPaint & paint)50     void showFour(SkCanvas* canvas, SkScalar scale, const SkPaint& paint) {
51         showPath(canvas,   0,   0, SkPath::kWinding_FillType,
52                  scale, paint);
53         showPath(canvas, 200,   0, SkPath::kEvenOdd_FillType,
54                  scale, paint);
55         showPath(canvas,  00, 200, SkPath::kInverseWinding_FillType,
56                  scale, paint);
57         showPath(canvas, 200, 200, SkPath::kInverseEvenOdd_FillType,
58                  scale, paint);
59     }
60 
onDrawContent(SkCanvas * canvas)61     virtual void onDrawContent(SkCanvas* canvas) {
62         canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
63 
64         SkPaint paint;
65         const SkScalar scale = SkIntToScalar(5)/4;
66 
67         paint.setAntiAlias(false);
68         paint.setColor(0x8000FF00);
69 
70         showFour(canvas, SK_Scalar1, paint);
71         canvas->translate(SkIntToScalar(450), 0);
72         showFour(canvas, scale, paint);
73 
74         paint.setAntiAlias(true);
75 
76         canvas->translate(SkIntToScalar(-450), SkIntToScalar(450));
77         showFour(canvas, SK_Scalar1, paint);
78         canvas->translate(SkIntToScalar(450), 0);
79         showFour(canvas, scale, paint);
80     }
81 
82 private:
83     typedef SampleView INHERITED;
84 };
85 
86 //////////////////////////////////////////////////////////////////////////////
87 
MyFactory()88 static SkView* MyFactory() { return new FillTypeView; }
89 static SkViewRegister reg(MyFactory);
90 
91