| // 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); | |
| SkColor4f transparentGreen = SkColors::kGreen.withAlpha(0); | |
| SkColor4f colors[] = { transparentGreen, SkColors::kBlue, SkColors::kRed }; | |
| 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} }; | |
| auto premul = SkGradient::Interpolation::InPremul::kNo; | |
| if (i % 2 == 1) { | |
| // right column will have premul | |
| premul = SkGradient::Interpolation::InPremul::kYes; | |
| } | |
| SkMatrix matr = SkMatrix::I(); | |
| if (i / 2 == 1) { | |
| // bottom row will be rotated 45 degrees. | |
| matr.setRotate(45, blockX, blockY); | |
| } | |
| auto lgs = SkShaders::LinearGradient( | |
| pts, {{colors, positions, SkTileMode::kMirror}, {premul}}, &matr); | |
| p.setShader(lgs); | |
| auto r = SkRect::MakeLTRB(blockX, blockY, blockX + 100, blockY + 100); | |
| canvas->drawRect(r, p); | |
| canvas->drawRect(r, strokePaint); | |
| } | |
| } | |
| } // END FIDDLE |