SampleLayers.cpp revision e61a86cfa00ea393ecc4a71fca94e1d476a37ecc
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 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic void make_paint(SkPaint* paint) { 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkColor colors[] = { 0, SK_ColorWHITE }; 3264cc579efa7e416c7298ed159d76b074b283c0f9senorblanco@chromium.org SkPoint pts[] = { { 0, 0 }, { 0, SK_Scalar1*20 } }; 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkShader* s = SkGradientShader::CreateLinear(pts, colors, NULL, 2, SkShader::kClamp_TileMode); 34ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com paint->setShader(s)->unref(); 360baf19375466cfc24c96532df406e7c5b1d1aae8reed@android.com paint->setXfermodeMode(SkXfermode::kDstIn_Mode); 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic void dump_layers(const char label[], SkCanvas* canvas) { 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("Dump Layers(%s)\n", label); 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkCanvas::LayerIter iter(canvas, true); 438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int index = 0; 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com while (!iter.done()) { 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkBitmap& bm = iter.device()->accessBitmap(false); 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkIRect& clip = iter.clip().getBounds(); 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("Layer[%d] bitmap [%d %d] X=%d Y=%d clip=[%d %d %d %d] alpha=%d\n", index++, 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bm.width(), bm.height(), iter.x(), iter.y(), 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com clip.fLeft, clip.fTop, clip.fRight, clip.fBottom, 508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com iter.paint().getAlpha()); 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com iter.next(); 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// test drawing with strips of fading gradient above and below 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic void test_fade(SkCanvas* canvas) { 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkAutoCanvasRestore ar(canvas, true); 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkRect r; 60ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPaint p; 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setAlpha(0x88); 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 64e61a86cfa00ea393ecc4a71fca94e1d476a37ecccommit-bot@chromium.org SkAutoCanvasRestore ar2(canvas, false); 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // create the layers 678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com r.set(0, 0, SkIntToScalar(100), SkIntToScalar(100)); 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->clipRect(r); 70ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com r.fBottom = SkIntToScalar(20); 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->saveLayer(&r, NULL, (SkCanvas::SaveFlags)(SkCanvas::kHasAlphaLayer_SaveFlag | SkCanvas::kFullColorLayer_SaveFlag)); 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com r.fTop = SkIntToScalar(80); 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com r.fBottom = SkIntToScalar(100); 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->saveLayer(&r, NULL, (SkCanvas::SaveFlags)(SkCanvas::kHasAlphaLayer_SaveFlag | SkCanvas::kFullColorLayer_SaveFlag)); 77ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 78ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com // now draw the "content" 798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (true) { 818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com r.set(0, 0, SkIntToScalar(100), SkIntToScalar(100)); 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->saveLayerAlpha(&r, 0x80); 848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPaint p; 868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setColor(SK_ColorRED); 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setAntiAlias(true); 888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawOval(r, p); 89ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com dump_layers("inside layer alpha", canvas); 91ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->restore(); 938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } else { 948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com r.set(0, 0, SkIntToScalar(100), SkIntToScalar(100)); 95ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPaint p; 978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setColor(SK_ColorRED); 988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setAntiAlias(true); 998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawOval(r, p); 1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 101ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// return; 1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com dump_layers("outside layer alpha", canvas); 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // now apply an effect 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPaint paint; 1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com make_paint(&paint); 1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com r.set(0, 0, SkIntToScalar(100), SkIntToScalar(20)); 1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// SkDebugf("--------- draw top grad\n"); 1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawRect(r, paint); 1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkMatrix m; 1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkShader* s = paint.getShader(); 1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com m.setScale(SK_Scalar1, -SK_Scalar1); 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com m.postTranslate(0, SkIntToScalar(100)); 1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com s->setLocalMatrix(m); 119ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com r.fTop = SkIntToScalar(80); 1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com r.fBottom = SkIntToScalar(100); 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// SkDebugf("--------- draw bot grad\n"); 1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawRect(r, paint); 1248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass RedFilter : public SkDrawFilter { 1278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 128971aca75572ed6e0c5e1cc959173dc58ca7b6b8dreed@google.com virtual bool filter(SkPaint* p, SkDrawFilter::Type) SK_OVERRIDE { 1298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fColor = p->getColor(); 1308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (fColor == SK_ColorRED) { 1318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p->setColor(SK_ColorGREEN); 1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 133971aca75572ed6e0c5e1cc959173dc58ca7b6b8dreed@google.com return true; 1348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 135ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkColor fColor; 1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass LayersView : public SkView { 1418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 142ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com LayersView() {} 1438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 1458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // overrides from SkEventSink 1468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool onQuery(SkEvent* evt) { 1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (SampleCode::TitleQ(*evt)) { 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SampleCode::TitleR(evt, "Layers"); 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return this->INHERITED::onQuery(evt); 1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 153ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void drawBG(SkCanvas* canvas) { 155149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com canvas->drawColor(SK_ColorGRAY); 1568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 157ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void onDraw(SkCanvas* canvas) { 1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com this->drawBG(canvas); 160ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 161149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com if (true) { 162149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com SkRect r; 163ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com r.set(SkIntToScalar(0), SkIntToScalar(0), 164ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com SkIntToScalar(220), SkIntToScalar(120)); 165149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com SkPaint p; 166149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com canvas->saveLayer(&r, &p); 167149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com canvas->drawColor(0xFFFF0000); 168f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com p.setAlpha(0); // or 0 1690baf19375466cfc24c96532df406e7c5b1d1aae8reed@android.com p.setXfermodeMode(SkXfermode::kSrc_Mode); 170149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com canvas->drawOval(r, p); 171149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com canvas->restore(); 172149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com return; 173149e2f6159a797989f6f0fa93ecfaa66cdd55c40reed@android.com } 174ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (false) { 1768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkRect r; 177ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com r.set(SkIntToScalar(0), SkIntToScalar(0), 178ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com SkIntToScalar(220), SkIntToScalar(120)); 1798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPaint p; 1808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setAlpha(0x88); 1818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setAntiAlias(true); 182ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (true) { 1848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->saveLayer(&r, &p); 1858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setColor(0xFFFF0000); 1868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawOval(r, p); 1878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->restore(); 1888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setColor(0xFF0000FF); 1918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com r.offset(SkIntToScalar(20), SkIntToScalar(50)); 1928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawOval(r, p); 1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (false) { 1968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPaint p; 1978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setAlpha(0x88); 1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setAntiAlias(true); 1998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->translate(SkIntToScalar(300), 0); 2018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkRect r; 203ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com r.set(SkIntToScalar(0), SkIntToScalar(0), 204ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com SkIntToScalar(220), SkIntToScalar(60)); 2058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->saveLayer(&r, &p, (SkCanvas::SaveFlags)(SkCanvas::kHasAlphaLayer_SaveFlag | SkCanvas::kFullColorLayer_SaveFlag)); 2078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// canvas->clipRect(r, SkRegion::kDifference_Op); 2088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// canvas->clipRect(r, SkRegion::kIntersect_Op); 2098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 210ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com r.set(SkIntToScalar(0), SkIntToScalar(0), 211ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com SkIntToScalar(220), SkIntToScalar(120)); 2128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setColor(SK_ColorBLUE); 2138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawOval(r, p); 2148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->restore(); 2158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return; 2168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 217ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 2188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com //canvas->translate(SkIntToScalar(20), SkIntToScalar(20)); 2198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com test_fade(canvas); 2208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return; 2218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // canvas->setDrawFilter(new RedFilter)->unref(); 223ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 2248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkRect r; 2258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPaint p; 226ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 2278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->translate(SkIntToScalar(220), SkIntToScalar(20)); 228ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 2298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setAntiAlias(true); 2308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com r.set(SkIntToScalar(20), SkIntToScalar(20), 2318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkIntToScalar(220), SkIntToScalar(120)); 232ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 2338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setColor(SK_ColorBLUE); 2348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // p.setMaskFilter(SkBlurMaskFilter::Create(SkIntToScalar(8), SkBlurMaskFilter::kNormal_BlurStyle))->unref(); 2358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawRect(r, p); 2368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setMaskFilter(NULL); 2378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkRect bounds = r; 2398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bounds.fBottom = bounds.centerY(); 2408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->saveLayer(&bounds, NULL, SkCanvas::kARGB_NoClipLayer_SaveFlag); 2418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setColor(SK_ColorRED); 2438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawOval(r, p); 244ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 2458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setAlpha(0x80); 2460baf19375466cfc24c96532df406e7c5b1d1aae8reed@android.com p.setXfermodeMode(SkXfermode::kDstIn_Mode); 2478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawRect(bounds, p); 2488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->restore(); 2508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 251ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 2524d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, 2534d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com unsigned modi) SK_OVERRIDE { 2548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com this->inval(NULL); 255ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 2564d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com return this->INHERITED::onFindClickHandler(x, y, modi); 2578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 258ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 2598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool onClick(Click* click) { 2608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return this->INHERITED::onClick(click); 2618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 26393c7ee34dc5c8f6bfad65809f4b39f8d00d7f0d4sugoi@google.com virtual bool handleKey(SkKey) { 2648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com this->inval(NULL); 2658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 2668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 2698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkView INHERITED; 2708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 2718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////////////// 2738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic SkView* MyFactory() { return new LayersView; } 2758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic SkViewRegister reg(MyFactory); 276