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 virtual SkString onShortName() SK_OVERRIDE { 18 return SkString("alphagradients"); 19 } 20 onISize()21 virtual SkISize onISize() SK_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 SkShader* s = SkGradientShader::CreateLinear(pts, colors, NULL, 2, 32 SkShader::kClamp_TileMode, 33 NULL, flags); 34 paint.setShader(s)->unref(); 35 canvas->drawRect(r, paint); 36 37 paint.setShader(NULL); 38 paint.setStyle(SkPaint::kStroke_Style); 39 canvas->drawRect(r, paint); 40 } 41 onDraw(SkCanvas * canvas)42 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 43 static const struct { 44 SkColor fColor0; 45 SkColor fColor1; 46 } gRec[] = { 47 { 0xFFFFFFFF, 0x00000000 }, 48 { 0xFFFFFFFF, 0x00FF0000 }, 49 { 0xFFFFFFFF, 0x00FFFF00 }, 50 { 0xFFFFFFFF, 0x00FFFFFF }, 51 { 0xFFFF0000, 0x00000000 }, 52 { 0xFFFF0000, 0x00FF0000 }, 53 { 0xFFFF0000, 0x00FFFF00 }, 54 { 0xFFFF0000, 0x00FFFFFF }, 55 { 0xFF0000FF, 0x00000000 }, 56 { 0xFF0000FF, 0x00FF0000 }, 57 { 0xFF0000FF, 0x00FFFF00 }, 58 { 0xFF0000FF, 0x00FFFFFF }, 59 }; 60 61 SkRect r = SkRect::MakeWH(300, 30); 62 63 canvas->translate(10, 10); 64 65 for (int doPreMul = 0; doPreMul <= 1; ++doPreMul) { 66 canvas->save(); 67 for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); ++i) { 68 draw_grad(canvas, r, gRec[i].fColor0, gRec[i].fColor1, SkToBool(doPreMul)); 69 canvas->translate(0, r.height() + 8); 70 } 71 canvas->restore(); 72 canvas->translate(r.width() + 10, 0); 73 } 74 } 75 onGetFlags() const76 virtual uint32_t onGetFlags() const { return kSkipPipe_Flag; } 77 78 private: 79 typedef skiagm::GM INHERITED; 80 }; 81 82 DEF_GM( return SkNEW(AlphaGradientsGM); ) 83