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

Commit a6a7ea7e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Initial framework needed to draw circle with RuntimeShader."

parents 29099129 df301aaa
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -203,6 +203,26 @@ public final class RecordingCanvas extends BaseRecordingCanvas {
                radius.getNativeContainer(), paint.getNativeContainer());
    }

    /**
     * Draws a ripple
     *
     * @param cx
     * @param cy
     * @param radius
     * @param paint
     * @param progress
     * @param shader
     *
     * @hide
     */
    public void drawRipple(CanvasProperty<Float> cx, CanvasProperty<Float> cy,
            CanvasProperty<Float> radius, CanvasProperty<Paint> paint,
            CanvasProperty<Float> progress, RuntimeShader shader) {
        nDrawRipple(mNativeCanvasWrapper, cx.getNativeContainer(), cy.getNativeContainer(),
                radius.getNativeContainer(), paint.getNativeContainer(),
                progress.getNativeContainer(), shader.getNativeShaderFactory());
    }

    /**
     * Draws a round rect
     *
@@ -260,6 +280,9 @@ public final class RecordingCanvas extends BaseRecordingCanvas {
    private static native void nDrawCircle(long renderer, long propCx,
            long propCy, long propRadius, long propPaint);
    @CriticalNative
    private static native void nDrawRipple(long renderer, long propCx, long propCy, long propRadius,
            long propPaint, long propProgress, long runtimeEffect);
    @CriticalNative
    private static native void nDrawRoundRect(long renderer, long propLeft, long propTop,
            long propRight, long propBottom, long propRx, long propRy, long propPaint);
    @CriticalNative
+4 −0
Original line number Diff line number Diff line
@@ -115,6 +115,10 @@ public class RuntimeShader extends Shader {
                nativeShaders, colorSpace().getNativeInstance(), mIsOpaque);
    }

    public long getNativeShaderFactory() {
        return mNativeInstanceRuntimeShaderFactory;
    }

    private static native long nativeCreate(long shaderFactory, long matrix, byte[] inputs,
            long[] shaderInputs, long colorSpaceHandle, boolean isOpaque);

+12 −0
Original line number Diff line number Diff line
@@ -814,6 +814,18 @@ void SkiaCanvas::drawCircle(uirenderer::CanvasPropertyPrimitive* x,
    mCanvas->drawDrawable(drawable.get());
}

void SkiaCanvas::drawRipple(uirenderer::CanvasPropertyPrimitive* x,
                            uirenderer::CanvasPropertyPrimitive* y,
                            uirenderer::CanvasPropertyPrimitive* radius,
                            uirenderer::CanvasPropertyPaint* paint,
                            uirenderer::CanvasPropertyPrimitive* progress,
                            sk_sp<SkRuntimeEffect> runtimeEffect) {
    sk_sp<uirenderer::skiapipeline::AnimatedRipple> drawable(
            new uirenderer::skiapipeline::AnimatedRipple(x, y, radius, paint, progress,
                                                         runtimeEffect));
    mCanvas->drawDrawable(drawable.get());
}

void SkiaCanvas::drawPicture(const SkPicture& picture) {
    // TODO: Change to mCanvas->drawPicture()? SkCanvas::drawPicture seems to be
    // where the logic is for playback vs. ref picture. Using picture.playback here
+6 −0
Original line number Diff line number Diff line
@@ -147,6 +147,12 @@ public:
                            uirenderer::CanvasPropertyPrimitive* y,
                            uirenderer::CanvasPropertyPrimitive* radius,
                            uirenderer::CanvasPropertyPaint* paint) override;
    virtual void drawRipple(uirenderer::CanvasPropertyPrimitive* x,
                            uirenderer::CanvasPropertyPrimitive* y,
                            uirenderer::CanvasPropertyPrimitive* radius,
                            uirenderer::CanvasPropertyPaint* paint,
                            uirenderer::CanvasPropertyPrimitive* progress,
                            sk_sp<SkRuntimeEffect> runtimeEffect) override;

    virtual void drawLayer(uirenderer::DeferredLayerUpdater* layerHandle) override;
    virtual void drawRenderNode(uirenderer::RenderNode* renderNode) override;
+1 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ enum class CanvasOpType : int8_t {
    DrawRoundRectProperty,
    DrawDoubleRoundRect,
    DrawCircleProperty,
    DrawRippleProperty,
    DrawCircle,
    DrawOval,
    DrawArc,
Loading