2 * Copyright 2013 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
10 #include "SkBitmapSource.h"
12 // This GM exercises the SkBitmapSource ImageFilter class.
14 class BitmapSourceGM : public skiagm::GM {
20 SkString onShortName() override {
21 return SkString("bitmapsource");
25 fBitmap.allocN32Pixels(100, 100);
26 SkCanvas canvas(fBitmap);
27 canvas.clear(0x00000000);
29 paint.setAntiAlias(true);
30 sk_tool_utils::set_portable_typeface(&paint);
31 paint.setColor(0xFFFFFFFF);
32 paint.setTextSize(SkIntToScalar(96));
33 const char* str = "e";
34 canvas.drawText(str, strlen(str), SkIntToScalar(20), SkIntToScalar(70), paint);
37 SkISize onISize() override { return SkISize::Make(500, 150); }
39 void onOnceBeforeDraw() override {
43 static void fillRectFiltered(SkCanvas* canvas, const SkRect& clipRect, SkImageFilter* filter) {
45 paint.setImageFilter(filter);
47 canvas->clipRect(clipRect);
48 canvas->drawPaint(paint);
52 void onDraw(SkCanvas* canvas) override {
53 canvas->clear(0x00000000);
55 SkRect srcRect = SkRect::MakeXYWH(20, 20, 30, 30);
56 SkRect dstRect = SkRect::MakeXYWH(0, 10, 60, 60);
57 SkRect clipRect = SkRect::MakeXYWH(0, 0, 100, 100);
59 fBitmap.getBounds(&bounds);
60 SkAutoTUnref<SkImageFilter> bitmapSource(SkBitmapSource::Create(fBitmap));
61 SkAutoTUnref<SkImageFilter> bitmapSourceSrcRect(SkBitmapSource::Create(fBitmap, srcRect, srcRect));
62 SkAutoTUnref<SkImageFilter> bitmapSourceSrcRectDstRect(SkBitmapSource::Create(fBitmap, srcRect, dstRect));
63 SkAutoTUnref<SkImageFilter> bitmapSourceDstRectOnly(SkBitmapSource::Create(fBitmap, bounds, dstRect));
65 // Draw an unscaled bitmap.
66 fillRectFiltered(canvas, clipRect, bitmapSource);
67 canvas->translate(SkIntToScalar(100), 0);
69 // Draw an unscaled subset of the source bitmap (srcRect -> srcRect).
70 fillRectFiltered(canvas, clipRect, bitmapSourceSrcRect);
71 canvas->translate(SkIntToScalar(100), 0);
73 // Draw a subset of the bitmap scaled to a destination rect (srcRect -> dstRect).
74 fillRectFiltered(canvas, clipRect, bitmapSourceSrcRectDstRect);
75 canvas->translate(SkIntToScalar(100), 0);
77 // Draw the entire bitmap scaled to a destination rect (bounds -> dstRect).
78 fillRectFiltered(canvas, clipRect, bitmapSourceDstRectOnly);
79 canvas->translate(SkIntToScalar(100), 0);
88 ///////////////////////////////////////////////////////////////////////////////
90 DEF_GM( return new BitmapSourceGM; )