blob: 9bd00ae5afdc38f270875fb90c2bb0039eba65eb [file] [log] [blame]
reed@android.com311c82d2009-05-05 23:13:23 +00001#include "SampleCode.h"
2#include "SkCanvas.h"
3#include "SkPaint.h"
reed@android.com311c82d2009-05-05 23:13:23 +00004#include "SkView.h"
5
6///////////////////////////////////////////////////////////////////////////////
7
mike@reedtribe.org5fd92432011-05-05 01:59:48 +00008class LayerMaskView : public SampleView {
reed@android.com311c82d2009-05-05 23:13:23 +00009public:
mike@reedtribe.org5fd92432011-05-05 01:59:48 +000010 LayerMaskView() {
11 this->setBGColor(0xFFDDDDDD);
12 }
reed@android.com311c82d2009-05-05 23:13:23 +000013
14protected:
15 // overrides from SkEventSink
16 virtual bool onQuery(SkEvent* evt) {
17 if (SampleCode::TitleQ(*evt)) {
18 SampleCode::TitleR(evt, "LayerMask");
19 return true;
20 }
21 return this->INHERITED::onQuery(evt);
22 }
23
24 void drawMask(SkCanvas* canvas, const SkRect& r) {
25 SkPaint paint;
26 paint.setAntiAlias(true);
27
28 if (true) {
29 SkBitmap mask;
30 int w = SkScalarRound(r.width());
31 int h = SkScalarRound(r.height());
32 mask.setConfig(SkBitmap::kARGB_8888_Config, w, h);
33 mask.allocPixels();
34 mask.eraseColor(0);
35 SkCanvas c(mask);
36 SkRect bounds = r;
37 bounds.offset(-bounds.fLeft, -bounds.fTop);
38 c.drawOval(bounds, paint);
39
reed@android.com0baf1932009-06-24 12:41:42 +000040 paint.setXfermodeMode(SkXfermode::kDstIn_Mode);
reed@android.com311c82d2009-05-05 23:13:23 +000041 canvas->drawBitmap(mask, r.fLeft, r.fTop, &paint);
42 } else {
43 SkPath p;
44 p.addOval(r);
45 p.setFillType(SkPath::kInverseWinding_FillType);
reed@android.com0baf1932009-06-24 12:41:42 +000046 paint.setXfermodeMode(SkXfermode::kDstOut_Mode);
reed@android.com311c82d2009-05-05 23:13:23 +000047 canvas->drawPath(p, paint);
48 }
49 }
50
mike@reedtribe.org5fd92432011-05-05 01:59:48 +000051 virtual void onDrawContent(SkCanvas* canvas) {
reed@android.com311c82d2009-05-05 23:13:23 +000052 SkRect r;
53 r.set(SkIntToScalar(20), SkIntToScalar(20), SkIntToScalar(120), SkIntToScalar(120));
54 canvas->saveLayer(&r, NULL, SkCanvas::kARGB_ClipLayer_SaveFlag);
55 canvas->drawColor(SK_ColorRED);
56 drawMask(canvas, r);
57 canvas->restore();
58 }
59
60private:
mike@reedtribe.org5fd92432011-05-05 01:59:48 +000061 typedef SampleView INHERITED;
reed@android.com311c82d2009-05-05 23:13:23 +000062};
63
64///////////////////////////////////////////////////////////////////////////////
65
66static SkView* MyFactory() { return new LayerMaskView; }
67static SkViewRegister reg(MyFactory);
68