blob: 155785b200b482bae46889beb230b25395a7628e [file] [log] [blame]
senorblanco@chromium.orge93e1db2013-12-09 18:31:42 +00001/*
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
10#include "SkBitmapSource.h"
11
12// This GM exercises the SkBitmapSource ImageFilter class.
13
14class BitmapSourceGM : public skiagm::GM {
15public:
16 BitmapSourceGM() {
17 }
18
19protected:
mtklein36352bf2015-03-25 18:17:31 -070020 SkString onShortName() override {
senorblanco@chromium.orge93e1db2013-12-09 18:31:42 +000021 return SkString("bitmapsource");
22 }
23
mtklein36352bf2015-03-25 18:17:31 -070024 SkISize onISize() override { return SkISize::Make(500, 150); }
senorblanco@chromium.orge93e1db2013-12-09 18:31:42 +000025
mtklein36352bf2015-03-25 18:17:31 -070026 void onOnceBeforeDraw() override {
robertphillips943a4622015-09-03 13:32:33 -070027 fBitmap = sk_tool_utils::create_string_bitmap(100, 100, 0xFFFFFFFF, 20, 70, 96, "e");
senorblanco@chromium.orge93e1db2013-12-09 18:31:42 +000028 }
29
robertphillips943a4622015-09-03 13:32:33 -070030 static void FillRectFiltered(SkCanvas* canvas, const SkRect& clipRect, SkImageFilter* filter) {
senorblanco@chromium.orge93e1db2013-12-09 18:31:42 +000031 SkPaint paint;
32 paint.setImageFilter(filter);
33 canvas->save();
34 canvas->clipRect(clipRect);
35 canvas->drawPaint(paint);
36 canvas->restore();
37 }
38
mtklein36352bf2015-03-25 18:17:31 -070039 void onDraw(SkCanvas* canvas) override {
senorblancoaad8b272015-04-08 12:36:08 -070040 canvas->clear(SK_ColorBLACK);
senorblanco@chromium.orge93e1db2013-12-09 18:31:42 +000041 {
42 SkRect srcRect = SkRect::MakeXYWH(20, 20, 30, 30);
43 SkRect dstRect = SkRect::MakeXYWH(0, 10, 60, 60);
44 SkRect clipRect = SkRect::MakeXYWH(0, 0, 100, 100);
45 SkRect bounds;
46 fBitmap.getBounds(&bounds);
commit-bot@chromium.orgcac5fd52014-03-10 10:51:58 +000047 SkAutoTUnref<SkImageFilter> bitmapSource(SkBitmapSource::Create(fBitmap));
48 SkAutoTUnref<SkImageFilter> bitmapSourceSrcRect(SkBitmapSource::Create(fBitmap, srcRect, srcRect));
49 SkAutoTUnref<SkImageFilter> bitmapSourceSrcRectDstRect(SkBitmapSource::Create(fBitmap, srcRect, dstRect));
50 SkAutoTUnref<SkImageFilter> bitmapSourceDstRectOnly(SkBitmapSource::Create(fBitmap, bounds, dstRect));
senorblanco@chromium.orge93e1db2013-12-09 18:31:42 +000051
52 // Draw an unscaled bitmap.
robertphillips943a4622015-09-03 13:32:33 -070053 FillRectFiltered(canvas, clipRect, bitmapSource);
senorblanco@chromium.orge93e1db2013-12-09 18:31:42 +000054 canvas->translate(SkIntToScalar(100), 0);
55
56 // Draw an unscaled subset of the source bitmap (srcRect -> srcRect).
robertphillips943a4622015-09-03 13:32:33 -070057 FillRectFiltered(canvas, clipRect, bitmapSourceSrcRect);
senorblanco@chromium.orge93e1db2013-12-09 18:31:42 +000058 canvas->translate(SkIntToScalar(100), 0);
59
60 // Draw a subset of the bitmap scaled to a destination rect (srcRect -> dstRect).
robertphillips943a4622015-09-03 13:32:33 -070061 FillRectFiltered(canvas, clipRect, bitmapSourceSrcRectDstRect);
senorblanco@chromium.orge93e1db2013-12-09 18:31:42 +000062 canvas->translate(SkIntToScalar(100), 0);
63
64 // Draw the entire bitmap scaled to a destination rect (bounds -> dstRect).
robertphillips943a4622015-09-03 13:32:33 -070065 FillRectFiltered(canvas, clipRect, bitmapSourceDstRectOnly);
senorblanco@chromium.orge93e1db2013-12-09 18:31:42 +000066 canvas->translate(SkIntToScalar(100), 0);
67 }
68 }
69
70private:
71 SkBitmap fBitmap;
72 typedef GM INHERITED;
73};
74
75///////////////////////////////////////////////////////////////////////////////
76
77DEF_GM( return new BitmapSourceGM; )