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

Commit 64379f23 authored by Brian Salomon's avatar Brian Salomon Committed by Android (Google) Code Review
Browse files

Merge "Use new SkAndroidFrameworkUtils method to get linear gradient info."

parents 1178705e bb2499f2
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;
            }

        }
    }