1/*
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
8#include "gm.h"
9#include "SkCanvas.h"
10#include "SkShader.h"
11
12
13/** This GM draws with invalid paints. It should draw nothing other than the background. */
14class BadPaintGM : public skiagm::GM {
15 public:
16    BadPaintGM() {}
17
18protected:
19    SkString onShortName() override { return SkString("badpaint"); }
20
21    SkISize onISize() override { return SkISize::Make(100, 100); }
22
23    void onOnceBeforeDraw() override {
24        SkBitmap emptyBmp;
25
26        SkBitmap blueBmp;
27        blueBmp.allocN32Pixels(10, 10);
28        blueBmp.eraseColor(SK_ColorBLUE);
29
30        SkMatrix badMatrix;
31        badMatrix.setAll(0, 0, 0, 0, 0, 0, 0, 0, 0);
32
33        // Empty bitmap.
34        fPaints.push_back().setColor(SK_ColorGREEN);
35        fPaints.back().setShader(SkShader::CreateBitmapShader(emptyBmp, SkShader::kClamp_TileMode,
36                                                              SkShader::kClamp_TileMode))->unref();
37
38        // Non-invertible local matrix.
39        fPaints.push_back().setColor(SK_ColorGREEN);
40        fPaints.back().setShader(SkShader::CreateBitmapShader(blueBmp, SkShader::kClamp_TileMode,
41                                                              SkShader::kClamp_TileMode,
42                                                              &badMatrix))->unref();
43    }
44
45    void onDraw(SkCanvas* canvas) override {
46        SkRect rect = SkRect::MakeXYWH(10, 10, 80, 80);
47        for (int i = 0; i < fPaints.count(); ++i) {
48            canvas->drawRect(rect, fPaints[i]);
49        }
50    }
51
52private:
53    SkTArray<SkPaint> fPaints;
54
55    typedef skiagm::GM INHERITED;
56};
57
58/////////////////////////////////////////////////////////////////////////////////////
59
60DEF_GM(return new BadPaintGM;)
61