18926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com/* 28926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com * Copyright 2011 Google Inc. 38926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com * 48926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com * Use of this source code is governed by a BSD-style license that can be 58926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com * found in the LICENSE file. 68926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com */ 78926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 88926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com#include "gm.h" 98926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com#include "SkCanvas.h" 108926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com#include "SkColorFilter.h" 118926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com#include "SkColorPriv.h" 128926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com#include "SkShader.h" 138926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 148926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com#include "SkBlurImageFilter.h" 1544888c66d4bf03da58eb9fbd3db92eb477141aabsenorblanco@chromium.org#include "SkColorFilterImageFilter.h" 16f44fcdca01722959c3be335f44e88b59dbb33a10junov@chromium.org#include "SkDropShadowImageFilter.h" 178926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com#include "SkTestImageFilters.h" 188926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 198926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comclass FailImageFilter : public SkImageFilter { 208926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.compublic: 217daaaa4425ea083df437eea95ba6b38315ce98adreed class Registrar { 227daaaa4425ea083df437eea95ba6b38315ce98adreed public: 237daaaa4425ea083df437eea95ba6b38315ce98adreed Registrar() { 247daaaa4425ea083df437eea95ba6b38315ce98adreed SkFlattenable::Register("FailImageFilter", 257daaaa4425ea083df437eea95ba6b38315ce98adreed#ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING 267daaaa4425ea083df437eea95ba6b38315ce98adreed FailImageFilter::DeepCreateProc, 277daaaa4425ea083df437eea95ba6b38315ce98adreed#else 287daaaa4425ea083df437eea95ba6b38315ce98adreed FailImageFilter::CreateProc, 297daaaa4425ea083df437eea95ba6b38315ce98adreed#endif 307daaaa4425ea083df437eea95ba6b38315ce98adreed FailImageFilter::GetFlattenableType()); 317daaaa4425ea083df437eea95ba6b38315ce98adreed } 327daaaa4425ea083df437eea95ba6b38315ce98adreed }; 33cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org static FailImageFilter* Create() { 34cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org return SkNEW(FailImageFilter); 35cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org } 36ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com 37ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(FailImageFilter) 389fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed 398926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comprotected: 407daaaa4425ea083df437eea95ba6b38315ce98adreed FailImageFilter() : INHERITED(0, NULL) {} 419fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed 424cb543d6057b692e1099e9f115155f0bf323a0c8senorblanco@chromium.org virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, 43f7efa502d62af80bd15b03e1131603fb6577c3dfcommit-bot@chromium.org SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE { 448926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com return false; 458926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com } 46d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 479fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING 489fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed FailImageFilter(SkReadBuffer& buffer) : INHERITED(0, buffer) {} 499fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#endif 508926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 518926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comprivate: 528926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com typedef SkImageFilter INHERITED; 538926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com}; 548926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 557daaaa4425ea083df437eea95ba6b38315ce98adreedstatic FailImageFilter::Registrar gReg0; 567daaaa4425ea083df437eea95ba6b38315ce98adreed 579fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reedSkFlattenable* FailImageFilter::CreateProc(SkReadBuffer& buffer) { 589fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 0); 599fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed return FailImageFilter::Create(); 609fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed} 61ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com 628926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comclass IdentityImageFilter : public SkImageFilter { 638926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.compublic: 647daaaa4425ea083df437eea95ba6b38315ce98adreed class Registrar { 657daaaa4425ea083df437eea95ba6b38315ce98adreed public: 667daaaa4425ea083df437eea95ba6b38315ce98adreed Registrar() { 677daaaa4425ea083df437eea95ba6b38315ce98adreed SkFlattenable::Register("IdentityImageFilter", 687daaaa4425ea083df437eea95ba6b38315ce98adreed#ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING 697daaaa4425ea083df437eea95ba6b38315ce98adreed IdentityImageFilter::DeepCreateProc, 707daaaa4425ea083df437eea95ba6b38315ce98adreed#else 717daaaa4425ea083df437eea95ba6b38315ce98adreed IdentityImageFilter::CreateProc, 727daaaa4425ea083df437eea95ba6b38315ce98adreed#endif 737daaaa4425ea083df437eea95ba6b38315ce98adreed IdentityImageFilter::GetFlattenableType()); 747daaaa4425ea083df437eea95ba6b38315ce98adreed } 757daaaa4425ea083df437eea95ba6b38315ce98adreed }; 769ea3d57fde28a5fe4487a111dc3dd49418235e5esenorblanco static IdentityImageFilter* Create(SkImageFilter* input = NULL) { 779ea3d57fde28a5fe4487a111dc3dd49418235e5esenorblanco return SkNEW_ARGS(IdentityImageFilter, (input)); 78cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org } 798926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 80ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(IdentityImageFilter) 818926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comprotected: 827daaaa4425ea083df437eea95ba6b38315ce98adreed IdentityImageFilter(SkImageFilter* input) : INHERITED(1, &input) {} 839fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed 844cb543d6057b692e1099e9f115155f0bf323a0c8senorblanco@chromium.org virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, 85f7efa502d62af80bd15b03e1131603fb6577c3dfcommit-bot@chromium.org SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE { 868926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com *result = src; 87f7efa502d62af80bd15b03e1131603fb6577c3dfcommit-bot@chromium.org offset->set(0, 0); 888926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com return true; 898926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com } 908926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 919fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING 929fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed IdentityImageFilter(SkReadBuffer& buffer) : INHERITED(1, buffer) {} 939fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#endif 948926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 958926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comprivate: 968926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com typedef SkImageFilter INHERITED; 978926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com}; 988926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 997daaaa4425ea083df437eea95ba6b38315ce98adreedstatic IdentityImageFilter::Registrar gReg1; 1007daaaa4425ea083df437eea95ba6b38315ce98adreed 1019fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reedSkFlattenable* IdentityImageFilter::CreateProc(SkReadBuffer& buffer) { 1029fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); 1039fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed return IdentityImageFilter::Create(common.getInput(0)); 1049fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed} 105ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com 1068926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com/////////////////////////////////////////////////////////////////////////////// 1078926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 1088926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comstatic void draw_paint(SkCanvas* canvas, const SkRect& r, SkImageFilter* imf) { 1098926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkPaint paint; 1108926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setImageFilter(imf); 1118926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setColor(SK_ColorGREEN); 1128926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com canvas->save(); 1138926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com canvas->clipRect(r); 1148926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com canvas->drawPaint(paint); 1158926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com canvas->restore(); 1168926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com} 1178926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 1188926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comstatic void draw_line(SkCanvas* canvas, const SkRect& r, SkImageFilter* imf) { 1198926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkPaint paint; 1208926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setColor(SK_ColorBLUE); 1218926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setImageFilter(imf); 1228926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setStrokeWidth(r.width()/10); 1238926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com canvas->drawLine(r.fLeft, r.fTop, r.fRight, r.fBottom, paint); 1248926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com} 1258926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 1268926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comstatic void draw_rect(SkCanvas* canvas, const SkRect& r, SkImageFilter* imf) { 1278926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkPaint paint; 1288926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setColor(SK_ColorYELLOW); 1298926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setImageFilter(imf); 1308926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkRect rr(r); 1318926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com rr.inset(r.width()/10, r.height()/10); 1328926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com canvas->drawRect(rr, paint); 1338926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com} 1348926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 1358926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comstatic void draw_path(SkCanvas* canvas, const SkRect& r, SkImageFilter* imf) { 1368926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkPaint paint; 1378926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setColor(SK_ColorMAGENTA); 1388926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setImageFilter(imf); 1398926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setAntiAlias(true); 1408926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com canvas->drawCircle(r.centerX(), r.centerY(), r.width()*2/5, paint); 1418926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com} 1428926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 1438926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comstatic void draw_text(SkCanvas* canvas, const SkRect& r, SkImageFilter* imf) { 1448926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkPaint paint; 1458926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setImageFilter(imf); 1468926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setColor(SK_ColorCYAN); 1478926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setAntiAlias(true); 148992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark sk_tool_utils::set_portable_typeface(&paint); 1498926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setTextSize(r.height()/2); 1508926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setTextAlign(SkPaint::kCenter_Align); 1518926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com canvas->drawText("Text", 4, r.centerX(), r.centerY(), paint); 1528926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com} 1538926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 1548926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comstatic void draw_bitmap(SkCanvas* canvas, const SkRect& r, SkImageFilter* imf) { 1558926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkPaint paint; 1568926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setImageFilter(imf); 157d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 1588926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkIRect bounds; 1598926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com r.roundOut(&bounds); 160d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 1618926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkBitmap bm; 162eb9a46cbbb475e862a084aa2224ec18d4ac5e95breed@google.com bm.allocN32Pixels(bounds.width(), bounds.height()); 163dbfac8a72393eaf01670aeb3244de0e18d8faf98junov@google.com bm.eraseColor(SK_ColorTRANSPARENT); 1648926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkCanvas c(bm); 1658926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com draw_path(&c, r, NULL); 166d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 1678926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com canvas->drawBitmap(bm, 0, 0, &paint); 1688926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com} 1698926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 1708926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comstatic void draw_sprite(SkCanvas* canvas, const SkRect& r, SkImageFilter* imf) { 1718926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkPaint paint; 1728926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setImageFilter(imf); 173d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 1748926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkIRect bounds; 1758926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com r.roundOut(&bounds); 176d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 1778926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkBitmap bm; 178eb9a46cbbb475e862a084aa2224ec18d4ac5e95breed@google.com bm.allocN32Pixels(bounds.width(), bounds.height()); 179dbfac8a72393eaf01670aeb3244de0e18d8faf98junov@google.com bm.eraseColor(SK_ColorTRANSPARENT); 1808926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkCanvas c(bm); 1818926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com draw_path(&c, r, NULL); 1828926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 1838926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkPoint loc = { r.fLeft, r.fTop }; 1848926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com canvas->getTotalMatrix().mapPoints(&loc, 1); 1858926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com canvas->drawSprite(bm, 1868926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkScalarRoundToInt(loc.fX), SkScalarRoundToInt(loc.fY), 1878926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com &paint); 1888926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com} 1898926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 1908926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com/////////////////////////////////////////////////////////////////////////////// 1918926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 1928926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comclass ImageFiltersBaseGM : public skiagm::GM { 1938926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.compublic: 1948926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com ImageFiltersBaseGM () {} 1958926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 1968926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comprotected: 1978926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com virtual SkString onShortName() { 1988926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com return SkString("imagefiltersbase"); 1998926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com } 2008926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 201f44fcdca01722959c3be335f44e88b59dbb33a10junov@chromium.org virtual SkISize onISize() { return SkISize::Make(700, 500); } 2028926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 2038926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com void draw_frame(SkCanvas* canvas, const SkRect& r) { 2048926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkPaint paint; 2058926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setStyle(SkPaint::kStroke_Style); 2068926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com paint.setColor(SK_ColorRED); 2078926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com canvas->drawRect(r, paint); 2088926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com } 2098926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 210ff06af20fde68aa737b540dc6e42924532873b22junov@chromium.org virtual uint32_t onGetFlags() const { 211ff06af20fde68aa737b540dc6e42924532873b22junov@chromium.org // Because of the use of drawSprite, this test is excluded 212ff06af20fde68aa737b540dc6e42924532873b22junov@chromium.org // from scaled replay tests because drawSprite ignores the 213ff06af20fde68aa737b540dc6e42924532873b22junov@chromium.org // reciprocal scale that is applied at record time, which is 214ff06af20fde68aa737b540dc6e42924532873b22junov@chromium.org // the intended behavior of drawSprite. 215a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipScaledReplay_Flag | kSkipTiled_Flag; 216ff06af20fde68aa737b540dc6e42924532873b22junov@chromium.org } 217ff06af20fde68aa737b540dc6e42924532873b22junov@chromium.org 2188926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com virtual void onDraw(SkCanvas* canvas) { 2198926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com void (*drawProc[])(SkCanvas*, const SkRect&, SkImageFilter*) = { 2208926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com draw_paint, 2218926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com draw_line, draw_rect, draw_path, draw_text, 2228926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com draw_bitmap, 2238926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com draw_sprite 2248926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com }; 225d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 2268926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkColorFilter* cf = SkColorFilter::CreateModeFilter(SK_ColorRED, 2278926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkXfermode::kSrcIn_Mode); 2288926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkImageFilter* filters[] = { 2298926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com NULL, 230cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org IdentityImageFilter::Create(), 231cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org FailImageFilter::Create(), 232cd9f55989e680b7f52fa21766dde0ac67ac9911fsenorblanco@chromium.org SkColorFilterImageFilter::Create(cf), 233cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org SkBlurImageFilter::Create(12.0f, 0.0f), 234bc9845bb60cd883e7ddabb21f04997602145a1adsenorblanco SkDropShadowImageFilter::Create(10.0f, 5.0f, 3.0f, 3.0f, SK_ColorBLUE), 2358926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com }; 2368926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com cf->unref(); 2378926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 2388926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkRect r = SkRect::MakeWH(SkIntToScalar(64), SkIntToScalar(64)); 2398926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkScalar MARGIN = SkIntToScalar(16); 2408926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkScalar DX = r.width() + MARGIN; 2418926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com SkScalar DY = r.height() + MARGIN; 2428926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 2438926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com canvas->translate(MARGIN, MARGIN); 2448926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com for (size_t i = 0; i < SK_ARRAY_COUNT(drawProc); ++i) { 2458926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com canvas->save(); 2468926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com for (size_t j = 0; j < SK_ARRAY_COUNT(filters); ++j) { 2478926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com drawProc[i](canvas, r, filters[j]); 248d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 2498926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com draw_frame(canvas, r); 2508926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com canvas->translate(0, DY); 2518926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com } 2528926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com canvas->restore(); 2538926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com canvas->translate(DX, 0); 2548926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com } 255d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 2564bca84d3cf94da5e2c2fd3ea04bba7f96d57171ereed@google.com for(size_t j = 0; j < SK_ARRAY_COUNT(filters); ++j) { 2574bca84d3cf94da5e2c2fd3ea04bba7f96d57171ereed@google.com SkSafeUnref(filters[j]); 2584bca84d3cf94da5e2c2fd3ea04bba7f96d57171ereed@google.com } 2598926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com } 2608926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 2618926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comprivate: 2628926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com typedef GM INHERITED; 2638926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com}; 2648926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 2658926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com/////////////////////////////////////////////////////////////////////////////// 2668926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.com 2678926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comstatic skiagm::GM* MyFactory(void*) { return new ImageFiltersBaseGM; } 2688926b169f6a0dfa4c2129a98ec2aee205f0c8527reed@google.comstatic skiagm::GMRegistry reg(MyFactory); 269