1 /* 2 * Copyright 2013 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "gm.h" 9 #include "SkCanvas.h" 10 #include "SkBlurImageFilter.h" 11 #include "SkRSXform.h" 12 #include "SkSurface.h" 13 14 static void make_bm(SkBitmap* bm) { 15 bm->allocN32Pixels(100, 100); 16 bm->eraseColor(SK_ColorBLUE); 17 18 SkCanvas canvas(*bm); 19 SkPaint paint; 20 paint.setAntiAlias(true); 21 paint.setColor(SK_ColorRED); 22 canvas.drawCircle(50, 50, 50, paint); 23 } 24 25 static void draw_1_bitmap(SkCanvas* canvas, const SkBitmap& bm, bool doClip, 26 int dx, int dy, sk_sp<SkImageFilter> filter) { 27 SkAutoCanvasRestore acr(canvas, true); 28 SkPaint paint; 29 30 SkRect clipR = SkRect::MakeXYWH(SkIntToScalar(dx), 31 SkIntToScalar(dy), 32 SkIntToScalar(bm.width()), 33 SkIntToScalar(bm.height())); 34 35 paint.setImageFilter(std::move(filter)); 36 clipR.inset(5, 5); 37 38 canvas->translate(SkIntToScalar(bm.width() + 20), 0); 39 40 if (doClip) { 41 canvas->save(); 42 canvas->clipRect(clipR); 43 } 44 canvas->drawBitmap(bm, SkIntToScalar(dx), SkIntToScalar(dy), &paint); 45 if (doClip) { 46 canvas->restore(); 47 } 48 } 49 50 /** 51 * Compare output of drawSprite and drawBitmap (esp. clipping and imagefilters) 52 */ 53 class SpriteBitmapGM : public skiagm::GM { 54 public: 55 SpriteBitmapGM() {} 56 57 protected: 58 59 SkString onShortName() override { 60 return SkString("spritebitmap"); 61 } 62 63 SkISize onISize() override { 64 return SkISize::Make(640, 480); 65 } 66 67 void onDraw(SkCanvas* canvas) override { 68 SkBitmap bm; 69 make_bm(&bm); 70 71 int dx = 10; 72 int dy = 10; 73 74 SkScalar sigma = 8; 75 sk_sp<SkImageFilter> filter(SkBlurImageFilter::Make(sigma, sigma, nullptr)); 76 77 draw_1_bitmap(canvas, bm, false, dx, dy, nullptr); 78 dy += bm.height() + 20; 79 draw_1_bitmap(canvas, bm, false, dx, dy, filter); 80 dy += bm.height() + 20; 81 draw_1_bitmap(canvas, bm, true, dx, dy, nullptr); 82 dy += bm.height() + 20; 83 draw_1_bitmap(canvas, bm, true, dx, dy, filter); 84 } 85 86 private: 87 typedef GM INHERITED; 88 }; 89 DEF_GM( return new SpriteBitmapGM; ) 90