blob: 51a021b71add152467af7c37d7cc3ce183d421f7 [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
8class LayerMaskView : public SkView {
9public:
10 LayerMaskView() {}
11
12protected:
13 // overrides from SkEventSink
14 virtual bool onQuery(SkEvent* evt) {
15 if (SampleCode::TitleQ(*evt)) {
16 SampleCode::TitleR(evt, "LayerMask");
17 return true;
18 }
19 return this->INHERITED::onQuery(evt);
20 }
21
22 void drawMask(SkCanvas* canvas, const SkRect& r) {
23 SkPaint paint;
24 paint.setAntiAlias(true);
25
26 if (true) {
27 SkBitmap mask;
28 int w = SkScalarRound(r.width());
29 int h = SkScalarRound(r.height());
30 mask.setConfig(SkBitmap::kARGB_8888_Config, w, h);
31 mask.allocPixels();
32 mask.eraseColor(0);
33 SkCanvas c(mask);
34 SkRect bounds = r;
35 bounds.offset(-bounds.fLeft, -bounds.fTop);
36 c.drawOval(bounds, paint);
37
reed@android.com0baf1932009-06-24 12:41:42 +000038 paint.setXfermodeMode(SkXfermode::kDstIn_Mode);
reed@android.com311c82d2009-05-05 23:13:23 +000039 canvas->drawBitmap(mask, r.fLeft, r.fTop, &paint);
40 } else {
41 SkPath p;
42 p.addOval(r);
43 p.setFillType(SkPath::kInverseWinding_FillType);
reed@android.com0baf1932009-06-24 12:41:42 +000044 paint.setXfermodeMode(SkXfermode::kDstOut_Mode);
reed@android.com311c82d2009-05-05 23:13:23 +000045 canvas->drawPath(p, paint);
46 }
47 }
48
49 void drawBG(SkCanvas* canvas) {
50 canvas->drawColor(0xFFDDDDDD);
51 }
52
53 virtual void onDraw(SkCanvas* canvas) {
54 this->drawBG(canvas);
55
56 SkRect r;
57 r.set(SkIntToScalar(20), SkIntToScalar(20), SkIntToScalar(120), SkIntToScalar(120));
58 canvas->saveLayer(&r, NULL, SkCanvas::kARGB_ClipLayer_SaveFlag);
59 canvas->drawColor(SK_ColorRED);
60 drawMask(canvas, r);
61 canvas->restore();
62 }
63
64private:
65 typedef SkView INHERITED;
66};
67
68///////////////////////////////////////////////////////////////////////////////
69
70static SkView* MyFactory() { return new LayerMaskView; }
71static SkViewRegister reg(MyFactory);
72