diff options
author | 2022-09-23 12:37:58 -0400 | |
---|---|---|
committer | 2022-10-12 21:00:50 +0000 | |
commit | bb2499f2681a2c26a814ac391e6250ca62467c1b (patch) | |
tree | 06180e3597ce9ed011408c626135e9ac7ac2931c | |
parent | a824443ad990c3a84e338c0f7d54a688c2d44455 (diff) |
Use new SkAndroidFrameworkUtils method to get linear gradient info.
This allows Skia to remove the SkShaders::asAGradient method.
Test: android.uirendering.cts.testclasses.ForceDarkTests#testLinearGradient
Bug: skbug.com/8941
Change-Id: Id333f1c083c09b65f9caa8639c231e5d7e98b7c4
-rw-r--r-- | libs/hwui/CanvasTransform.cpp | 33 |
1 files changed, 14 insertions, 19 deletions
diff --git a/libs/hwui/CanvasTransform.cpp b/libs/hwui/CanvasTransform.cpp index d0d24a8738f4..673041a661ce 100644 --- a/libs/hwui/CanvasTransform.cpp +++ b/libs/hwui/CanvasTransform.cpp @@ -15,19 +15,20 @@ */ #include "CanvasTransform.h" -#include "Properties.h" -#include "utils/Color.h" +#include <SkAndroidFrameworkUtils.h> #include <SkColorFilter.h> #include <SkGradientShader.h> +#include <SkHighContrastFilter.h> #include <SkPaint.h> #include <SkShader.h> +#include <log/log.h> #include <algorithm> #include <cmath> -#include <log/log.h> -#include <SkHighContrastFilter.h> +#include "Properties.h" +#include "utils/Color.h" namespace android::uirenderer { @@ -82,27 +83,21 @@ static void applyColorTransform(ColorTransform transform, SkPaint& paint) { paint.setColor(newColor); if (paint.getShader()) { - SkShader::GradientInfo info; + SkAndroidFrameworkUtils::LinearGradientInfo info; std::array<SkColor, 10> _colorStorage; std::array<SkScalar, _colorStorage.size()> _offsetStorage; info.fColorCount = _colorStorage.size(); info.fColors = _colorStorage.data(); info.fColorOffsets = _offsetStorage.data(); - SkShader::GradientType type = paint.getShader()->asAGradient(&info); - - if (info.fColorCount <= 10) { - switch (type) { - case SkShader::kLinear_GradientType: - for (int i = 0; i < info.fColorCount; i++) { - info.fColors[i] = transformColor(transform, info.fColors[i]); - } - paint.setShader(SkGradientShader::MakeLinear(info.fPoint, info.fColors, - info.fColorOffsets, info.fColorCount, - info.fTileMode, info.fGradientFlags, nullptr)); - break; - default:break; - } + if (SkAndroidFrameworkUtils::ShaderAsALinearGradient(paint.getShader(), &info) && + info.fColorCount <= _colorStorage.size()) { + for (int i = 0; i < info.fColorCount; i++) { + info.fColors[i] = transformColor(transform, info.fColors[i]); + } + paint.setShader(SkGradientShader::MakeLinear( + info.fPoints, info.fColors, info.fColorOffsets, info.fColorCount, + info.fTileMode, info.fGradientFlags, nullptr)); } } |