• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
BitmapSourceGM()16     BitmapSourceGM() {
17     }
18 
19 protected:
onShortName()20     SkString onShortName() override {
21         return SkString("bitmapsource");
22     }
23 
makeBitmap()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 
onISize()37     SkISize onISize() override { return SkISize::Make(500, 150); }
38 
onOnceBeforeDraw()39     void onOnceBeforeDraw() override {
40         this->makeBitmap();
41     }
42 
fillRectFiltered(SkCanvas * canvas,const SkRect & clipRect,SkImageFilter * filter)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 
onDraw(SkCanvas * canvas)52     void onDraw(SkCanvas* canvas) override {
53         canvas->clear(SK_ColorBLACK);
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; )
91