blob: 10086c9c17ed734fd9abf113c9c15725b8d39eaa [file] [log] [blame]
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +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
halcanaryb0cce2c2015-01-26 12:49:00 -08008#include "sk_tool_utils.h"
halcanary878fa022015-01-26 11:24:32 -08009#include "SkColorFilterImageFilter.h"
10#include "SkColorMatrixFilter.h"
fmalita5598b632015-09-15 11:26:13 -070011#include "SkImage.h"
12#include "SkImageSource.h"
halcanary878fa022015-01-26 11:24:32 -080013#include "SkTileImageFilter.h"
14#include "gm.h"
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +000015
16#define WIDTH 400
17#define HEIGHT 100
18#define MARGIN 12
19
20namespace skiagm {
21
22class TileImageFilterGM : public GM {
23public:
robertphillips63195182015-06-08 06:21:14 -070024 TileImageFilterGM() {
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +000025 this->setBGColor(0xFF000000);
26 }
27
28protected:
robertphillips63195182015-06-08 06:21:14 -070029 SkString onShortName() override {
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +000030 return SkString("tileimagefilter");
31 }
32
robertphillips63195182015-06-08 06:21:14 -070033 SkISize onISize() override{
tfarinaf5393182014-06-09 23:59:03 -070034 return SkISize::Make(WIDTH, HEIGHT);
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +000035 }
36
robertphillips63195182015-06-08 06:21:14 -070037 void onOnceBeforeDraw() override {
fmalita5598b632015-09-15 11:26:13 -070038 fBitmap.reset(SkImage::NewFromBitmap(
39 sk_tool_utils::create_string_bitmap(50, 50, 0xD000D000, 10, 45, 50, "e")));
halcanary878fa022015-01-26 11:24:32 -080040
fmalita5598b632015-09-15 11:26:13 -070041 fCheckerboard.reset(SkImage::NewFromBitmap(
42 sk_tool_utils::create_checkerboard_bitmap(80, 80,
43 sk_tool_utils::color_to_565(0xFFA0A0A0),
44 sk_tool_utils::color_to_565(0xFF404040),
45 8)));
robertphillips63195182015-06-08 06:21:14 -070046 }
halcanary878fa022015-01-26 11:24:32 -080047
robertphillips63195182015-06-08 06:21:14 -070048 void onDraw(SkCanvas* canvas) override {
senorblanco16b254a2015-04-09 11:13:24 -070049 canvas->clear(SK_ColorBLACK);
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +000050
51 int x = 0, y = 0;
52 for (size_t i = 0; i < 4; i++) {
fmalita5598b632015-09-15 11:26:13 -070053 const SkImage* image = (i & 0x01) ? fCheckerboard : fBitmap;
54 SkRect srcRect = SkRect::MakeXYWH(SkIntToScalar(image->width()/4),
55 SkIntToScalar(image->height()/4),
56 SkIntToScalar(image->width()/(i+1)),
57 SkIntToScalar(image->height()/(i+1)));
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +000058 SkRect dstRect = SkRect::MakeXYWH(SkIntToScalar(i * 8),
59 SkIntToScalar(i * 4),
fmalita5598b632015-09-15 11:26:13 -070060 SkIntToScalar(image->width() - i * 12),
61 SkIntToScalar(image->height()) - i * 12);
62 SkAutoTUnref<SkImageFilter> tileInput(SkImageSource::Create(image));
commit-bot@chromium.orgcac5fd52014-03-10 10:51:58 +000063 SkAutoTUnref<SkImageFilter> filter(
64 SkTileImageFilter::Create(srcRect, dstRect, tileInput));
senorblanco@chromium.org6776b822014-01-03 21:48:22 +000065 canvas->save();
66 canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
senorblanco@chromium.org0a5c2332014-04-29 15:20:39 +000067 SkPaint paint;
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +000068 paint.setImageFilter(filter);
fmalita5598b632015-09-15 11:26:13 -070069 canvas->drawImage(fBitmap, 0, 0, &paint);
senorblanco@chromium.org6776b822014-01-03 21:48:22 +000070 canvas->restore();
fmalita5598b632015-09-15 11:26:13 -070071 x += image->width() + MARGIN;
72 if (x + image->width() > WIDTH) {
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +000073 x = 0;
fmalita5598b632015-09-15 11:26:13 -070074 y += image->height() + MARGIN;
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +000075 }
76 }
senorblanco@chromium.org0a5c2332014-04-29 15:20:39 +000077
78 SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0,
79 0, SK_Scalar1, 0, 0, 0,
80 0, 0, SK_Scalar1, 0, 0,
81 0, 0, 0, SK_Scalar1, 0 };
82
fmalita5598b632015-09-15 11:26:13 -070083 SkRect srcRect = SkRect::MakeWH(SkIntToScalar(fBitmap->width()),
84 SkIntToScalar(fBitmap->height()));
85 SkRect dstRect = SkRect::MakeWH(SkIntToScalar(fBitmap->width() * 2),
86 SkIntToScalar(fBitmap->height() * 2));
halcanary96fcdcc2015-08-27 07:41:13 -070087 SkAutoTUnref<SkImageFilter> tile(SkTileImageFilter::Create(srcRect, dstRect, nullptr));
senorblanco@chromium.org0a5c2332014-04-29 15:20:39 +000088 SkAutoTUnref<SkColorFilter> cf(SkColorMatrixFilter::Create(matrix));
89
90 SkAutoTUnref<SkImageFilter> cfif(SkColorFilterImageFilter::Create(cf, tile.get()));
91 SkPaint paint;
92 paint.setImageFilter(cfif);
93 canvas->save();
94 canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
95 canvas->clipRect(dstRect);
96 canvas->saveLayer(&dstRect, &paint);
fmalita5598b632015-09-15 11:26:13 -070097 canvas->drawImage(fBitmap, 0, 0);
senorblanco@chromium.org0a5c2332014-04-29 15:20:39 +000098 canvas->restore();
99 canvas->restore();
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +0000100 }
101private:
fmalita5598b632015-09-15 11:26:13 -0700102 SkAutoTUnref<SkImage> fBitmap, fCheckerboard;
robertphillips63195182015-06-08 06:21:14 -0700103
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +0000104 typedef GM INHERITED;
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +0000105};
106
107//////////////////////////////////////////////////////////////////////////////
108
halcanary385fe4d2015-08-26 13:07:48 -0700109DEF_GM(return new TileImageFilterGM;)
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +0000110}