diff options
author | 2017-08-02 10:42:41 -0400 | |
---|---|---|
committer | 2017-08-02 15:05:01 +0000 | |
commit | 545630b8990d8b9e509b2c751620e241b9247907 (patch) | |
tree | f2e2cce2b176137dfe9c8fb351a3faa3995af0f7 /src/shaders/gradients | |
parent | 63f76cc8fbf74122285579d205ac74b4597573c0 (diff) |
Fix sweep gradient tiling w/ makeColorSpace
Change-Id: If989c2262b174af042af13cda991b999d9b6d596
Reviewed-on: https://skia-review.googlesource.com/29881
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src/shaders/gradients')
-rw-r--r-- | src/shaders/gradients/SkSweepGradient.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/shaders/gradients/SkSweepGradient.cpp b/src/shaders/gradients/SkSweepGradient.cpp index c4003bfd42..011474ca24 100644 --- a/src/shaders/gradients/SkSweepGradient.cpp +++ b/src/shaders/gradients/SkSweepGradient.cpp @@ -29,6 +29,10 @@ SkShader::GradientType SkSweepGradient::asAGradient(GradientInfo* info) const { return kSweep_GradientType; } +static std::tuple<SkScalar, SkScalar> angles_from_t_coeff(SkScalar tBias, SkScalar tScale) { + return std::make_tuple(-tBias * 360, (1 / tScale - tBias) * 360); +} + sk_sp<SkFlattenable> SkSweepGradient::CreateProc(SkReadBuffer& buffer) { DescriptorScope desc; if (!desc.unflatten(buffer)) { @@ -41,8 +45,7 @@ sk_sp<SkFlattenable> SkSweepGradient::CreateProc(SkReadBuffer& buffer) { if (!buffer.isVersionLT(SkReadBuffer::kTileInfoInSweepGradient_Version)) { const auto tBias = buffer.readScalar(), tScale = buffer.readScalar(); - startAngle = -tBias * 360; - endAngle = (1 / tScale - tBias) * 360; + std::tie(startAngle, endAngle) = angles_from_t_coeff(tBias, tScale); } return SkGradientShader::MakeSweep(center.x(), center.y(), desc.fColors, @@ -258,8 +261,13 @@ sk_sp<GrFragmentProcessor> SkSweepGradient::asFragmentProcessor(const AsFPArgs& sk_sp<SkShader> SkSweepGradient::onMakeColorSpace(SkColorSpaceXformer* xformer) const { SkSTArray<8, SkColor> xformedColors(fColorCount); xformer->apply(xformedColors.begin(), fOrigColors, fColorCount); + + SkScalar startAngle, endAngle; + std::tie(startAngle, endAngle) = angles_from_t_coeff(fTBias, fTScale); + return SkGradientShader::MakeSweep(fCenter.fX, fCenter.fY, xformedColors.begin(), fOrigPos, - fColorCount, fGradFlags, &this->getLocalMatrix()); + fColorCount, fTileMode, startAngle, endAngle, + fGradFlags, &this->getLocalMatrix()); } #ifndef SK_IGNORE_TO_STRING |