diff options
author | Florin Malita <fmalita@chromium.org> | 2017-08-01 16:38:08 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-08-01 21:03:28 +0000 |
commit | 5a9a981edf54d203e06adab0909da03343a1c596 (patch) | |
tree | 27fff0d853f596559aef68ba7d3f5e59be8e0d49 /include/effects/SkGradientShader.h | |
parent | ce06e261e68848ae21cac1052abc16bc07b961bf (diff) |
Tiling support for SkSweepGradient
Expand the sweep gradient definition to include a color stop angular range ([0, 360] by default).
Color stop positions in [0,1] are mapped to this range, and drawing outside is controlled by a
tile mode param.
This is closer to the CSS gradients spec and allows us to use fewer color stops in Blink conic
gradients.
Impl-wise, the remapping is effected after t calculation, and before tiling.
Change-Id: I5d71be01d134404d6eb9d7e2a904ec636b39f855
Reviewed-on: https://skia-review.googlesource.com/27704
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'include/effects/SkGradientShader.h')
-rw-r--r-- | include/effects/SkGradientShader.h | 65 |
1 files changed, 45 insertions, 20 deletions
diff --git a/include/effects/SkGradientShader.h b/include/effects/SkGradientShader.h index 393749be65..a4408ad9c3 100644 --- a/include/effects/SkGradientShader.h +++ b/include/effects/SkGradientShader.h @@ -158,44 +158,69 @@ public: /** Returns a shader that generates a sweep gradient given a center. <p /> - @param cx The X coordinate of the center of the sweep - @param cx The Y coordinate of the center of the sweep - @param colors The array[count] of colors, to be distributed around the center. - @param pos May be NULL. The array[count] of SkScalars, or NULL, of the relative position of - each corresponding color in the colors array. If this is NULL, - the the colors are distributed evenly between the center and edge of the circle. - If this is not null, the values must begin with 0, end with 1.0, and - intermediate values must be strictly increasing. - @param count Must be >= 2. The number of colors (and pos if not NULL) entries + @param cx The X coordinate of the center of the sweep + @param cx The Y coordinate of the center of the sweep + @param colors The array[count] of colors, to be distributed around the center, within + the gradient angle range. + @param pos May be NULL. The array[count] of SkScalars, or NULL, of the relative + position of each corresponding color in the colors array. If this is + NULL, then the colors are distributed evenly within the angular range. + If this is not null, the values must begin with 0, end with 1.0, and + intermediate values must be strictly increasing. + @param count Must be >= 2. The number of colors (and pos if not NULL) entries + @param mode Tiling mode: controls drawing outside of the gradient angular range. + @param startAngle Start of the angular range, corresponding to pos == 0. + @param endAngle End of the angular range, corresponding to pos == 1. */ static sk_sp<SkShader> MakeSweep(SkScalar cx, SkScalar cy, const SkColor colors[], const SkScalar pos[], int count, + SkShader::TileMode mode, + SkScalar startAngle, SkScalar endAngle, uint32_t flags, const SkMatrix* localMatrix); static sk_sp<SkShader> MakeSweep(SkScalar cx, SkScalar cy, + const SkColor colors[], const SkScalar pos[], int count, + uint32_t flags, const SkMatrix* localMatrix) { + return MakeSweep(cx, cy, colors, pos, count, SkShader::kClamp_TileMode, 0, 360, flags, + localMatrix); + } + static sk_sp<SkShader> MakeSweep(SkScalar cx, SkScalar cy, const SkColor colors[], const SkScalar pos[], int count) { - return MakeSweep(cx, cy, colors, pos, count, 0, NULL); + return MakeSweep(cx, cy, colors, pos, count, 0, nullptr); } /** Returns a shader that generates a sweep gradient given a center. <p /> - @param cx The X coordinate of the center of the sweep - @param cx The Y coordinate of the center of the sweep - @param colors The array[count] of colors, to be distributed around the center. - @param pos May be NULL. The array[count] of SkScalars, or NULL, of the relative position of - each corresponding color in the colors array. If this is NULL, - the the colors are distributed evenly between the center and edge of the circle. - If this is not null, the values must begin with 0, end with 1.0, and - intermediate values must be strictly increasing. - @param count Must be >= 2. The number of colors (and pos if not NULL) entries + @param cx The X coordinate of the center of the sweep + @param cx The Y coordinate of the center of the sweep + @param colors The array[count] of colors, to be distributed around the center, within + the gradient angle range. + @param pos May be NULL. The array[count] of SkScalars, or NULL, of the relative + position of each corresponding color in the colors array. If this is + NULL, then the colors are distributed evenly within the angular range. + If this is not null, the values must begin with 0, end with 1.0, and + intermediate values must be strictly increasing. + @param count Must be >= 2. The number of colors (and pos if not NULL) entries + @param mode Tiling mode: controls drawing outside of the gradient angular range. + @param startAngle Start of the angular range, corresponding to pos == 0. + @param endAngle End of the angular range, corresponding to pos == 1. */ static sk_sp<SkShader> MakeSweep(SkScalar cx, SkScalar cy, const SkColor4f colors[], sk_sp<SkColorSpace> colorSpace, const SkScalar pos[], int count, + SkShader::TileMode mode, + SkScalar startAngle, SkScalar endAngle, uint32_t flags, const SkMatrix* localMatrix); static sk_sp<SkShader> MakeSweep(SkScalar cx, SkScalar cy, const SkColor4f colors[], sk_sp<SkColorSpace> colorSpace, + const SkScalar pos[], int count, + uint32_t flags, const SkMatrix* localMatrix) { + return MakeSweep(cx, cy, colors, std::move(colorSpace), pos, count, + SkShader::kClamp_TileMode, 0, 360, flags, localMatrix); + } + static sk_sp<SkShader> MakeSweep(SkScalar cx, SkScalar cy, + const SkColor4f colors[], sk_sp<SkColorSpace> colorSpace, const SkScalar pos[], int count) { - return MakeSweep(cx, cy, colors, std::move(colorSpace), pos, count, 0, NULL); + return MakeSweep(cx, cy, colors, std::move(colorSpace), pos, count, 0, nullptr); } SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() |