blob: 77c24998b443e310c13df6748df0035dc5d25ba7 [file] [log] [blame]
bsalomon8cf1d952015-04-16 06:54:28 -07001/*
2 * Copyright 2015 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
Mike Kleinc0bd9f92019-04-23 12:05:21 -05008#include "gm/gm.h"
9#include "tools/ToolUtils.h"
bsalomon8cf1d952015-04-16 06:54:28 -070010
Mike Kleinc0bd9f92019-04-23 12:05:21 -050011#include "include/core/SkShader.h"
bsalomon8cf1d952015-04-16 06:54:28 -070012
13// Inspired by svg/as-border-image/svg-as-border-image.html. Draws a four-color checker board bitmap
14// such that it is stretched and repeat tiled with different filter qualities. It is testing whether
15// the bmp filter respects the repeat mode at the tile seams.
16class BmpFilterQualityRepeat : public skiagm::GM {
17public:
Mike Kleinea3f0142019-03-20 11:12:10 -050018 BmpFilterQualityRepeat() { this->setBGColor(ToolUtils::color_to_565(0xFFCCBBAA)); }
bsalomon8cf1d952015-04-16 06:54:28 -070019
20protected:
21
22 void onOnceBeforeDraw() override {
23 fBmp.allocN32Pixels(40, 40, true);
24 SkCanvas canvas(fBmp);
25 SkBitmap colorBmp;
26 colorBmp.allocN32Pixels(20, 20, true);
27 colorBmp.eraseColor(0xFFFF0000);
28 canvas.drawBitmap(colorBmp, 0, 0);
Mike Kleinea3f0142019-03-20 11:12:10 -050029 colorBmp.eraseColor(ToolUtils::color_to_565(0xFF008200));
bsalomon8cf1d952015-04-16 06:54:28 -070030 canvas.drawBitmap(colorBmp, 20, 0);
Mike Kleinea3f0142019-03-20 11:12:10 -050031 colorBmp.eraseColor(ToolUtils::color_to_565(0xFFFF9000));
bsalomon8cf1d952015-04-16 06:54:28 -070032 canvas.drawBitmap(colorBmp, 0, 20);
Mike Kleinea3f0142019-03-20 11:12:10 -050033 colorBmp.eraseColor(ToolUtils::color_to_565(0xFF2000FF));
bsalomon8cf1d952015-04-16 06:54:28 -070034 canvas.drawBitmap(colorBmp, 20, 20);
35 }
36
37 SkString onShortName() override { return SkString("bmp_filter_quality_repeat"); }
38
fmalitab1c7f882016-11-03 11:42:49 -070039 SkISize onISize() override { return SkISize::Make(1000, 400); }
bsalomon8cf1d952015-04-16 06:54:28 -070040
41 void onDraw(SkCanvas* canvas) override {
fmalitab1c7f882016-11-03 11:42:49 -070042 this->drawAll(canvas, 2.5f);
43 canvas->translate(0, 250);
44 canvas->scale(0.5, 0.5);
45 this->drawAll(canvas, 1);
46 }
bsalomon8cf1d952015-04-16 06:54:28 -070047
fmalitab1c7f882016-11-03 11:42:49 -070048private:
49 void drawAll(SkCanvas* canvas, SkScalar scaleX) const {
mtkleindbfd7ab2016-09-01 11:24:54 -070050 constexpr struct {
bsalomon8cf1d952015-04-16 06:54:28 -070051 SkFilterQuality fQuality;
52 const char* fName;
53 } kQualities[] = {
54 {kNone_SkFilterQuality, "none"},
55 {kLow_SkFilterQuality, "low"},
56 {kMedium_SkFilterQuality, "medium"},
57 {kHigh_SkFilterQuality, "high"},
58 };
59
fmalitab1c7f882016-11-03 11:42:49 -070060 SkRect rect = SkRect::MakeLTRB(20, 60, 220, 210);
61 SkMatrix lm = SkMatrix::I();
62 lm.setScaleX(scaleX);
63 lm.setTranslateX(423);
64 lm.setTranslateY(330);
bsalomon8cf1d952015-04-16 06:54:28 -070065
fmalitab1c7f882016-11-03 11:42:49 -070066 SkPaint textPaint;
fmalitab1c7f882016-11-03 11:42:49 -070067 textPaint.setAntiAlias(true);
68
69 SkPaint bmpPaint(textPaint);
70
Mike Kleinea3f0142019-03-20 11:12:10 -050071 SkFont font(ToolUtils::create_portable_typeface());
Mike Reed4de2f1f2019-01-05 16:35:13 -050072
fmalitab1c7f882016-11-03 11:42:49 -070073 SkAutoCanvasRestore acr(canvas, true);
74
75 for (size_t q = 0; q < SK_ARRAY_COUNT(kQualities); ++q) {
Mike Reedfae8fce2019-04-03 10:27:45 -040076 constexpr SkTileMode kTM = SkTileMode::kRepeat;
Mike Reed50acf8f2019-04-08 13:20:23 -040077 bmpPaint.setShader(fBmp.makeShader(kTM, kTM, &lm));
fmalitab1c7f882016-11-03 11:42:49 -070078 bmpPaint.setFilterQuality(kQualities[q].fQuality);
bsalomon8cf1d952015-04-16 06:54:28 -070079 canvas->drawRect(rect, bmpPaint);
Mike Reed4de2f1f2019-01-05 16:35:13 -050080 canvas->drawString(kQualities[q].fName, 20, 40, font, textPaint);
bsalomon8cf1d952015-04-16 06:54:28 -070081 canvas->translate(250, 0);
82 }
fmalitab1c7f882016-11-03 11:42:49 -070083
bsalomon8cf1d952015-04-16 06:54:28 -070084 }
85
bsalomon8cf1d952015-04-16 06:54:28 -070086 SkBitmap fBmp;
87
88 typedef skiagm::GM INHERITED;
89};
90
91//////////////////////////////////////////////////////////////////////////////
92
halcanary385fe4d2015-08-26 13:07:48 -070093DEF_GM(return new BmpFilterQualityRepeat;)