From 0d21baf60415b8c48715e30397a0797dca1dee9d Mon Sep 17 00:00:00 2001 From: Ahmed El-Helw Date: Thu, 28 Apr 2016 10:44:32 -0700 Subject: [PATCH] Don't save matrix when using canvas.save Summary: Canvas.save by default saves both the matrix (for translations, scaling, etc) and the clip (clipRect) - in most of our cases, we really only care to save and restore the clip, not the matrix. Reviewed By: sriramramani Differential Revision: D3235698 --- .../com/facebook/react/flat/AbstractClippingDrawCommand.java | 4 +--- .../java/com/facebook/react/flat/AbstractDrawCommand.java | 2 +- .../src/main/java/com/facebook/react/flat/DrawView.java | 2 +- .../src/main/java/com/facebook/react/flat/FlatViewGroup.java | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/AbstractClippingDrawCommand.java b/ReactAndroid/src/main/java/com/facebook/react/flat/AbstractClippingDrawCommand.java index e3a4298d8..5e9dfba8b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/AbstractClippingDrawCommand.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/AbstractClippingDrawCommand.java @@ -62,8 +62,6 @@ import android.graphics.Canvas; // shows up during screenshot testing. Note that checking one side is enough, since if one side // is infinite, all sides will be infinite, since we only set infinite for all sides at the // same time - conversely, if one side is finite, all sides will be finite. - if (mNeedsClipping) { - canvas.clipRect(mClipLeft, mClipTop, mClipRight, mClipBottom); - } + canvas.clipRect(mClipLeft, mClipTop, mClipRight, mClipBottom); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/AbstractDrawCommand.java b/ReactAndroid/src/main/java/com/facebook/react/flat/AbstractDrawCommand.java index 55b03c2d4..5c7196d07 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/AbstractDrawCommand.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/AbstractDrawCommand.java @@ -31,7 +31,7 @@ import android.graphics.Canvas; public final void draw(FlatViewGroup parent, Canvas canvas) { onPreDraw(parent, canvas); if (shouldClip()) { - canvas.save(); + canvas.save(Canvas.CLIP_SAVE_FLAG); applyClipping(canvas); onDraw(canvas); canvas.restore(); diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/DrawView.java b/ReactAndroid/src/main/java/com/facebook/react/flat/DrawView.java index 350506cd3..8d46dd049 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/DrawView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/DrawView.java @@ -22,7 +22,7 @@ import android.graphics.Canvas; @Override public void draw(FlatViewGroup parent, Canvas canvas) { if (mNeedsClipping) { - canvas.save(); + canvas.save(Canvas.CLIP_SAVE_FLAG); applyClipping(canvas); parent.drawNextChild(canvas); canvas.restore(); diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatViewGroup.java b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatViewGroup.java index 5f227d568..df2e8cdd8 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatViewGroup.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatViewGroup.java @@ -346,7 +346,7 @@ import com.facebook.react.views.image.ImageLoadEvent; super.drawChild(canvas, child, getDrawingTime()); } else { // Make sure non-React Views clip properly. - canvas.save(); + canvas.save(Canvas.CLIP_SAVE_FLAG); child.getHitRect(VIEW_BOUNDS); canvas.clipRect(VIEW_BOUNDS); super.drawChild(canvas, child, getDrawingTime());