Loading core/java/android/view/SurfaceView.java +9 −4 Original line number Diff line number Diff line Loading @@ -33,7 +33,6 @@ import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.PorterDuff; import android.graphics.Rect; import android.graphics.Region; import android.graphics.RenderNode; Loading Loading @@ -670,10 +669,16 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall if (mClipSurfaceToBounds && mClipBounds != null) { mTmpRect.intersect(mClipBounds); } canvas.drawRoundRect(mTmpRect.left, mTmpRect.top, mTmpRect.right, mTmpRect.bottom, mCornerRadius, mCornerRadius, mRoundedViewportPaint); canvas.punchHole( mTmpRect.left, mTmpRect.top, mTmpRect.right, mTmpRect.bottom, mCornerRadius, mCornerRadius ); } else { canvas.drawColor(0, PorterDuff.Mode.CLEAR); canvas.punchHole(0f, 0f, getWidth(), getHeight(), 0f, 0f); } } Loading graphics/java/android/graphics/BaseCanvas.java +10 −0 Original line number Diff line number Diff line Loading @@ -670,6 +670,13 @@ public abstract class BaseCanvas { indices, indexOffset, indexCount, paint.getNativeInstance()); } /** * @hide */ public void punchHole(float left, float top, float right, float bottom, float rx, float ry) { nPunchHole(mNativeCanvasWrapper, left, top, right, bottom, rx, ry); } /** * @hide */ Loading Loading @@ -815,4 +822,7 @@ public abstract class BaseCanvas { private static native void nDrawTextOnPath(long nativeCanvas, String text, long nativePath, float hOffset, float vOffset, int flags, long nativePaint); private static native void nPunchHole(long renderer, float left, float top, float right, float bottom, float rx, float ry); } graphics/java/android/graphics/BaseRecordingCanvas.java +12 −0 Original line number Diff line number Diff line Loading @@ -610,6 +610,14 @@ public class BaseRecordingCanvas extends Canvas { indices, indexOffset, indexCount, paint.getNativeInstance()); } /** * @hide */ @Override public void punchHole(float left, float top, float right, float bottom, float rx, float ry) { nPunchHole(mNativeCanvasWrapper, left, top, right, bottom, rx, ry); } @FastNative private static native void nDrawBitmap(long nativeCanvas, long bitmapHandle, float left, float top, long nativePaintOrZero, int canvasDensity, int screenDensity, Loading Loading @@ -735,4 +743,8 @@ public class BaseRecordingCanvas extends Canvas { @FastNative private static native void nDrawTextOnPath(long nativeCanvas, String text, long nativePath, float hOffset, float vOffset, int flags, long nativePaint); @FastNative private static native void nPunchHole(long renderer, float left, float top, float right, float bottom, float rx, float ry); } libs/hwui/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -464,10 +464,12 @@ cc_defaults { "canvas/CanvasOpBuffer.cpp", "canvas/CanvasOpRasterizer.cpp", "effects/StretchEffect.cpp", "pipeline/skia/HolePunch.cpp", "pipeline/skia/SkiaDisplayList.cpp", "pipeline/skia/SkiaRecordingCanvas.cpp", "pipeline/skia/RenderNodeDrawable.cpp", "pipeline/skia/ReorderBarrierDrawables.cpp", "pipeline/skia/TransformCanvas.cpp", "renderthread/Frame.cpp", "renderthread/RenderTask.cpp", "renderthread/TimeLord.cpp", Loading libs/hwui/DisplayList.h +4 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,10 @@ public: return mImpl && !(mImpl->isEmpty()); } [[nodiscard]] bool hasHolePunches() const { return mImpl && mImpl->hasHolePunches(); } [[nodiscard]] bool containsProjectionReceiver() const { return mImpl && mImpl->containsProjectionReceiver(); } Loading Loading
core/java/android/view/SurfaceView.java +9 −4 Original line number Diff line number Diff line Loading @@ -33,7 +33,6 @@ import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.PorterDuff; import android.graphics.Rect; import android.graphics.Region; import android.graphics.RenderNode; Loading Loading @@ -670,10 +669,16 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall if (mClipSurfaceToBounds && mClipBounds != null) { mTmpRect.intersect(mClipBounds); } canvas.drawRoundRect(mTmpRect.left, mTmpRect.top, mTmpRect.right, mTmpRect.bottom, mCornerRadius, mCornerRadius, mRoundedViewportPaint); canvas.punchHole( mTmpRect.left, mTmpRect.top, mTmpRect.right, mTmpRect.bottom, mCornerRadius, mCornerRadius ); } else { canvas.drawColor(0, PorterDuff.Mode.CLEAR); canvas.punchHole(0f, 0f, getWidth(), getHeight(), 0f, 0f); } } Loading
graphics/java/android/graphics/BaseCanvas.java +10 −0 Original line number Diff line number Diff line Loading @@ -670,6 +670,13 @@ public abstract class BaseCanvas { indices, indexOffset, indexCount, paint.getNativeInstance()); } /** * @hide */ public void punchHole(float left, float top, float right, float bottom, float rx, float ry) { nPunchHole(mNativeCanvasWrapper, left, top, right, bottom, rx, ry); } /** * @hide */ Loading Loading @@ -815,4 +822,7 @@ public abstract class BaseCanvas { private static native void nDrawTextOnPath(long nativeCanvas, String text, long nativePath, float hOffset, float vOffset, int flags, long nativePaint); private static native void nPunchHole(long renderer, float left, float top, float right, float bottom, float rx, float ry); }
graphics/java/android/graphics/BaseRecordingCanvas.java +12 −0 Original line number Diff line number Diff line Loading @@ -610,6 +610,14 @@ public class BaseRecordingCanvas extends Canvas { indices, indexOffset, indexCount, paint.getNativeInstance()); } /** * @hide */ @Override public void punchHole(float left, float top, float right, float bottom, float rx, float ry) { nPunchHole(mNativeCanvasWrapper, left, top, right, bottom, rx, ry); } @FastNative private static native void nDrawBitmap(long nativeCanvas, long bitmapHandle, float left, float top, long nativePaintOrZero, int canvasDensity, int screenDensity, Loading Loading @@ -735,4 +743,8 @@ public class BaseRecordingCanvas extends Canvas { @FastNative private static native void nDrawTextOnPath(long nativeCanvas, String text, long nativePath, float hOffset, float vOffset, int flags, long nativePaint); @FastNative private static native void nPunchHole(long renderer, float left, float top, float right, float bottom, float rx, float ry); }
libs/hwui/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -464,10 +464,12 @@ cc_defaults { "canvas/CanvasOpBuffer.cpp", "canvas/CanvasOpRasterizer.cpp", "effects/StretchEffect.cpp", "pipeline/skia/HolePunch.cpp", "pipeline/skia/SkiaDisplayList.cpp", "pipeline/skia/SkiaRecordingCanvas.cpp", "pipeline/skia/RenderNodeDrawable.cpp", "pipeline/skia/ReorderBarrierDrawables.cpp", "pipeline/skia/TransformCanvas.cpp", "renderthread/Frame.cpp", "renderthread/RenderTask.cpp", "renderthread/TimeLord.cpp", Loading
libs/hwui/DisplayList.h +4 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,10 @@ public: return mImpl && !(mImpl->isEmpty()); } [[nodiscard]] bool hasHolePunches() const { return mImpl && mImpl->hasHolePunches(); } [[nodiscard]] bool containsProjectionReceiver() const { return mImpl && mImpl->containsProjectionReceiver(); } Loading