Loading graphics/java/android/graphics/RecordingCanvas.java +23 −0 Original line number Diff line number Diff line Loading @@ -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 * Loading Loading @@ -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 Loading graphics/java/android/graphics/RuntimeShader.java +4 −0 Original line number Diff line number Diff line Loading @@ -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); Loading libs/hwui/SkiaCanvas.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -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 Loading libs/hwui/SkiaCanvas.h +6 −0 Original line number Diff line number Diff line Loading @@ -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; Loading libs/hwui/canvas/CanvasOpTypes.h +1 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ enum class CanvasOpType : int8_t { DrawRoundRectProperty, DrawDoubleRoundRect, DrawCircleProperty, DrawRippleProperty, DrawCircle, DrawOval, DrawArc, Loading Loading
graphics/java/android/graphics/RecordingCanvas.java +23 −0 Original line number Diff line number Diff line Loading @@ -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 * Loading Loading @@ -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 Loading
graphics/java/android/graphics/RuntimeShader.java +4 −0 Original line number Diff line number Diff line Loading @@ -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); Loading
libs/hwui/SkiaCanvas.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
libs/hwui/SkiaCanvas.h +6 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
libs/hwui/canvas/CanvasOpTypes.h +1 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ enum class CanvasOpType : int8_t { DrawRoundRectProperty, DrawDoubleRoundRect, DrawCircleProperty, DrawRippleProperty, DrawCircle, DrawOval, DrawArc, Loading