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