• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "SampleCode.h"
2 #include "SkCanvas.h"
3 #include "SkGradientShader.h"
4 
5 class GradientView : public SampleView {
6 public:
GradientView()7 	GradientView() {
8         this->setBGColor(0xFFDDDDDD);
9 	}
10 
11 protected:
12 	struct GradData {
13         int             fCount;
14         const SkColor*  fColors;
15         const SkScalar* fPos;
16     };
17     // overrides from SkEventSink
onQuery(SkEvent * evt)18     virtual bool onQuery(SkEvent* evt)  {
19         if (SampleCode::TitleQ(*evt)) {
20             SampleCode::TitleR(evt, "Gradients");
21             return true;
22         }
23         return this->INHERITED::onQuery(evt);
24     }
onDrawContent(SkCanvas * canvas)25     virtual void onDrawContent(SkCanvas* canvas) {
26         SkPaint paint;
27         paint.setAntiAlias(true);
28         paint.setStyle(SkPaint::kStroke_Style);
29         paint.setStrokeWidth(SkScalarHalf(SkIntToScalar(3)));
30         paint.setStyle(SkPaint::kFill_Style);
31 
32         SkPoint p = SkPoint::Make(0,0);
33         SkPoint q = SkPoint::Make(100,100);
34         SkPoint pts[] = {p, q};
35 
36         SkScalar t, temp, x, y;
37         SkColor gColors[] = {
38             SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK
39         };
40         t =    SampleCode::GetAnimScalar(SkIntToScalar(2), SkIntToScalar(20));
41         temp = SampleCode::GetAnimScalar(SkIntToScalar(1), SkIntToScalar(8));
42         SkScalar step = SK_ScalarPI / (10);
43         SkScalar angle = t * step;
44         x =  SkScalarSinCos(angle, &y);
45         SkScalar colorPositions[] = { 0, 0.1 + x, 0.4 + y, 0.9 - x + y, 1.0};
46         GradData data = { 5, gColors, colorPositions };
47 
48 
49         SkRect r = { 0, 0, SkIntToScalar(200), SkIntToScalar(200) };
50         SkShader* shader1 = SkGradientShader::CreateLinear(
51                            pts, data.fColors, data.fPos,data.fCount,
52                            SkShader::kMirror_TileMode);
53         paint.setShader(shader1)->unref();
54 
55         canvas->drawRect(r, paint);
56 
57 
58         SkPoint s = SkPoint::Make(100,100);
59         SkShader* shader2 = SkGradientShader::CreateRadial(
60                            s, 100, data.fColors, data.fPos, data.fCount,
61                            SkShader::kMirror_TileMode);
62         paint.setShader(shader2)->unref();
63         canvas->translate(250, 0);
64         canvas->drawRect(r, paint);
65 
66         SkShader* shader3 = SkGradientShader::CreateTwoPointRadial(
67                            p, 0, q, 100, data.fColors, data.fPos, data.fCount,
68                            SkShader::kMirror_TileMode);
69         paint.setShader(shader3)->unref();
70         canvas->translate(0, 250);
71         canvas->drawRect(r, paint);
72 
73         SkShader* shader4 = SkGradientShader::CreateSweep(
74                             100, 100, data.fColors, data.fPos, data.fCount);
75 
76         paint.setShader(shader4)->unref();
77         canvas->translate(-250, 0);
78         canvas->drawRect(r, paint);
79 
80         this->inval(NULL);
81     }
82 
83 private:
84     typedef SampleView INHERITED;
85 };
86 
87 //////////////////////////////////////////////////////////////////////////////
88 
MyFactory()89 static SkView* MyFactory() { return new GradientView; }
90 static SkViewRegister reg(MyFactory);