aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/shaders/gradients
diff options
context:
space:
mode:
authorGravatar Florin Malita <fmalita@chromium.org>2017-08-02 10:42:41 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-08-02 15:05:01 +0000
commit545630b8990d8b9e509b2c751620e241b9247907 (patch)
treef2e2cce2b176137dfe9c8fb351a3faa3995af0f7 /src/shaders/gradients
parent63f76cc8fbf74122285579d205ac74b4597573c0 (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.cpp14
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