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 */
88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SampleCode.h"
98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkView.h"
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkCanvas.h"
118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkBlurMaskFilter.h"
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkCamera.h"
138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkColorFilter.h"
148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkColorPriv.h"
158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDevice.h"
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkGradientShader.h"
178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkImageDecoder.h"
188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkInterpolator.h"
198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkMaskFilter.h"
208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPath.h"
218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkRegion.h"
228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkShader.h"
238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkTime.h"
248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkTypeface.h"
258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkUtils.h"
268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkKey.h"
278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkXfermode.h"
288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawFilter.h"
298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
309c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.orgstatic void make_paint(SkPaint* paint, const SkMatrix& localMatrix) {
318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkColor colors[] = { 0, SK_ColorWHITE };
3264cc579efa7e416c7298ed159d76b074b283c0f9senorblanco@chromium.org    SkPoint pts[] = { { 0, 0 }, { 0, SK_Scalar1*20 } };
339c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org    SkShader* s = SkGradientShader::CreateLinear(pts, colors, NULL, 2, SkShader::kClamp_TileMode,
3483f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org                                                 0, &localMatrix);
35ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    paint->setShader(s)->unref();
370baf19375466cfc24c96532df406e7c5b1d1aae8reed@android.com    paint->setXfermodeMode(SkXfermode::kDstIn_Mode);
388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic void dump_layers(const char label[], SkCanvas* canvas) {
418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkDebugf("Dump Layers(%s)\n", label);
428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkCanvas::LayerIter iter(canvas, true);
448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    int index = 0;
458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    while (!iter.done()) {
46c3bd8af6d5722e854feca70c40d92f4954c5b67bcommit-bot@chromium.org        SkImageInfo info = iter.device()->imageInfo();
478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        const SkIRect& clip = iter.clip().getBounds();
488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        SkDebugf("Layer[%d] bitmap [%d %d] X=%d Y=%d clip=[%d %d %d %d] alpha=%d\n", index++,
49c3bd8af6d5722e854feca70c40d92f4954c5b67bcommit-bot@chromium.org                 info.width(), info.height(), iter.x(), iter.y(),
508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                 clip.fLeft, clip.fTop, clip.fRight, clip.fBottom,
518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                 iter.paint().getAlpha());
528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        iter.next();
538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// test drawing with strips of fading gradient above and below
578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic void test_fade(SkCanvas* canvas) {
588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkAutoCanvasRestore ar(canvas, true);
598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkRect r;
61ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkPaint p;
638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    p.setAlpha(0x88);
648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
65e61a86cfa00ea393ecc4a71fca94e1d476a37ecccommit-bot@chromium.org    SkAutoCanvasRestore ar2(canvas, false);
668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // create the layers
688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    r.set(0, 0, SkIntToScalar(100), SkIntToScalar(100));
708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    canvas->clipRect(r);
71ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    r.fBottom = SkIntToScalar(20);
73091a594dbc4116ec2e54724432472bf37dae794acommit-bot@chromium.org    canvas->saveLayer(&r, NULL);
748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    r.fTop = SkIntToScalar(80);
768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    r.fBottom = SkIntToScalar(100);
77091a594dbc4116ec2e54724432472bf37dae794acommit-bot@chromium.org    canvas->saveLayer(&r, NULL);
78ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
79ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com    // now draw the "content"
808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    if (true) {
828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        r.set(0, 0, SkIntToScalar(100), SkIntToScalar(100));
838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->saveLayerAlpha(&r, 0x80);
858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        SkPaint p;
878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        p.setColor(SK_ColorRED);
888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        p.setAntiAlias(true);
898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->drawOval(r, p);
90ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        dump_layers("inside layer alpha", canvas);
92ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->restore();
948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    } else {
958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        r.set(0, 0, SkIntToScalar(100), SkIntToScalar(100));
96ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        SkPaint p;
988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        p.setColor(SK_ColorRED);
998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        p.setAntiAlias(true);
1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->drawOval(r, p);
1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
102ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//    return;
1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    dump_layers("outside layer alpha", canvas);
1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // now apply an effect
1089c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org    SkMatrix m;
1099c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org    m.setScale(SK_Scalar1, -SK_Scalar1);
1109c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org    m.postTranslate(0, SkIntToScalar(100));
1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkPaint paint;
1139c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org    make_paint(&paint, m);
1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    r.set(0, 0, SkIntToScalar(100), SkIntToScalar(20));
1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//    SkDebugf("--------- draw top grad\n");
1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    canvas->drawRect(r, paint);
1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    r.fTop = SkIntToScalar(80);
1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    r.fBottom = SkIntToScalar(100);
1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//    SkDebugf("--------- draw bot grad\n");
1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    canvas->drawRect(r, paint);
1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}
1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass RedFilter : public SkDrawFilter {
1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
126971aca75572ed6e0c5e1cc959173dc58ca7b6b8dreed@google.com    virtual bool filter(SkPaint* p, SkDrawFilter::Type) SK_OVERRIDE {
1278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        fColor = p->getColor();
1288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        if (fColor == SK_ColorRED) {
1298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            p->setColor(SK_ColorGREEN);
1308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        }
131971aca75572ed6e0c5e1cc959173dc58ca7b6b8dreed@google.com        return true;
1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
133ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
1348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
1358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkColor fColor;
1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass LayersView : public SkView {
1398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
140ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com    LayersView() {}
1418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected:
1438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // overrides from SkEventSink
1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool onQuery(SkEvent* evt) {
1458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        if (SampleCode::TitleQ(*evt)) {
1468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            SampleCode::TitleR(evt, "Layers");
1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            return true;
1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        }
1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        return this->INHERITED::onQuery(evt);
1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
151ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void drawBG(SkCanvas* canvas) {
153149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com        canvas->drawColor(SK_ColorGRAY);
1548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
155ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
1568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void onDraw(SkCanvas* canvas) {
1578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        this->drawBG(canvas);
158ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
159149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com        if (true) {
160149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com            SkRect r;
161ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com            r.set(SkIntToScalar(0), SkIntToScalar(0),
162ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com                  SkIntToScalar(220), SkIntToScalar(120));
163149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com            SkPaint p;
164149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com            canvas->saveLayer(&r, &p);
165149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com            canvas->drawColor(0xFFFF0000);
166f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com            p.setAlpha(0);  // or 0
1670baf19375466cfc24c96532df406e7c5b1d1aae8reed@android.com            p.setXfermodeMode(SkXfermode::kSrc_Mode);
168149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com            canvas->drawOval(r, p);
169149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com            canvas->restore();
170149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com            return;
171149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com        }
172ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
1738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        if (false) {
1748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            SkRect r;
175ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com            r.set(SkIntToScalar(0), SkIntToScalar(0),
176ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com                  SkIntToScalar(220), SkIntToScalar(120));
1778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            SkPaint p;
1788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            p.setAlpha(0x88);
1798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            p.setAntiAlias(true);
180ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
1818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            if (true) {
1828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                canvas->saveLayer(&r, &p);
1838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                p.setColor(0xFFFF0000);
1848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                canvas->drawOval(r, p);
1858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                canvas->restore();
1868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            }
1878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            p.setColor(0xFF0000FF);
1898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            r.offset(SkIntToScalar(20), SkIntToScalar(50));
1908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            canvas->drawOval(r, p);
1918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        }
1928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        if (false) {
1948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            SkPaint p;
1958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            p.setAlpha(0x88);
1968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            p.setAntiAlias(true);
1978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            canvas->translate(SkIntToScalar(300), 0);
1998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
2008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            SkRect r;
201ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com            r.set(SkIntToScalar(0), SkIntToScalar(0),
202ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com                  SkIntToScalar(220), SkIntToScalar(60));
2038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
204091a594dbc4116ec2e54724432472bf37dae794acommit-bot@chromium.org            canvas->saveLayer(&r, &p);
2058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
206ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com            r.set(SkIntToScalar(0), SkIntToScalar(0),
207ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com                  SkIntToScalar(220), SkIntToScalar(120));
2088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            p.setColor(SK_ColorBLUE);
2098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            canvas->drawOval(r, p);
2108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            canvas->restore();
2118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            return;
2128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        }
213ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
2148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        test_fade(canvas);
2158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
216ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
2174d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com    virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y,
2184d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com                                              unsigned modi) SK_OVERRIDE {
2198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        this->inval(NULL);
220ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
2214d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com        return this->INHERITED::onFindClickHandler(x, y, modi);
2228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
223ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
2248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool onClick(Click* click) {
2258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        return this->INHERITED::onClick(click);
2268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
2278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
22893c7ee34dc5c8f6bfad65809f4b39f8d00d7f0d4sugoi@google.com    virtual bool handleKey(SkKey) {
2298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        this->inval(NULL);
2308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        return true;
2318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
2328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
2338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
2348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef SkView INHERITED;
2358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
2368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
2378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//////////////////////////////////////////////////////////////////////////////
2388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
2398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic SkView* MyFactory() { return new LayersView; }
2408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic SkViewRegister reg(MyFactory);
241