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