2 * Copyright 2011 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
10 #include "SkColorPriv.h"
14 static void test4(SkCanvas* canvas) {
16 paint.setAntiAlias(true);
18 {10, 160}, {610, 160},
19 {610, 160}, {10, 160},
21 {610, 160}, {610, 160},
22 {610, 199}, {610, 199},
24 {10, 198}, {610, 198},
25 {610, 199}, {10, 199},
38 for (size_t i = 0; i < sizeof(verbs); ++i) {
39 switch ((SkPath::Verb) verbs[i]) {
40 case SkPath::kMove_Verb:
41 path.moveTo(ptPtr->fX, ptPtr->fY);
44 case SkPath::kLine_Verb:
45 path.lineTo(ptPtr->fX, ptPtr->fY);
48 case SkPath::kClose_Verb:
56 SkRect clip = {0, 130, 772, 531};
57 canvas->clipRect(clip);
58 canvas->drawPath(path, paint);
61 constexpr SkBlendMode gModes[] = {
65 SkBlendMode::kSrcOver,
66 SkBlendMode::kDstOver,
71 SkBlendMode::kSrcATop,
72 SkBlendMode::kDstATop,
76 const int gWidth = 64;
77 const int gHeight = 64;
78 const SkScalar W = SkIntToScalar(gWidth);
79 const SkScalar H = SkIntToScalar(gHeight);
81 static SkScalar drawCell(SkCanvas* canvas, SkBlendMode mode, SkAlpha a0, SkAlpha a1) {
84 paint.setAntiAlias(true);
86 SkRect r = SkRect::MakeWH(W, H);
89 paint.setColor(SK_ColorBLUE);
91 canvas->drawOval(r, paint);
93 paint.setColor(SK_ColorRED);
95 paint.setBlendMode(mode);
97 SkScalar offset = SK_Scalar1 / 3;
98 SkRect rect = SkRect::MakeXYWH(W / 4 + offset,
101 canvas->drawRect(rect, paint);
106 static sk_sp<SkShader> make_bg_shader() {
108 bm.allocN32Pixels(2, 2);
109 *bm.getAddr32(0, 0) = *bm.getAddr32(1, 1) = 0xFFFFFFFF;
110 *bm.getAddr32(1, 0) = *bm.getAddr32(0, 1) = SkPackARGB32(0xFF, 0xCE,
113 const SkMatrix m = SkMatrix::MakeScale(SkIntToScalar(6), SkIntToScalar(6));
114 return SkShader::MakeBitmapShader(bm, SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode,
120 class AARectModesGM : public GM {
124 fBGPaint.setShader(make_bg_shader());
129 SkString onShortName() override {
130 return SkString("aarectmodes");
133 SkISize onISize() override { return SkISize::Make(640, 480); }
135 void onDraw(SkCanvas* canvas) override {
136 if (false) { // avoid bit rot, suppress warning
139 const SkRect bounds = SkRect::MakeWH(W, H);
140 constexpr SkAlpha gAlphaValue[] = { 0xFF, 0x88, 0x88 };
142 canvas->translate(SkIntToScalar(4), SkIntToScalar(4));
144 for (int alpha = 0; alpha < 4; ++alpha) {
147 for (size_t i = 0; i < SK_ARRAY_COUNT(gModes); ++i) {
150 canvas->translate(W * 5, 0);
153 canvas->drawRect(bounds, fBGPaint);
154 canvas->saveLayer(&bounds, nullptr);
155 SkScalar dy = drawCell(canvas, gModes[i],
156 gAlphaValue[alpha & 1],
157 gAlphaValue[alpha & 2]);
160 canvas->translate(0, dy * 5 / 4);
164 canvas->translate(W * 5 / 4, 0);
169 typedef GM INHERITED;
172 //////////////////////////////////////////////////////////////////////////////
174 static GM* MyFactory(void*) { return new AARectModesGM; }
175 static GMRegistry reg(MyFactory);