// Copyright 2020 Google LLC. // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. #include "tools/fiddle/examples.h" REG_FIDDLE(GradientShader_MakeLinear, 201, 201, false, 0) { void draw(SkCanvas* canvas) { // This fiddle draws 4 instances of a LinearGradient, demonstrating // how the local matrix affects the gradient as well as the flag // which controls unpremul vs premul color interpolation. SkPaint strokePaint; strokePaint.setStyle(SkPaint::kStroke_Style); strokePaint.setColor(SK_ColorBLACK); SkPaint p; p.setStyle(SkPaint::kFill_Style); SkColor transparentGreen = SkColorSetARGB(0, 0, 255, 255); SkColor colors[] = { transparentGreen, SK_ColorBLUE, SK_ColorRED }; SkScalar positions[] = { 0.0, 0.65, 1.0 }; for (int i = 0; i < 4; i++) { SkScalar blockX = (i % 2) * 100; SkScalar blockY = (i / 2) * 100; SkPoint pts[] = { {blockX, blockY}, {blockX + 50, blockY + 100} }; int flags = 0; // interpolate colors in unpremul if (i % 2 == 1) { // right column will have premul flags = SkGradientShader::Flags::kInterpolateColorsInPremul_Flag; } SkMatrix matr = SkMatrix::I(); if (i / 2 == 1) { // bottom row will be rotated 45 degrees. matr.setRotate(45, blockX, blockY); } auto lgs = SkGradientShader::MakeLinear( pts, colors, positions, 3, SkTileMode::kMirror, flags, &matr); p.setShader(lgs); auto r = SkRect::MakeLTRB(blockX, blockY, blockX + 100, blockY + 100); canvas->drawRect(r, p); canvas->drawRect(r, strokePaint); } } } // END FIDDLE