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. */ 14 class BadPaintGM : public skiagm::GM { 15 public: BadPaintGM()16 BadPaintGM() {} 17 18 protected: onShortName()19 SkString onShortName() override { return SkString("badpaint"); } 20 onISize()21 SkISize onISize() override { return SkISize::Make(100, 100); } 22 onOnceBeforeDraw()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::MakeBitmapShader(emptyBmp, SkShader::kClamp_TileMode, 36 SkShader::kClamp_TileMode)); 37 38 // Non-invertible local matrix. 39 fPaints.push_back().setColor(SK_ColorGREEN); 40 fPaints.back().setShader(SkShader::MakeBitmapShader(blueBmp, SkShader::kClamp_TileMode, 41 SkShader::kClamp_TileMode, &badMatrix)); 42 } 43 onDraw(SkCanvas * canvas)44 void onDraw(SkCanvas* canvas) override { 45 SkRect rect = SkRect::MakeXYWH(10, 10, 80, 80); 46 for (int i = 0; i < fPaints.count(); ++i) { 47 canvas->drawRect(rect, fPaints[i]); 48 } 49 } 50 51 private: 52 SkTArray<SkPaint> fPaints; 53 54 typedef skiagm::GM INHERITED; 55 }; 56 57 ///////////////////////////////////////////////////////////////////////////////////// 58 59 DEF_GM(return new BadPaintGM;) 60