1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
8311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com#include "SampleCode.h"
9311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com#include "SkCanvas.h"
10311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com#include "SkPaint.h"
11311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com#include "SkView.h"
12311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com
13311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com///////////////////////////////////////////////////////////////////////////////
14311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com
155fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.orgclass LayerMaskView : public SampleView {
16311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.compublic:
17ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com    LayerMaskView() {
185fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.org        this->setBGColor(0xFFDDDDDD);
195fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.org    }
20ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
21311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.comprotected:
22311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com    // overrides from SkEventSink
23311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com    virtual bool onQuery(SkEvent* evt) {
24311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com        if (SampleCode::TitleQ(*evt)) {
25311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com            SampleCode::TitleR(evt, "LayerMask");
26311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com            return true;
27311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com        }
28311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com        return this->INHERITED::onQuery(evt);
29311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com    }
30ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
31311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com    void drawMask(SkCanvas* canvas, const SkRect& r) {
32311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com        SkPaint paint;
33311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com        paint.setAntiAlias(true);
34311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com
35311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com        if (true) {
36311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com            SkBitmap mask;
37e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com            int w = SkScalarRoundToInt(r.width());
38e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com            int h = SkScalarRoundToInt(r.height());
39a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org            mask.allocN32Pixels(w, h);
40dbfac8a72393eaf01670aeb3244de0e18d8faf98junov@google.com            mask.eraseColor(SK_ColorTRANSPARENT);
41311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com            SkCanvas c(mask);
42311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com            SkRect bounds = r;
43311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com            bounds.offset(-bounds.fLeft, -bounds.fTop);
44311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com            c.drawOval(bounds, paint);
45ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
460baf19375466cfc24c96532df406e7c5b1d1aae8reed@android.com            paint.setXfermodeMode(SkXfermode::kDstIn_Mode);
47311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com            canvas->drawBitmap(mask, r.fLeft, r.fTop, &paint);
48311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com        } else {
49311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com            SkPath p;
50311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com            p.addOval(r);
51311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com            p.setFillType(SkPath::kInverseWinding_FillType);
520baf19375466cfc24c96532df406e7c5b1d1aae8reed@android.com            paint.setXfermodeMode(SkXfermode::kDstOut_Mode);
53311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com            canvas->drawPath(p, paint);
54311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com        }
55311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com    }
56311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com
575fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.org    virtual void onDrawContent(SkCanvas* canvas) {
58311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com        SkRect  r;
59311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com        r.set(SkIntToScalar(20), SkIntToScalar(20), SkIntToScalar(120), SkIntToScalar(120));
60091a594dbc4116ec2e54724432472bf37dae794acommit-bot@chromium.org        canvas->saveLayer(&r, NULL);
61311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com        canvas->drawColor(SK_ColorRED);
62311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com        drawMask(canvas, r);
63311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com        canvas->restore();
64311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com    }
65ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
66311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.comprivate:
675fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.org    typedef SampleView INHERITED;
68311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com};
69311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com
70311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com///////////////////////////////////////////////////////////////////////////////
71311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com
72311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.comstatic SkView* MyFactory() { return new LayerMaskView; }
73311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.comstatic SkViewRegister reg(MyFactory);
74