• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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