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