From bfd5f171e6a3eccd7c4bede652a85fd76bcbce2a Mon Sep 17 00:00:00 2001 From: reed Date: Thu, 7 Jan 2016 11:28:08 -0800 Subject: Revert[2] of "add backdrop option to SaveLayerRec" Reverted because of picture/serialization failure BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1567063002 TBR=mtklein Review URL: https://codereview.chromium.org/1567063002 --- gm/imagefilters.cpp | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) (limited to 'gm/imagefilters.cpp') diff --git a/gm/imagefilters.cpp b/gm/imagefilters.cpp index 5f1ae84949..951a934d82 100644 --- a/gm/imagefilters.cpp +++ b/gm/imagefilters.cpp @@ -104,3 +104,77 @@ DEF_SIMPLE_GM(fast_slow_blurimagefilter, canvas, 620, 260) { canvas->translate(r.width() + 20, 0); } } + +/////////////////////////////////////////////////////////////////////////////////////////////////// +#include "Resources.h" +#include "SkBlurImageFilter.h" +#include "SkMatrixConvolutionImageFilter.h" +#include "SkMorphologyImageFilter.h" +#include "SkColorMatrixFilter.h" +#include "SkColorFilterImageFilter.h" +#include "SkRRect.h" + +static void draw_set(SkCanvas* canvas, SkImageFilter* filters[], int count) { + const SkRect r = SkRect::MakeXYWH(30, 30, 200, 200); + const SkScalar offset = 250; + SkScalar dx = 0, dy = 0; + + for (int i = 0; i < count; ++i) { + canvas->save(); + SkRRect rr = SkRRect::MakeRectXY(r.makeOffset(dx, dy), 20, 20); + canvas->clipRRect(rr, SkRegion::kIntersect_Op, true); + canvas->saveLayer({ &rr.getBounds(), nullptr, filters[i], 0 }); + canvas->drawColor(0x40FFFFFF); + canvas->restore(); + canvas->restore(); + + if (0 == dx) { + dx = offset; + } else { + dx = 0; + dy = offset; + } + } +} + +DEF_SIMPLE_GM(savelayer_with_backdrop, canvas, 830, 550) { + SkColorMatrix cm; + cm.setSaturation(10); + SkAutoTUnref cf(SkColorMatrixFilter::Create(cm)); + const SkScalar kernel[] = { 4, 0, 4, 0, -15, 0, 4, 0, 4 }; + SkImageFilter* filters[] = { + SkBlurImageFilter::Create(10, 10), + SkDilateImageFilter::Create(8, 8), + SkMatrixConvolutionImageFilter::Create({ 3, 3 }, kernel, 1, 0, { 0, 0 }, + SkMatrixConvolutionImageFilter::kClampToBlack_TileMode, + true), + SkColorFilterImageFilter::Create(cf), + }; + + const struct { + SkScalar fSx, fSy, fTx, fTy; + } xforms[] = { + { 1, 1, 0, 0 }, + { 0.5f, 0.5f, 530, 0 }, + { 0.25f, 0.25f, 530, 275 }, + { 0.125f, 0.125f, 530, 420 }, + }; + + SkPaint paint; + paint.setFilterQuality(kMedium_SkFilterQuality); + SkAutoTUnref image(GetResourceAsImage("mandrill_512.png")); + + canvas->translate(20, 20); + for (const auto& xform : xforms) { + canvas->save(); + canvas->translate(xform.fTx, xform.fTy); + canvas->scale(xform.fSx, xform.fSy); + canvas->drawImage(image, 0, 0, &paint); + draw_set(canvas, filters, SK_ARRAY_COUNT(filters)); + canvas->restore(); + } + + for (auto& filter : filters) { + filter->unref(); + } +} -- cgit v1.2.3