1db87c960857a19555517c017e98804af7d9bf8c1reed@google.com/* 2a99a92cebaa46cf792cf86eaad1a4c3f9d6162f7humper@google.com* Copyright 2012 Google Inc. 3a99a92cebaa46cf792cf86eaad1a4c3f9d6162f7humper@google.com* 4a99a92cebaa46cf792cf86eaad1a4c3f9d6162f7humper@google.com* Use of this source code is governed by a BSD-style license that can be 5a99a92cebaa46cf792cf86eaad1a4c3f9d6162f7humper@google.com* found in the LICENSE file. 6a99a92cebaa46cf792cf86eaad1a4c3f9d6162f7humper@google.com*/ 7db87c960857a19555517c017e98804af7d9bf8c1reed@google.com 8db87c960857a19555517c017e98804af7d9bf8c1reed@google.com#include "gm.h" 97c7292c6071898d73dc935c3b66b9816183806f0humper@google.com#include "SkBlurMask.h" 10b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com#include "SkBlurMaskFilter.h" 11db87c960857a19555517c017e98804af7d9bf8c1reed@google.com#include "SkCanvas.h" 12db87c960857a19555517c017e98804af7d9bf8c1reed@google.com#include "SkPath.h" 13db87c960857a19555517c017e98804af7d9bf8c1reed@google.com 14db87c960857a19555517c017e98804af7d9bf8c1reed@google.com#define STROKE_WIDTH SkIntToScalar(10) 15db87c960857a19555517c017e98804af7d9bf8c1reed@google.com 16db87c960857a19555517c017e98804af7d9bf8c1reed@google.comtypedef void (*Proc)(SkCanvas*, const SkRect&, const SkPaint&); 17db87c960857a19555517c017e98804af7d9bf8c1reed@google.com 18db87c960857a19555517c017e98804af7d9bf8c1reed@google.comstatic void fill_rect(SkCanvas* canvas, const SkRect& r, const SkPaint& p) { 19db87c960857a19555517c017e98804af7d9bf8c1reed@google.com canvas->drawRect(r, p); 20db87c960857a19555517c017e98804af7d9bf8c1reed@google.com} 21db87c960857a19555517c017e98804af7d9bf8c1reed@google.com 22db87c960857a19555517c017e98804af7d9bf8c1reed@google.comstatic void draw_donut(SkCanvas* canvas, const SkRect& r, const SkPaint& p) { 23db87c960857a19555517c017e98804af7d9bf8c1reed@google.com SkRect rect; 24db87c960857a19555517c017e98804af7d9bf8c1reed@google.com SkPath path; 253458716b52aa25dcd1b270141c7628c380696e35skia.committer@gmail.com 26db87c960857a19555517c017e98804af7d9bf8c1reed@google.com rect = r; 27db87c960857a19555517c017e98804af7d9bf8c1reed@google.com rect.outset(STROKE_WIDTH/2, STROKE_WIDTH/2); 28db87c960857a19555517c017e98804af7d9bf8c1reed@google.com path.addRect(rect); 29db87c960857a19555517c017e98804af7d9bf8c1reed@google.com rect = r; 30db87c960857a19555517c017e98804af7d9bf8c1reed@google.com rect.inset(STROKE_WIDTH/2, STROKE_WIDTH/2); 313458716b52aa25dcd1b270141c7628c380696e35skia.committer@gmail.com 32db87c960857a19555517c017e98804af7d9bf8c1reed@google.com path.addRect(rect); 33db87c960857a19555517c017e98804af7d9bf8c1reed@google.com path.setFillType(SkPath::kEvenOdd_FillType); 343458716b52aa25dcd1b270141c7628c380696e35skia.committer@gmail.com 35808b70f869572b2f2d6660960578ba39eb0d5d73reed@google.com canvas->drawPath(path, p); 36808b70f869572b2f2d6660960578ba39eb0d5d73reed@google.com} 37db87c960857a19555517c017e98804af7d9bf8c1reed@google.com 38808b70f869572b2f2d6660960578ba39eb0d5d73reed@google.comstatic void draw_donut_skewed(SkCanvas* canvas, const SkRect& r, const SkPaint& p) { 39808b70f869572b2f2d6660960578ba39eb0d5d73reed@google.com SkRect rect; 40808b70f869572b2f2d6660960578ba39eb0d5d73reed@google.com SkPath path; 413458716b52aa25dcd1b270141c7628c380696e35skia.committer@gmail.com 42808b70f869572b2f2d6660960578ba39eb0d5d73reed@google.com rect = r; 43808b70f869572b2f2d6660960578ba39eb0d5d73reed@google.com rect.outset(STROKE_WIDTH/2, STROKE_WIDTH/2); 44808b70f869572b2f2d6660960578ba39eb0d5d73reed@google.com path.addRect(rect); 45808b70f869572b2f2d6660960578ba39eb0d5d73reed@google.com rect = r; 46808b70f869572b2f2d6660960578ba39eb0d5d73reed@google.com rect.inset(STROKE_WIDTH/2, STROKE_WIDTH/2); 473458716b52aa25dcd1b270141c7628c380696e35skia.committer@gmail.com 48808b70f869572b2f2d6660960578ba39eb0d5d73reed@google.com rect.offset(7, -7); 493458716b52aa25dcd1b270141c7628c380696e35skia.committer@gmail.com 50808b70f869572b2f2d6660960578ba39eb0d5d73reed@google.com path.addRect(rect); 51808b70f869572b2f2d6660960578ba39eb0d5d73reed@google.com path.setFillType(SkPath::kEvenOdd_FillType); 523458716b52aa25dcd1b270141c7628c380696e35skia.committer@gmail.com 53db87c960857a19555517c017e98804af7d9bf8c1reed@google.com canvas->drawPath(path, p); 54db87c960857a19555517c017e98804af7d9bf8c1reed@google.com} 55db87c960857a19555517c017e98804af7d9bf8c1reed@google.com 5653007a2b1724c15c170340658daac012f9d909bereed@google.com#include "SkGradientShader.h" 5753007a2b1724c15c170340658daac012f9d909bereed@google.com 58341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt/* 59341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt * Spits out a dummy gradient to test blur with shader on paint 60341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt */ 612ad1aa67c6894696cdd65ec56057f81031d1c24areedstatic sk_sp<SkShader> MakeRadial() { 62341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt SkPoint pts[2] = { 63341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt { 0, 0 }, 64341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt { SkIntToScalar(100), SkIntToScalar(100) } 65341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt }; 66341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt SkShader::TileMode tm = SkShader::kClamp_TileMode; 67341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt const SkColor colors[] = { SK_ColorRED, SK_ColorGREEN, }; 68341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt const SkScalar pos[] = { SK_Scalar1/4, SK_Scalar1*3/4 }; 69341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt SkMatrix scale; 70341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt scale.setScale(0.5f, 0.5f); 71341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt scale.postTranslate(25.f, 25.f); 72341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt SkPoint center0, center1; 73341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt center0.set(SkScalarAve(pts[0].fX, pts[1].fX), 74341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt SkScalarAve(pts[0].fY, pts[1].fY)); 75341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), 76341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); 772ad1aa67c6894696cdd65ec56057f81031d1c24areed return SkGradientShader::MakeTwoPointConical(center1, (pts[1].fX - pts[0].fX) / 7, 782ad1aa67c6894696cdd65ec56057f81031d1c24areed center0, (pts[1].fX - pts[0].fX) / 2, 792ad1aa67c6894696cdd65ec56057f81031d1c24areed colors, pos, SK_ARRAY_COUNT(colors), tm, 802ad1aa67c6894696cdd65ec56057f81031d1c24areed 0, &scale); 81341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt} 82341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt 8353007a2b1724c15c170340658daac012f9d909bereed@google.comtypedef void (*PaintProc)(SkPaint*, SkScalar width); 8453007a2b1724c15c170340658daac012f9d909bereed@google.com 85db87c960857a19555517c017e98804af7d9bf8c1reed@google.comclass BlurRectGM : public skiagm::GM { 86efdfd51b68a300d5c6e28743fe0344ca05d1cec9reed sk_sp<SkMaskFilter> fMaskFilters[kLastEnum_SkBlurStyle + 1]; 87a99a92cebaa46cf792cf86eaad1a4c3f9d6162f7humper@google.com SkString fName; 88a99a92cebaa46cf792cf86eaad1a4c3f9d6162f7humper@google.com SkAlpha fAlpha; 89db87c960857a19555517c017e98804af7d9bf8c1reed@google.compublic: 907cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org BlurRectGM(const char name[], U8CPU alpha) 917cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org : fName(name) 927cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org , fAlpha(SkToU8(alpha)) { 9357850b9daddd941f880d94faaf83f2169355a0c8reed@google.com } 94db87c960857a19555517c017e98804af7d9bf8c1reed@google.com 95db87c960857a19555517c017e98804af7d9bf8c1reed@google.comprotected: 9636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onOnceBeforeDraw() override { 97e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org for (int i = 0; i <= kLastEnum_SkBlurStyle; ++i) { 98efdfd51b68a300d5c6e28743fe0344ca05d1cec9reed fMaskFilters[i] = SkBlurMaskFilter::Make((SkBlurStyle)i, 997cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(STROKE_WIDTH/2)), 100efdfd51b68a300d5c6e28743fe0344ca05d1cec9reed SkBlurMaskFilter::kHighQuality_BlurFlag); 1017cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org } 1027cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org } 1037cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org 10436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkString onShortName() override { 10553007a2b1724c15c170340658daac012f9d909bereed@google.com return fName; 106db87c960857a19555517c017e98804af7d9bf8c1reed@google.com } 107db87c960857a19555517c017e98804af7d9bf8c1reed@google.com 10836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkISize onISize() override { 109341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt return SkISize::Make(860, 820); 110db87c960857a19555517c017e98804af7d9bf8c1reed@google.com } 111db87c960857a19555517c017e98804af7d9bf8c1reed@google.com 11236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(SkCanvas* canvas) override { 113db87c960857a19555517c017e98804af7d9bf8c1reed@google.com canvas->translate(STROKE_WIDTH*3/2, STROKE_WIDTH*3/2); 114db87c960857a19555517c017e98804af7d9bf8c1reed@google.com 1157cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org SkRect r = { 0, 0, 100, 50 }; 1167cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org SkScalar scales[] = { SK_Scalar1, 0.6f }; 1178ccf590b89cec1a5974b6f4b7b49ca67cc5036cfskia.committer@gmail.com 1187cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org for (size_t s = 0; s < SK_ARRAY_COUNT(scales); ++s) { 1197cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org canvas->save(); 1207cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org for (size_t f = 0; f < SK_ARRAY_COUNT(fMaskFilters); ++f) { 1217cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org SkPaint paint; 1227cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org paint.setMaskFilter(fMaskFilters[f]); 1237cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org paint.setAlpha(fAlpha); 1247cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org 125341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt SkPaint paintWithRadial = paint; 1262ad1aa67c6894696cdd65ec56057f81031d1c24areed paintWithRadial.setShader(MakeRadial()); 127341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt 128dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein constexpr Proc procs[] = { 1297cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org fill_rect, draw_donut, draw_donut_skewed 1307cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org }; 131db87c960857a19555517c017e98804af7d9bf8c1reed@google.com 1327cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org canvas->save(); 1337cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org canvas->scale(scales[s], scales[s]); 1347cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org this->drawProcs(canvas, r, paint, false, procs, SK_ARRAY_COUNT(procs)); 1357cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org canvas->translate(r.width() * 4/3, 0); 136341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt this->drawProcs(canvas, r, paintWithRadial, false, procs, SK_ARRAY_COUNT(procs)); 137341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt canvas->translate(r.width() * 4/3, 0); 1387cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org this->drawProcs(canvas, r, paint, true, procs, SK_ARRAY_COUNT(procs)); 139341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt canvas->translate(r.width() * 4/3, 0); 140341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt this->drawProcs(canvas, r, paintWithRadial, true, procs, SK_ARRAY_COUNT(procs)); 1417cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org canvas->restore(); 142db87c960857a19555517c017e98804af7d9bf8c1reed@google.com 1437cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org canvas->translate(0, SK_ARRAY_COUNT(procs) * r.height() * 4/3 * scales[s]); 1447cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org } 1457cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org canvas->restore(); 146341400ea7ba0f711ac4c6ead0b33c5c89b4ac55cjoshualitt canvas->translate(4 * r.width() * 4/3 * scales[s], 0); 1477cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.org } 148db87c960857a19555517c017e98804af7d9bf8c1reed@google.com } 149db87c960857a19555517c017e98804af7d9bf8c1reed@google.com 150db87c960857a19555517c017e98804af7d9bf8c1reed@google.comprivate: 151db87c960857a19555517c017e98804af7d9bf8c1reed@google.com void drawProcs(SkCanvas* canvas, const SkRect& r, const SkPaint& paint, 152db87c960857a19555517c017e98804af7d9bf8c1reed@google.com bool doClip, const Proc procs[], size_t procsCount) { 153db87c960857a19555517c017e98804af7d9bf8c1reed@google.com SkAutoCanvasRestore acr(canvas, true); 154db87c960857a19555517c017e98804af7d9bf8c1reed@google.com for (size_t i = 0; i < procsCount; ++i) { 155db87c960857a19555517c017e98804af7d9bf8c1reed@google.com if (doClip) { 156db87c960857a19555517c017e98804af7d9bf8c1reed@google.com SkRect clipRect(r); 157db87c960857a19555517c017e98804af7d9bf8c1reed@google.com clipRect.inset(STROKE_WIDTH/2, STROKE_WIDTH/2); 158db87c960857a19555517c017e98804af7d9bf8c1reed@google.com canvas->save(); 159db87c960857a19555517c017e98804af7d9bf8c1reed@google.com canvas->clipRect(r); 160db87c960857a19555517c017e98804af7d9bf8c1reed@google.com } 161db87c960857a19555517c017e98804af7d9bf8c1reed@google.com procs[i](canvas, r, paint); 162db87c960857a19555517c017e98804af7d9bf8c1reed@google.com if (doClip) { 163db87c960857a19555517c017e98804af7d9bf8c1reed@google.com canvas->restore(); 164db87c960857a19555517c017e98804af7d9bf8c1reed@google.com } 165db87c960857a19555517c017e98804af7d9bf8c1reed@google.com canvas->translate(0, r.height() * 4/3); 166db87c960857a19555517c017e98804af7d9bf8c1reed@google.com } 167db87c960857a19555517c017e98804af7d9bf8c1reed@google.com } 168a99a92cebaa46cf792cf86eaad1a4c3f9d6162f7humper@google.comprivate: 169db87c960857a19555517c017e98804af7d9bf8c1reed@google.com typedef GM INHERITED; 170db87c960857a19555517c017e98804af7d9bf8c1reed@google.com}; 171db87c960857a19555517c017e98804af7d9bf8c1reed@google.com 1722a24338c777462e04a2b26295f9c034155ee8f3ehalcanaryDEF_SIMPLE_GM(blurrect_gallery, canvas, 1200, 1024) { 1732a24338c777462e04a2b26295f9c034155ee8f3ehalcanary const int fGMWidth = 1200; 1742a24338c777462e04a2b26295f9c034155ee8f3ehalcanary const int fPadding = 10; 1752a24338c777462e04a2b26295f9c034155ee8f3ehalcanary const int fMargin = 100; 1763c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org 1773c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org const int widths[] = {25, 5, 5, 100, 150, 25}; 1783c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org const int heights[] = {100, 100, 5, 25, 150, 25}; 1793c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org const SkBlurStyle styles[] = {kNormal_SkBlurStyle, kInner_SkBlurStyle, kOuter_SkBlurStyle}; 1803c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org const float radii[] = {20, 5, 10}; 1813c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org 1823c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org canvas->translate(50,20); 1833c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org 1843c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org int cur_x = 0; 1853c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org int cur_y = 0; 1863c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org 1873c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org int max_height = 0; 1883c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org 1893c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org for (size_t i = 0 ; i < SK_ARRAY_COUNT(widths) ; i++) { 1903c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org int width = widths[i]; 1913c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org int height = heights[i]; 1923c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org SkRect r; 1933c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org r.setWH(SkIntToScalar(width), SkIntToScalar(height)); 1943c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org SkAutoCanvasRestore autoRestore(canvas, true); 1953c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org 1963c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org for (size_t j = 0 ; j < SK_ARRAY_COUNT(radii) ; j++) { 1973c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org float radius = radii[j]; 1983c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org for (size_t k = 0 ; k < SK_ARRAY_COUNT(styles) ; k++) { 1993c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org SkBlurStyle style = styles[k]; 2003c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org 2013c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org SkMask mask; 202e80eb928ba0248a5a5dea6e1f0005aa08ecf8740robertphillips if (!SkBlurMask::BlurRect(SkBlurMask::ConvertRadiusToSigma(radius), 203e80eb928ba0248a5a5dea6e1f0005aa08ecf8740robertphillips &mask, r, style)) { 204e80eb928ba0248a5a5dea6e1f0005aa08ecf8740robertphillips continue; 205e80eb928ba0248a5a5dea6e1f0005aa08ecf8740robertphillips } 2063c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org 2073c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org SkAutoMaskFreeImage amfi(mask.fImage); 2083c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org 2093c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org SkBitmap bm; 2103c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org bm.installMaskPixels(mask); 2113c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org 2123c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org if (cur_x + bm.width() >= fGMWidth - fMargin) { 2133c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org cur_x = 0; 2143c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org cur_y += max_height + fPadding; 2153c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org max_height = 0; 2163c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org } 2173c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org 2183c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org canvas->save(); 219793ddd994aae5a78b13fdbe24a6755085f7998cdcommit-bot@chromium.org canvas->translate((SkScalar)cur_x, (SkScalar)cur_y); 2203c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org canvas->translate(-(bm.width() - r.width())/2, -(bm.height()-r.height())/2); 22196fcdcc219d2a0d3579719b84b28bede76efba64halcanary canvas->drawBitmap(bm, 0.f, 0.f, nullptr); 2223c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org canvas->restore(); 2233c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org 2243c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org cur_x += bm.width() + fPadding; 2253c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org if (bm.height() > max_height) 2263c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org max_height = bm.height(); 2273c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org } 2283c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org } 2293c1594aacbd20c4583db300fc66e3c227bec4f6ccommit-bot@chromium.org } 2302a24338c777462e04a2b26295f9c034155ee8f3ehalcanary} 2317c7292c6071898d73dc935c3b66b9816183806f0humper@google.com 232db87c960857a19555517c017e98804af7d9bf8c1reed@google.com////////////////////////////////////////////////////////////////////////////// 233db87c960857a19555517c017e98804af7d9bf8c1reed@google.com 2347cced56550caf1607f7058e229e06465b641482bcommit-bot@chromium.orgDEF_GM(return new BlurRectGM("blurrects", 0xFF);) 235