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 24961d92b2..aca4723cf8 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/AbstractDrawCommand.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/AbstractDrawCommand.java @@ -140,7 +140,7 @@ import android.graphics.Canvas; protected abstract void onDraw(Canvas canvas); protected boolean shouldClip() { - return mLeft != mClipLeft || mTop != mClipTop || mRight != mClipRight || mBottom != mClipBottom; + return mLeft < mClipLeft || mTop < mClipTop || mRight > mClipRight || mBottom > mClipBottom; } protected void onBoundsChanged() { diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTText.java b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTText.java index 8d1f643a65..4b1eb60265 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTText.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTText.java @@ -186,16 +186,8 @@ import com.facebook.react.uimanager.annotations.ReactProp; top += padding.get(Spacing.TOP); // these are actual right/bottom coordinates where this DrawCommand will draw. - float layoutRight = left + mDrawCommand.getLayoutWidth(); - float layoutBottom = top + mDrawCommand.getLayoutHeight(); - - // We need to adjust right/bottom because Layout size is in many cases different than the - // current node's size. We could use layoutRight/layoutBottom instead of taking the minumum of - // (right,layoutRight) and that would work correctly, but it will also make AbstractDrawCommand - // clip when the clipping is not really necessary (because it doesn't like draw bounds smaller - // than clip bounds). - right = Math.max(right, layoutRight); - bottom = Math.max(bottom, layoutBottom); + right = left + mDrawCommand.getLayoutWidth(); + bottom = top + mDrawCommand.getLayoutHeight(); mDrawCommand = (DrawTextLayout) mDrawCommand.updateBoundsAndFreeze( left, diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/StateBuilder.java b/ReactAndroid/src/main/java/com/facebook/react/flat/StateBuilder.java index 15e7b3d49c..f0622089df 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/StateBuilder.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/StateBuilder.java @@ -347,10 +347,10 @@ import com.facebook.react.uimanager.events.EventDispatcher; float top, float right, float bottom, - float parentClipLeft, - float parentClipTop, - float parentClipRight, - float parentClipBottom, + float clipLeft, + float clipTop, + float clipRight, + float clipBottom, boolean isAndroidView, boolean needsCustomLayoutForChildren) { if (node.hasNewLayout()) { @@ -368,20 +368,15 @@ import com.facebook.react.uimanager.events.EventDispatcher; Math.round(bottom - top))); } - float clipLeft = Math.max(left, parentClipLeft); - float clipTop = Math.max(top, parentClipTop); - float clipRight = Math.min(right, parentClipRight); - float clipBottom = Math.min(bottom, parentClipBottom); + if (node.clipToBounds()) { + clipLeft = Math.max(left, clipLeft); + clipTop = Math.max(top, clipTop); + clipRight = Math.min(right, clipRight); + clipBottom = Math.min(bottom, clipBottom); + } node.collectState(this, left, top, right, bottom, clipLeft, clipTop, clipRight, clipBottom); - if (!node.clipToBounds()) { - clipLeft = parentClipLeft; - clipTop = parentClipTop; - clipRight = parentClipRight; - clipBottom = parentClipBottom; - } - for (int i = 0, childCount = node.getChildCount(); i != childCount; ++i) { FlatShadowNode child = (FlatShadowNode) node.getChildAt(i); if (child.isVirtual()) {