From a48d21de6ea789ade65076fa9a254423f88097b9 Mon Sep 17 00:00:00 2001 From: Horcrux Date: Thu, 21 Apr 2016 22:09:22 +0800 Subject: [PATCH] restore clip after clip --- Example/examples/Clipping.js | 6 ++++++ .../main/java/com/horcrux/svg/RNSVGGroupShadowNode.java | 4 +--- .../main/java/com/horcrux/svg/RNSVGPathShadowNode.java | 5 +---- .../main/java/com/horcrux/svg/RNSVGTextShadowNode.java | 2 ++ .../src/main/java/com/horcrux/svg/RNSVGVirtualNode.java | 8 ++++++++ 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/Example/examples/Clipping.js b/Example/examples/Clipping.js index 3195e8a6..3c4dba0b 100644 --- a/Example/examples/Clipping.js +++ b/Example/examples/Clipping.js @@ -36,6 +36,12 @@ class ClipPathAttr extends Component{ /> + MIN_OPACITY_FOR_DRAW) { saveAndSetupCanvas(canvas); - if (mClipPath != null) { - canvas.clipPath(mClipPath, Region.Op.REPLACE); - } + clip(canvas, paint); for (int i = 0; i < getChildCount(); i++) { RNSVGVirtualNode child = (RNSVGVirtualNode) getChildAt(i); diff --git a/android/src/main/java/com/horcrux/svg/RNSVGPathShadowNode.java b/android/src/main/java/com/horcrux/svg/RNSVGPathShadowNode.java index cb227d46..a639141d 100644 --- a/android/src/main/java/com/horcrux/svg/RNSVGPathShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/RNSVGPathShadowNode.java @@ -130,10 +130,7 @@ public class RNSVGPathShadowNode extends RNSVGVirtualNode { "Paths should have a valid path (d) prop"); } - if (mClipPath != null) { - canvas.clipPath(mClipPath, Region.Op.REPLACE); - - } + clip(canvas, paint); if (setupFillPaint(paint, opacity)) { canvas.drawPath(mPath, paint); diff --git a/android/src/main/java/com/horcrux/svg/RNSVGTextShadowNode.java b/android/src/main/java/com/horcrux/svg/RNSVGTextShadowNode.java index e0e96ca6..7bf1c8cb 100644 --- a/android/src/main/java/com/horcrux/svg/RNSVGTextShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/RNSVGTextShadowNode.java @@ -71,6 +71,8 @@ public class RNSVGTextShadowNode extends RNSVGPathShadowNode { // only set up the canvas if we have something to draw saveAndSetupCanvas(canvas); + clip(canvas, paint); + String[] lines = new String[linesProp.size()]; for (int i = 0; i < lines.length; i++) { lines[i] = linesProp.getString(i); diff --git a/android/src/main/java/com/horcrux/svg/RNSVGVirtualNode.java b/android/src/main/java/com/horcrux/svg/RNSVGVirtualNode.java index 9e1b4f03..fe01602e 100644 --- a/android/src/main/java/com/horcrux/svg/RNSVGVirtualNode.java +++ b/android/src/main/java/com/horcrux/svg/RNSVGVirtualNode.java @@ -17,6 +17,7 @@ import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; import android.graphics.RectF; +import android.graphics.Region; import android.util.Log; import com.facebook.react.bridge.JSApplicationIllegalArgumentException; @@ -206,4 +207,11 @@ public abstract class RNSVGVirtualNode extends ReactShadowNode { } return path; } + + protected void clip(Canvas canvas, Paint paint) { + if (mClipPath != null) { + canvas.clipPath(mClipPath, Region.Op.REPLACE); + canvas.saveLayer(0f, 0f, 0f, 0f, paint, Canvas.CLIP_SAVE_FLAG); + } + } }