Home | History | Annotate | Download | only in gm
      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:
     16     BadPaintGM() {}
     17 
     18 protected:
     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::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 
     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