C++11 override should now be supported by all of {bots,Chrome,Android,Mozilla}
[platform/upstream/libSkiaSharp.git] / gm / bitmapsource.cpp
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
10 #include "SkBitmapSource.h"
11
12 // This GM exercises the SkBitmapSource ImageFilter class.
13
14 class BitmapSourceGM : public skiagm::GM {
15 public:
16     BitmapSourceGM() {
17     }
18
19 protected:
20     SkString onShortName() override {
21         return SkString("bitmapsource");
22     }
23
24     void makeBitmap() {
25         fBitmap.allocN32Pixels(100, 100);
26         SkCanvas canvas(fBitmap);
27         canvas.clear(0x00000000);
28         SkPaint paint;
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);
35     }
36
37     SkISize onISize() override { return SkISize::Make(500, 150); }
38
39     void onOnceBeforeDraw() override {
40         this->makeBitmap();
41     }
42
43     static void fillRectFiltered(SkCanvas* canvas, const SkRect& clipRect, SkImageFilter* filter) {
44         SkPaint paint;
45         paint.setImageFilter(filter);
46         canvas->save();
47         canvas->clipRect(clipRect);
48         canvas->drawPaint(paint);
49         canvas->restore();
50     }
51
52     void onDraw(SkCanvas* canvas) override {
53         canvas->clear(0x00000000);
54         {
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);
58             SkRect bounds;
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));
64
65             // Draw an unscaled bitmap.
66             fillRectFiltered(canvas, clipRect, bitmapSource);
67             canvas->translate(SkIntToScalar(100), 0);
68
69             // Draw an unscaled subset of the source bitmap (srcRect -> srcRect).
70             fillRectFiltered(canvas, clipRect, bitmapSourceSrcRect);
71             canvas->translate(SkIntToScalar(100), 0);
72
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);
76
77             // Draw the entire bitmap scaled to a destination rect (bounds -> dstRect).
78             fillRectFiltered(canvas, clipRect, bitmapSourceDstRectOnly);
79             canvas->translate(SkIntToScalar(100), 0);
80         }
81     }
82
83 private:
84     SkBitmap fBitmap;
85     typedef GM INHERITED;
86 };
87
88 ///////////////////////////////////////////////////////////////////////////////
89
90 DEF_GM( return new BitmapSourceGM; )