• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "SampleCode.h"
2 #include "SkView.h"
3 #include "SkCanvas.h"
4 #include "SkGradientShader.h"
5 #include "SkPath.h"
6 #include "SkRegion.h"
7 #include "SkShader.h"
8 #include "SkUtils.h"
9 #include "SkComposeShader.h"
10 #include "Sk1DPathEffect.h"
11 #include "SkCornerPathEffect.h"
12 #include "SkPathMeasure.h"
13 #include "SkRandom.h"
14 #include "SkColorPriv.h"
15 #include "SkColorFilter.h"
16 #include "SkLayerRasterizer.h"
17 
18 #include "SkParsePath.h"
testparse()19 static void testparse() {
20     SkRect r;
21     r.set(0, 0, SkFloatToScalar(10), SkFloatToScalar(10.5));
22     SkPath p, p2;
23     SkString str, str2;
24 
25     p.addRect(r);
26     SkParsePath::ToSVGString(p, &str);
27     SkParsePath::FromSVGString(str.c_str(), &p2);
28     SkParsePath::ToSVGString(p2, &str2);
29 }
30 
31 class ArcsView : public SampleView {
32 public:
ArcsView()33 	ArcsView() {
34         testparse();
35         fSweep = SkIntToScalar(100);
36         this->setBGColor(0xFFDDDDDD);
37     }
38 
39 protected:
40     // overrides from SkEventSink
onQuery(SkEvent * evt)41     virtual bool onQuery(SkEvent* evt) {
42         if (SampleCode::TitleQ(*evt)) {
43             SampleCode::TitleR(evt, "Arcs");
44             return true;
45         }
46         return this->INHERITED::onQuery(evt);
47     }
48 
drawRectWithLines(SkCanvas * canvas,const SkRect & r,const SkPaint & p)49     static void drawRectWithLines(SkCanvas* canvas, const SkRect& r, const SkPaint& p) {
50         canvas->drawRect(r, p);
51         canvas->drawLine(r.fLeft, r.fTop, r.fRight, r.fBottom, p);
52         canvas->drawLine(r.fLeft, r.fBottom, r.fRight, r.fTop, p);
53         canvas->drawLine(r.fLeft, r.centerY(), r.fRight, r.centerY(), p);
54         canvas->drawLine(r.centerX(), r.fTop, r.centerX(), r.fBottom, p);
55     }
56 
draw_label(SkCanvas * canvas,const SkRect & rect,int start,int sweep)57     static void draw_label(SkCanvas* canvas, const SkRect& rect,
58                             int start, int sweep) {
59         SkPaint paint;
60 
61         paint.setAntiAlias(true);
62         paint.setTextAlign(SkPaint::kCenter_Align);
63 
64         SkString    str;
65 
66         str.appendS32(start);
67         str.append(", ");
68         str.appendS32(sweep);
69         canvas->drawText(str.c_str(), str.size(), rect.centerX(),
70                          rect.fBottom + paint.getTextSize() * 5/4, paint);
71     }
72 
drawArcs(SkCanvas * canvas)73     static void drawArcs(SkCanvas* canvas) {
74         SkPaint paint;
75         SkRect  r;
76         SkScalar w = SkIntToScalar(75);
77         SkScalar h = SkIntToScalar(50);
78 
79         r.set(0, 0, w, h);
80         paint.setAntiAlias(true);
81         paint.setStyle(SkPaint::kStroke_Style);
82 
83         canvas->save();
84         canvas->translate(SkIntToScalar(10), SkIntToScalar(300));
85 
86         paint.setStrokeWidth(SkIntToScalar(1));
87 
88         static const int gAngles[] = {
89             0, 360,
90             0, 45,
91             0, -45,
92             720, 135,
93             -90, 269,
94             -90, 270,
95             -90, 271,
96             -180, -270,
97             225, 90
98         };
99 
100         for (size_t i = 0; i < SK_ARRAY_COUNT(gAngles); i += 2) {
101             paint.setColor(SK_ColorBLACK);
102             drawRectWithLines(canvas, r, paint);
103 
104             paint.setColor(SK_ColorRED);
105             canvas->drawArc(r, SkIntToScalar(gAngles[i]),
106                             SkIntToScalar(gAngles[i+1]), false, paint);
107 
108             draw_label(canvas, r, gAngles[i], gAngles[i+1]);
109 
110             canvas->translate(w * 8 / 7, 0);
111         }
112 
113         canvas->restore();
114     }
115 
onDrawContent(SkCanvas * canvas)116     virtual void onDrawContent(SkCanvas* canvas) {
117         fSweep = SampleCode::GetAnimScalar(SkIntToScalar(360)/24,
118                                            SkIntToScalar(360));
119 //        fSweep = SkFloatToScalar(359.99f);
120 
121         SkRect  r;
122         SkPaint paint;
123 
124         paint.setAntiAlias(true);
125         paint.setStrokeWidth(SkIntToScalar(2));
126         paint.setStyle(SkPaint::kStroke_Style);
127 
128         r.set(0, 0, SkIntToScalar(200), SkIntToScalar(200));
129         r.offset(SkIntToScalar(20), SkIntToScalar(20));
130 
131         if (false) {
132             const SkScalar d = SkIntToScalar(3);
133             const SkScalar rad[] = { d, d, d, d, d, d, d, d };
134             SkPath path;
135             path.addRoundRect(r, rad);
136             canvas->drawPath(path, paint);
137             return;
138         }
139 
140         drawRectWithLines(canvas, r, paint);
141 
142    //     printf("----- sweep %g %X\n", SkScalarToFloat(fSweep), SkDegreesToRadians(fSweep));
143 
144 
145         paint.setStyle(SkPaint::kFill_Style);
146         paint.setColor(0x800000FF);
147         canvas->drawArc(r, 0, fSweep, true, paint);
148 
149         paint.setColor(0x800FF000);
150         canvas->drawArc(r, 0, fSweep, false, paint);
151 
152         paint.setStyle(SkPaint::kStroke_Style);
153         paint.setColor(SK_ColorRED);
154         canvas->drawArc(r, 0, fSweep, true, paint);
155 
156         paint.setStrokeWidth(0);
157         paint.setColor(SK_ColorBLUE);
158         canvas->drawArc(r, 0, fSweep, false, paint);
159 
160         drawArcs(canvas);
161         this->inval(NULL);
162     }
163 
onFindClickHandler(SkScalar x,SkScalar y)164     virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
165      //   fSweep += SK_Scalar1;
166         this->inval(NULL);
167         return this->INHERITED::onFindClickHandler(x, y);
168     }
169 
onClick(Click * click)170     virtual bool onClick(Click* click) {
171         return this->INHERITED::onClick(click);
172     }
173 
174 private:
175     SkScalar fSweep;
176 
177     typedef SampleView INHERITED;
178 };
179 
180 //////////////////////////////////////////////////////////////////////////////
181 
MyFactory()182 static SkView* MyFactory() { return new ArcsView; }
183 static SkViewRegister reg(MyFactory);
184 
185