Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bb2499f2 authored by Brian Salomon's avatar Brian Salomon
Browse files

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
parent a824443a
Loading
Loading
Loading
Loading
+14 −19
Original line number Diff line number Diff line
@@ -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:
        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.fPoint, info.fColors,
                                                                 info.fColorOffsets, info.fColorCount,
            paint.setShader(SkGradientShader::MakeLinear(
                    info.fPoints, info.fColors, info.fColorOffsets, info.fColorCount,
                    info.fTileMode, info.fGradientFlags, nullptr));
                    break;
                default:break;
            }

        }
    }