1 /* 2 * Copyright 2013 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 "SkGradientShader.h" 11 12 class AlphaGradientsGM : public skiagm::GM { 13 public: AlphaGradientsGM()14 AlphaGradientsGM() {} 15 16 protected: onShortName()17 SkString onShortName() override { 18 return SkString("alphagradients"); 19 } 20 onISize()21 SkISize onISize() override { 22 return SkISize::Make(640, 480); 23 } 24 draw_grad(SkCanvas * canvas,const SkRect & r,SkColor c0,SkColor c1,bool doPreMul)25 static void draw_grad(SkCanvas* canvas, const SkRect& r, 26 SkColor c0, SkColor c1, bool doPreMul) { 27 SkColor colors[] = { c0, c1 }; 28 SkPoint pts[] = { { r.fLeft, r.fTop }, { r.fRight, r.fBottom } }; 29 SkPaint paint; 30 uint32_t flags = doPreMul ? SkGradientShader::kInterpolateColorsInPremul_Flag : 0; 31 paint.setShader(SkGradientShader::MakeLinear(pts, colors, nullptr, 2, 32 SkShader::kClamp_TileMode, flags, nullptr)); 33 canvas->drawRect(r, paint); 34 35 paint.setShader(nullptr); 36 paint.setStyle(SkPaint::kStroke_Style); 37 canvas->drawRect(r, paint); 38 } 39 onDraw(SkCanvas * canvas)40 void onDraw(SkCanvas* canvas) override { 41 constexpr struct { 42 SkColor fColor0; 43 SkColor fColor1; 44 } gRec[] = { 45 { 0xFFFFFFFF, 0x00000000 }, 46 { 0xFFFFFFFF, 0x00FF0000 }, 47 { 0xFFFFFFFF, 0x00FFFF00 }, 48 { 0xFFFFFFFF, 0x00FFFFFF }, 49 { 0xFFFF0000, 0x00000000 }, 50 { 0xFFFF0000, 0x00FF0000 }, 51 { 0xFFFF0000, 0x00FFFF00 }, 52 { 0xFFFF0000, 0x00FFFFFF }, 53 { 0xFF0000FF, 0x00000000 }, 54 { 0xFF0000FF, 0x00FF0000 }, 55 { 0xFF0000FF, 0x00FFFF00 }, 56 { 0xFF0000FF, 0x00FFFFFF }, 57 }; 58 59 SkRect r = SkRect::MakeWH(300, 30); 60 61 canvas->translate(10, 10); 62 63 for (int doPreMul = 0; doPreMul <= 1; ++doPreMul) { 64 canvas->save(); 65 for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); ++i) { 66 draw_grad(canvas, r, gRec[i].fColor0, gRec[i].fColor1, SkToBool(doPreMul)); 67 canvas->translate(0, r.height() + 8); 68 } 69 canvas->restore(); 70 canvas->translate(r.width() + 10, 0); 71 } 72 } 73 74 private: 75 typedef skiagm::GM INHERITED; 76 }; 77 78 DEF_GM(return new AlphaGradientsGM;) 79