From bb2499f2681a2c26a814ac391e6250ca62467c1b Mon Sep 17 00:00:00 2001 From: Brian Salomon Date: Fri, 23 Sep 2022 12:37:58 -0400 Subject: [PATCH] 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 --- libs/hwui/CanvasTransform.cpp | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/libs/hwui/CanvasTransform.cpp b/libs/hwui/CanvasTransform.cpp index d0d24a8738f4f..673041a661cee 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 #include #include +#include #include #include +#include #include #include -#include -#include +#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 _colorStorage; std::array _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)); } }