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::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 onDraw(SkCanvas * canvas)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 52 private: 53 SkTArray<SkPaint> fPaints; 54 55 typedef skiagm::GM INHERITED; 56 }; 57 58 ///////////////////////////////////////////////////////////////////////////////////// 59 60 DEF_GM( return SkNEW(BadPaintGM); ) 61