1*c8dee2aaSAndroid Build Coastguard Worker // Copyright 2020 Google LLC.
2*c8dee2aaSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
3*c8dee2aaSAndroid Build Coastguard Worker #include "tools/fiddle/examples.h"
4*c8dee2aaSAndroid Build Coastguard Worker REG_FIDDLE(BlendModes, 256, 4352, false, 0) {
drawBG(SkCanvas * canvas)5*c8dee2aaSAndroid Build Coastguard Worker void drawBG(SkCanvas* canvas) {
6*c8dee2aaSAndroid Build Coastguard Worker SkColor radColors[] = {0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF};
7*c8dee2aaSAndroid Build Coastguard Worker auto rad = SkGradientShader::MakeRadial(SkPoint::Make(128, 128), 128, radColors, nullptr, 3,
8*c8dee2aaSAndroid Build Coastguard Worker SkTileMode::kClamp);
9*c8dee2aaSAndroid Build Coastguard Worker
10*c8dee2aaSAndroid Build Coastguard Worker SkMatrix rotMtx;
11*c8dee2aaSAndroid Build Coastguard Worker rotMtx.setRotate(-90, 128, 128);
12*c8dee2aaSAndroid Build Coastguard Worker SkColor sweepColors[] = {0xFFFF00FF, 0xFFFF0000, 0xFFFFFF00, 0xFF00FF00,
13*c8dee2aaSAndroid Build Coastguard Worker 0xFF00FFFF, 0xFF0000FF, 0xFFFF00FF};
14*c8dee2aaSAndroid Build Coastguard Worker auto sweep = SkGradientShader::MakeSweep(128, 128, sweepColors, nullptr, 7, 0, &rotMtx);
15*c8dee2aaSAndroid Build Coastguard Worker
16*c8dee2aaSAndroid Build Coastguard Worker auto comp = SkShaders::Blend(SkBlendMode::kModulate, std::move(rad), std::move(sweep));
17*c8dee2aaSAndroid Build Coastguard Worker SkPaint p;
18*c8dee2aaSAndroid Build Coastguard Worker p.setShader(std::move(comp));
19*c8dee2aaSAndroid Build Coastguard Worker
20*c8dee2aaSAndroid Build Coastguard Worker canvas->drawPaint(p);
21*c8dee2aaSAndroid Build Coastguard Worker }
22*c8dee2aaSAndroid Build Coastguard Worker
draw(SkCanvas * canvas)23*c8dee2aaSAndroid Build Coastguard Worker void draw(SkCanvas* canvas) {
24*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode blendModes[] = {
25*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode::kDst,
26*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode::kSrc,
27*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode::kSrcOver,
28*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode::kDstOver,
29*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode::kSrcIn,
30*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode::kDstIn,
31*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode::kSrcOut,
32*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode::kDstOut,
33*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode::kSrcATop,
34*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode::kDstATop,
35*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode::kXor,
36*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode::kPlus,
37*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode::kModulate,
38*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode::kScreen,
39*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode::kOverlay,
40*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode::kDarken,
41*c8dee2aaSAndroid Build Coastguard Worker SkBlendMode::kLighten,
42*c8dee2aaSAndroid Build Coastguard Worker };
43*c8dee2aaSAndroid Build Coastguard Worker
44*c8dee2aaSAndroid Build Coastguard Worker SkPaint labelPaint;
45*c8dee2aaSAndroid Build Coastguard Worker labelPaint.setAntiAlias(true);
46*c8dee2aaSAndroid Build Coastguard Worker SkFont font(fontMgr->matchFamilyStyle(nullptr, {}), 12);
47*c8dee2aaSAndroid Build Coastguard Worker
48*c8dee2aaSAndroid Build Coastguard Worker for (auto mode : blendModes) {
49*c8dee2aaSAndroid Build Coastguard Worker SkPaint layerPaint;
50*c8dee2aaSAndroid Build Coastguard Worker layerPaint.setBlendMode(mode);
51*c8dee2aaSAndroid Build Coastguard Worker
52*c8dee2aaSAndroid Build Coastguard Worker canvas->save();
53*c8dee2aaSAndroid Build Coastguard Worker canvas->clipRect(SkRect::MakeWH(256, 256));
54*c8dee2aaSAndroid Build Coastguard Worker
55*c8dee2aaSAndroid Build Coastguard Worker drawBG(canvas);
56*c8dee2aaSAndroid Build Coastguard Worker
57*c8dee2aaSAndroid Build Coastguard Worker canvas->saveLayer(nullptr, &layerPaint);
58*c8dee2aaSAndroid Build Coastguard Worker const SkScalar r = 80;
59*c8dee2aaSAndroid Build Coastguard Worker SkPaint discP;
60*c8dee2aaSAndroid Build Coastguard Worker discP.setAntiAlias(true);
61*c8dee2aaSAndroid Build Coastguard Worker discP.setBlendMode(SkBlendMode::kPlus);
62*c8dee2aaSAndroid Build Coastguard Worker discP.setColor(SK_ColorGREEN); canvas->drawCircle(128, r, r, discP);
63*c8dee2aaSAndroid Build Coastguard Worker discP.setColor(SK_ColorRED); canvas->drawCircle(r, 256 - r, r, discP);
64*c8dee2aaSAndroid Build Coastguard Worker discP.setColor(SK_ColorBLUE); canvas->drawCircle(256 - r, 256 - r, r, discP);
65*c8dee2aaSAndroid Build Coastguard Worker canvas->restore();
66*c8dee2aaSAndroid Build Coastguard Worker
67*c8dee2aaSAndroid Build Coastguard Worker canvas->drawSimpleText(SkBlendMode_Name(mode), strlen(SkBlendMode_Name(mode)),
68*c8dee2aaSAndroid Build Coastguard Worker SkTextEncoding::kUTF8, 10, 10, font, labelPaint);
69*c8dee2aaSAndroid Build Coastguard Worker canvas->restore();
70*c8dee2aaSAndroid Build Coastguard Worker canvas->translate(0, 256);
71*c8dee2aaSAndroid Build Coastguard Worker }
72*c8dee2aaSAndroid Build Coastguard Worker }
73*c8dee2aaSAndroid Build Coastguard Worker } // END FIDDLE
74