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 20static 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 38static void paint_proc0(SkPaint* paint) { 39} 40 41static void paint_proc1(SkPaint* paint) { 42 paint->setMaskFilter(SkBlurMaskFilter::Create(2, 43 SkBlurMaskFilter::kNormal_BlurStyle))->unref(); 44} 45 46static 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 52static 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 59static void paint_proc5(SkPaint* paint) { 60 paint_proc3(paint); 61 paint_proc2(paint); 62} 63 64typedef void (*PaintProc)(SkPaint*); 65const PaintProc gPaintProcs[] = { 66 paint_proc0, 67 paint_proc1, 68 paint_proc2, 69 paint_proc3, 70 paint_proc5, 71}; 72 73/////////////////////////////////////////////////////////////////////////////// 74 75class EffectsView : public SampleView { 76public: 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 110protected: 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 129private: 130 typedef SampleView INHERITED; 131}; 132 133/////////////////////////////////////////////////////////////////////////////// 134 135static SkView* MyFactory() { return new EffectsView; } 136static SkViewRegister reg(MyFactory); 137