blob: 30879f75fe3192c36269a1506702166298698a09 [file] [log] [blame]
reed@android.com8a1c16f2008-12-17 15:59:43 +00001#include "SampleCode.h"
2#include "SkView.h"
3#include "SkCanvas.h"
4#include "SkGraphics.h"
5#include "SkRandom.h"
6#include "SkLayerDrawLooper.h"
7#include "SkBlurMaskFilter.h"
8
reed@android.com8a1c16f2008-12-17 15:59:43 +00009#define WIDTH 200
10#define HEIGHT 200
11
reed@google.com961ddb02011-05-05 14:03:48 +000012class LooperView : public SampleView {
reed@android.com8a1c16f2008-12-17 15:59:43 +000013public:
14
15 SkLayerDrawLooper* fLooper;
16
17 LooperView() {
18 static const struct {
19 SkColor fColor;
20 SkPaint::Style fStyle;
21 SkScalar fWidth;
22 SkScalar fOffset;
23 int fBlur;
24 } gParams[] = {
25 { SK_ColorWHITE, SkPaint::kStroke_Style, SkIntToScalar(1)*3/4, 0, 0 },
26 { SK_ColorRED, SkPaint::kStroke_Style, SkIntToScalar(4), 0, 0 },
27 { SK_ColorBLUE, SkPaint::kFill_Style, 0, 0, 0 },
28 { 0x88000000, SkPaint::kFill_Style, 0, SkIntToScalar(10), 3 }
29 };
reed@google.com82065d62011-02-07 15:30:46 +000030
reed@android.com8a1c16f2008-12-17 15:59:43 +000031 fLooper = new SkLayerDrawLooper;
reed@google.com82065d62011-02-07 15:30:46 +000032
mike@reedtribe.orga8282ef2011-04-14 01:22:45 +000033 SkLayerDrawLooper::LayerInfo info;
34 info.fFlagsMask = SkPaint::kAntiAlias_Flag;
35 info.fPaintBits = SkLayerDrawLooper::kStyle_Bit | SkLayerDrawLooper::kMaskFilter_Bit;
36 info.fColorMode = SkXfermode::kSrc_Mode;
37
senorblanco@chromium.org64cc5792011-05-19 19:58:58 +000038 for (size_t i = 0; i < SK_ARRAY_COUNT(gParams); i++) {
mike@reedtribe.orga8282ef2011-04-14 01:22:45 +000039 info.fOffset.set(gParams[i].fOffset, gParams[i].fOffset);
40 SkPaint* paint = fLooper->addLayer(info);
reed@android.com8a1c16f2008-12-17 15:59:43 +000041 paint->setAntiAlias(true);
42 paint->setColor(gParams[i].fColor);
43 paint->setStyle(gParams[i].fStyle);
44 paint->setStrokeWidth(gParams[i].fWidth);
reed@android.com8a1c16f2008-12-17 15:59:43 +000045 if (gParams[i].fBlur > 0) {
46 SkMaskFilter* mf = SkBlurMaskFilter::Create(SkIntToScalar(gParams[i].fBlur),
47 SkBlurMaskFilter::kNormal_BlurStyle);
48 paint->setMaskFilter(mf)->unref();
49 }
50 }
reed@google.com961ddb02011-05-05 14:03:48 +000051
52 this->setBGColor(0xFFDDDDDD);
reed@android.com8a1c16f2008-12-17 15:59:43 +000053 }
reed@google.com82065d62011-02-07 15:30:46 +000054
reed@android.com8a1c16f2008-12-17 15:59:43 +000055 virtual ~LooperView() {
reed@google.com82065d62011-02-07 15:30:46 +000056 SkSafeUnref(fLooper);
reed@android.com8a1c16f2008-12-17 15:59:43 +000057 }
reed@google.com82065d62011-02-07 15:30:46 +000058
reed@android.com8a1c16f2008-12-17 15:59:43 +000059protected:
60 // overrides from SkEventSink
61 virtual bool onQuery(SkEvent* evt) {
62 if (SampleCode::TitleQ(*evt)) {
63 SampleCode::TitleR(evt, "DrawLooper");
64 return true;
65 }
66 return this->INHERITED::onQuery(evt);
67 }
reed@google.com82065d62011-02-07 15:30:46 +000068
reed@google.com961ddb02011-05-05 14:03:48 +000069 virtual void onDrawContent(SkCanvas* canvas) {
reed@android.com8a1c16f2008-12-17 15:59:43 +000070 SkPaint paint;
mike@reedtribe.orga8282ef2011-04-14 01:22:45 +000071 paint.setTextSize(SkIntToScalar(72));
reed@android.com8a1c16f2008-12-17 15:59:43 +000072 paint.setLooper(fLooper);
reed@google.com82065d62011-02-07 15:30:46 +000073
reed@android.com8a1c16f2008-12-17 15:59:43 +000074 canvas->drawCircle(SkIntToScalar(50), SkIntToScalar(50),
75 SkIntToScalar(30), paint);
76
77 canvas->drawRectCoords(SkIntToScalar(150), SkIntToScalar(50),
78 SkIntToScalar(200), SkIntToScalar(100), paint);
79
80 canvas->drawText("Looper", 6, SkIntToScalar(230), SkIntToScalar(100),
81 paint);
82 }
reed@google.com82065d62011-02-07 15:30:46 +000083
reed@android.com8a1c16f2008-12-17 15:59:43 +000084private:
reed@google.com961ddb02011-05-05 14:03:48 +000085 typedef SampleView INHERITED;
reed@android.com8a1c16f2008-12-17 15:59:43 +000086};
87
88//////////////////////////////////////////////////////////////////////////////
89
90static SkView* MyFactory() { return new LooperView; }
91static SkViewRegister reg(MyFactory);
92