add a new hsl GM
[platform/upstream/libSkiaSharp.git] / gm / tiledscaledbitmap.cpp
1 /*
2  * Copyright 2014 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 "Resources.h"
11 #include "SkBitmap.h"
12 #include "SkPaint.h"
13 #include "SkShader.h"
14 #include "SkStream.h"
15
16  /***
17   *
18   * This GM reproduces Skia bug 2904, in which a tiled bitmap shader was failing to draw correctly
19   * when fractional image scaling was ignored by the high quality bitmap scaler.
20   *
21   ***/
22
23 namespace skiagm {
24
25 class TiledScaledBitmapGM : public GM {
26 public:
27
28     TiledScaledBitmapGM() {
29     }
30
31 protected:
32     SkString onShortName() override {
33         return SkString("tiledscaledbitmap");
34     }
35
36     SkISize onISize() override {
37         return SkISize::Make(1016, 616);
38     }
39
40     static SkBitmap make_bm(int width, int height) {
41         SkBitmap bm;
42         bm.allocN32Pixels(width, height);
43         bm.eraseColor(SK_ColorTRANSPARENT);
44         SkCanvas canvas(bm);
45         SkPaint paint;
46         paint.setAntiAlias(true);
47         canvas.drawCircle(width/2.f, height/2.f, width/4.f, paint);
48         return bm;
49     }
50
51     void onOnceBeforeDraw() override {
52         fBitmap = make_bm(360, 288);
53     }
54
55     void onDraw(SkCanvas* canvas) override {
56         SkPaint paint;
57
58         paint.setAntiAlias(true);
59         paint.setFilterQuality(kHigh_SkFilterQuality);
60
61         SkMatrix mat;
62         mat.setScale(121.f/360.f, 93.f/288.f);
63         mat.postTranslate(-72, -72);
64
65         paint.setShader(SkShader::MakeBitmapShader(fBitmap, SkShader::kRepeat_TileMode,
66                                                    SkShader::kRepeat_TileMode, &mat));
67         canvas->drawRect({ 8, 8, 1008, 608 }, paint);
68     }
69
70 private:
71     SkBitmap fBitmap;
72
73     typedef GM INHERITED;
74 };
75
76 //////////////////////////////////////////////////////////////////////////////
77
78 DEF_GM(return new TiledScaledBitmapGM;)
79 }