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