1 2 /* 3 * Copyright 2011 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 #include "SampleCode.h" 9 #include "SkCanvas.h" 10 #include "SkPaint.h" 11 #include "SkView.h" 12 13 #include "SkBlurMaskFilter.h" 14 #include "SkColorMatrixFilter.h" 15 #include "SkDiscretePathEffect.h" 16 #include "SkGradientShader.h" 17 18 #include "SkEdgeClipper.h" 19 20 static void test_edgeclipper() { 21 SkPoint pts[] = { 22 { -8.38822452e+21f, -7.69721471e+19f }, 23 { 1.57645875e+23f, 1.44634003e+21f }, 24 { 1.61519691e+23f, 1.48208059e+21f }, 25 { 3.13963584e+23f, 2.88057438e+21f } 26 }; 27 SkRect clip = { 0, 0, 300, 200 }; 28 29 SkEdgeClipper clipper; 30 clipper.clipCubic(pts, clip); 31 } 32 33 /////////// 34 35 //#define COLOR 0xFFFF8844 36 #define COLOR 0xFF888888 37 38 static void paint_proc0(SkPaint* paint) { 39 } 40 41 static void paint_proc1(SkPaint* paint) { 42 paint->setMaskFilter(SkBlurMaskFilter::Create(2, 43 SkBlurMaskFilter::kNormal_BlurStyle))->unref(); 44 } 45 46 static void paint_proc2(SkPaint* paint) { 47 SkScalar dir[3] = { 1, 1, 1}; 48 paint->setMaskFilter( 49 SkBlurMaskFilter::CreateEmboss(dir, 0.1f, 0.05f, 1))->unref(); 50 } 51 52 static void paint_proc3(SkPaint* paint) { 53 SkColor colors[] = { SK_ColorRED, COLOR, SK_ColorBLUE }; 54 SkPoint pts[] = { { 3, 0 }, { 7, 5 } }; 55 paint->setShader(SkGradientShader::CreateLinear(pts, colors, NULL, SK_ARRAY_COUNT(colors), 56 SkShader::kMirror_TileMode))->unref(); 57 } 58 59 static void paint_proc5(SkPaint* paint) { 60 paint_proc3(paint); 61 paint_proc2(paint); 62 } 63 64 typedef void (*PaintProc)(SkPaint*); 65 const PaintProc gPaintProcs[] = { 66 paint_proc0, 67 paint_proc1, 68 paint_proc2, 69 paint_proc3, 70 paint_proc5, 71 }; 72 73 /////////////////////////////////////////////////////////////////////////////// 74 75 class EffectsView : public SampleView { 76 public: 77 SkPath fPath; 78 SkPaint fPaint[SK_ARRAY_COUNT(gPaintProcs)]; 79 80 EffectsView() { 81 size_t i; 82 const float pts[] = { 83 0, 0, 84 10, 0, 85 10, 5, 86 20, -5, 87 10, -15, 88 10, -10, 89 0, -10 90 }; 91 fPath.moveTo(pts[0], pts[1]); 92 for (i = 2; i < SK_ARRAY_COUNT(pts); i += 2) { 93 fPath.lineTo(pts[i], pts[i+1]); 94 } 95 96 for (i = 0; i < SK_ARRAY_COUNT(gPaintProcs); i++) { 97 fPaint[i].setAntiAlias(true); 98 fPaint[i].setColor(COLOR); 99 gPaintProcs[i](&fPaint[i]); 100 } 101 102 test_edgeclipper(); 103 SkColorMatrix cm; 104 cm.setRotate(SkColorMatrix::kG_Axis, 180); 105 cm.setIdentity(); 106 107 this->setBGColor(0xFFDDDDDD); 108 } 109 110 protected: 111 // overrides from SkEventSink 112 virtual bool onQuery(SkEvent* evt) { 113 if (SampleCode::TitleQ(*evt)) { 114 SampleCode::TitleR(evt, "Effects"); 115 return true; 116 } 117 return this->INHERITED::onQuery(evt); 118 } 119 120 virtual void onDrawContent(SkCanvas* canvas) { 121 canvas->scale(3, 3); 122 canvas->translate(10, 30); 123 for (size_t i = 0; i < SK_ARRAY_COUNT(fPaint); i++) { 124 canvas->drawPath(fPath, fPaint[i]); 125 canvas->translate(32, 0); 126 } 127 } 128 129 private: 130 typedef SampleView INHERITED; 131 }; 132 133 /////////////////////////////////////////////////////////////////////////////// 134 135 static SkView* MyFactory() { return new EffectsView; } 136 static SkViewRegister reg(MyFactory); 137