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

Commit 6fb0f1a3 authored by Nader Jawad's avatar Nader Jawad Committed by Android (Google) Code Review
Browse files

Merge "Create wrapper around Shader native implementation"

parents a7f11e80 fc42a99e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3111,7 +3111,7 @@ public class Paint {
    @CriticalNative
    private static native boolean nGetFillPath(long paintPtr, long src, long dst);
    @CriticalNative
    private static native long nSetShader(long paintPtr, long shader);
    private static native void nSetShader(long paintPtr, long shader);
    @CriticalNative
    private static native long nSetColorFilter(long paintPtr, long filter);
    @CriticalNative
+7 −0
Original line number Diff line number Diff line
@@ -462,6 +462,13 @@ cc_defaults {
        "RenderNode.cpp",
        "RenderProperties.cpp",
        "RootRenderNode.cpp",
        "shader/Shader.cpp",
        "shader/BitmapShader.cpp",
        "shader/ComposeShader.cpp",
        "shader/LinearGradientShader.cpp",
        "shader/RadialGradientShader.cpp",
        "shader/RuntimeShader.cpp",
        "shader/SweepGradientShader.cpp",
        "SkiaCanvas.cpp",
        "VectorDrawable.cpp",
    ],
+6 −1
Original line number Diff line number Diff line
@@ -42,6 +42,8 @@
#include <SkTextBlob.h>
#include <SkVertices.h>

#include <shader/BitmapShader.h>

#include <memory>
#include <optional>
#include <utility>
@@ -49,6 +51,7 @@
namespace android {

using uirenderer::PaintUtils;
using uirenderer::BitmapShader;

Canvas* Canvas::create_canvas(const SkBitmap& bitmap) {
    return new SkiaCanvas(bitmap);
@@ -681,7 +684,9 @@ void SkiaCanvas::drawBitmapMesh(Bitmap& bitmap, int meshWidth, int meshHeight,
    if (paint) {
        pnt = *paint;
    }
    pnt.setShader(bitmap.makeImage()->makeShader());

    pnt.setShader(sk_ref_sp(new BitmapShader(
            bitmap.makeImage(), SkTileMode::kClamp, SkTileMode::kClamp, nullptr)));
    auto v = builder.detach();
    apply_looper(&pnt, [&](const SkPaint& p) {
        mCanvas->drawVertices(v, SkBlendMode::kModulate, p);
+3 −4
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@
#include "PathParser.h"
#include "SkColorFilter.h"
#include "SkImageInfo.h"
#include "SkShader.h"
#include "hwui/Paint.h"

#ifdef __ANDROID__
@@ -159,10 +158,10 @@ void FullPath::draw(SkCanvas* outCanvas, bool useStagingData) {

    // Draw path's fill, if fill color or gradient is valid
    bool needsFill = false;
    SkPaint paint;
    Paint paint;
    if (properties.getFillGradient() != nullptr) {
        paint.setColor(applyAlpha(SK_ColorBLACK, properties.getFillAlpha()));
        paint.setShader(sk_sp<SkShader>(SkSafeRef(properties.getFillGradient())));
        paint.setShader(sk_sp<Shader>(SkSafeRef(properties.getFillGradient())));
        needsFill = true;
    } else if (properties.getFillColor() != SK_ColorTRANSPARENT) {
        paint.setColor(applyAlpha(properties.getFillColor(), properties.getFillAlpha()));
@@ -179,7 +178,7 @@ void FullPath::draw(SkCanvas* outCanvas, bool useStagingData) {
    bool needsStroke = false;
    if (properties.getStrokeGradient() != nullptr) {
        paint.setColor(applyAlpha(SK_ColorBLACK, properties.getStrokeAlpha()));
        paint.setShader(sk_sp<SkShader>(SkSafeRef(properties.getStrokeGradient())));
        paint.setShader(sk_sp<Shader>(SkSafeRef(properties.getStrokeGradient())));
        needsStroke = true;
    } else if (properties.getStrokeColor() != SK_ColorTRANSPARENT) {
        paint.setColor(applyAlpha(properties.getStrokeColor(), properties.getStrokeAlpha()));
+7 −7
Original line number Diff line number Diff line
@@ -31,8 +31,8 @@
#include <SkPath.h>
#include <SkPathMeasure.h>
#include <SkRect.h>
#include <SkShader.h>
#include <SkSurface.h>
#include <shader/Shader.h>

#include <cutils/compiler.h>
#include <stddef.h>
@@ -227,20 +227,20 @@ public:
            strokeGradient = prop.strokeGradient;
            onPropertyChanged();
        }
        void setFillGradient(SkShader* gradient) {
        void setFillGradient(Shader* gradient) {
            if (fillGradient.get() != gradient) {
                fillGradient = sk_ref_sp(gradient);
                onPropertyChanged();
            }
        }
        void setStrokeGradient(SkShader* gradient) {
        void setStrokeGradient(Shader* gradient) {
            if (strokeGradient.get() != gradient) {
                strokeGradient = sk_ref_sp(gradient);
                onPropertyChanged();
            }
        }
        SkShader* getFillGradient() const { return fillGradient.get(); }
        SkShader* getStrokeGradient() const { return strokeGradient.get(); }
        Shader* getFillGradient() const { return fillGradient.get(); }
        Shader* getStrokeGradient() const { return strokeGradient.get(); }
        float getStrokeWidth() const { return mPrimitiveFields.strokeWidth; }
        void setStrokeWidth(float strokeWidth) {
            VD_SET_PRIMITIVE_FIELD_AND_NOTIFY(strokeWidth, strokeWidth);
@@ -320,8 +320,8 @@ public:
            count,
        };
        PrimitiveFields mPrimitiveFields;
        sk_sp<SkShader> fillGradient;
        sk_sp<SkShader> strokeGradient;
        sk_sp<Shader> fillGradient;
        sk_sp<Shader> strokeGradient;
    };

    // Called from UI thread
Loading