blob: 4e169f77dae0e323c9bbe4b6c3522aac0f65c3d7 [file] [log] [blame]
senorblanco@chromium.org53333002013-12-12 23:28:52 +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 "SkPictureImageFilter.h"
robertphillips@google.com770963f2014-04-18 18:04:41 +000011#include "SkPictureRecorder.h"
senorblanco@chromium.org53333002013-12-12 23:28:52 +000012
13// This GM exercises the SkPictureImageFilter ImageFilter class.
14
15class PictureImageFilterGM : public skiagm::GM {
16public:
17 PictureImageFilterGM() {
18 }
19
20protected:
21 virtual SkString onShortName() SK_OVERRIDE {
22 return SkString("pictureimagefilter");
23 }
24
25 void makePicture() {
robertphillips@google.com84b18c72014-04-13 19:09:42 +000026 SkPictureRecorder recorder;
commit-bot@chromium.org5fb2ce32014-04-17 23:35:06 +000027 SkCanvas* canvas = recorder.beginRecording(100, 100, NULL, 0);
senorblanco@chromium.org53333002013-12-12 23:28:52 +000028 canvas->clear(0x00000000);
29 SkPaint paint;
30 paint.setAntiAlias(true);
Cary Clark992c7b02014-07-31 08:58:44 -040031 sk_tool_utils::set_portable_typeface(&paint);
senorblanco@chromium.org53333002013-12-12 23:28:52 +000032 paint.setColor(0xFFFFFFFF);
33 paint.setTextSize(SkIntToScalar(96));
34 const char* str = "e";
35 canvas->drawText(str, strlen(str), SkIntToScalar(20), SkIntToScalar(70), paint);
robertphillips@google.com84b18c72014-04-13 19:09:42 +000036 fPicture.reset(recorder.endRecording());
senorblanco@chromium.org53333002013-12-12 23:28:52 +000037 }
38
39 virtual SkISize onISize() SK_OVERRIDE { return SkISize::Make(500, 150); }
40
41 virtual void onOnceBeforeDraw() SK_OVERRIDE {
42 this->makePicture();
43 }
44
45 static void fillRectFiltered(SkCanvas* canvas, const SkRect& clipRect, SkImageFilter* filter) {
46 SkPaint paint;
47 paint.setImageFilter(filter);
48 canvas->save();
49 canvas->clipRect(clipRect);
50 canvas->drawPaint(paint);
51 canvas->restore();
52 }
53
54 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
55 canvas->clear(0x00000000);
56 {
57 SkRect srcRect = SkRect::MakeXYWH(20, 20, 30, 30);
58 SkRect emptyRect = SkRect::MakeXYWH(20, 20, 0, 0);
59 SkRect bounds = SkRect::MakeXYWH(0, 0, 100, 100);
robertphillips@google.com84b18c72014-04-13 19:09:42 +000060 SkAutoTUnref<SkImageFilter> pictureSource(SkPictureImageFilter::Create(fPicture));
61 SkAutoTUnref<SkImageFilter> pictureSourceSrcRect(SkPictureImageFilter::Create(fPicture, srcRect));
62 SkAutoTUnref<SkImageFilter> pictureSourceEmptyRect(SkPictureImageFilter::Create(fPicture, emptyRect));
senorblanco@chromium.org53333002013-12-12 23:28:52 +000063
64 // Draw the picture unscaled.
65 fillRectFiltered(canvas, bounds, pictureSource);
66 canvas->translate(SkIntToScalar(100), 0);
67
68 // Draw an unscaled subset of the source picture.
69 fillRectFiltered(canvas, bounds, pictureSourceSrcRect);
70 canvas->translate(SkIntToScalar(100), 0);
71
72 // Draw the picture to an empty rect (should draw nothing).
73 fillRectFiltered(canvas, bounds, pictureSourceEmptyRect);
74 canvas->translate(SkIntToScalar(100), 0);
75 }
76 }
77
senorblanco@chromium.orgf0121872013-12-12 23:54:33 +000078 // SkPictureImageFilter doesn't support serialization yet.
79 virtual uint32_t onGetFlags() const SK_OVERRIDE {
80 return kSkipPicture_Flag |
81 kSkipPipe_Flag |
82 kSkipPipeCrossProcess_Flag |
83 kSkipTiled_Flag |
84 kSkipScaledReplay_Flag;
85 }
86
senorblanco@chromium.org53333002013-12-12 23:28:52 +000087private:
robertphillips@google.com84b18c72014-04-13 19:09:42 +000088 SkAutoTUnref<SkPicture> fPicture;
senorblanco@chromium.org53333002013-12-12 23:28:52 +000089 typedef GM INHERITED;
90};
91
92///////////////////////////////////////////////////////////////////////////////
93
94DEF_GM( return new PictureImageFilterGM; )