|  | // 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 |