Skip to content
Permalink
Browse files

Fix bug related to removeClippedSubviews and view collapsing.

Summary:
The bug occurs for the cases when there is a nested view structure of at least two views with removeClippedSubvews enabled and with a "collapsable" view in between them that migrates from the collapsed state to non-collapsed state.

What happens in that case is that the "inner" view with "removeClippsedSubviews" gets reattached to a new parent, but we never update it's clipping rect because the update is currently only triggered for the size change (and for scroll change in case of scrollview). In the case when the view was doing some "clipping" when attached to its previous parent it needs to update its "clipping" status because the parent has change and clipping rect is calculated based on the parent clipping rect (see `ReactClippingViewGroupHelper#calculateClippingRect`).

This change triggers `updateClippingRect` when the view is attached to the window, which covers the case when it's reattached from one parent to the other.
Closes #5692

Reviewed By: svcscm

Differential Revision: D2893304

Pulled By: foghina

fb-gh-sync-id: a94ab3674adf9e496fc86dca5a430a91117f2c83
  • Loading branch information
kmagiera authored and facebook-github-bot-4 committed Feb 3, 2016
1 parent c2233ef commit 5f4390bf0364a79804747270733f8bab33b7a5c3
@@ -146,6 +146,14 @@ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
}
}

@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (mRemoveClippedSubviews) {
updateClippingRect();
}
}

@Override
public void updateClippingRect() {
if (!mRemoveClippedSubviews) {
@@ -72,6 +72,14 @@ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
}
}

@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (mRemoveClippedSubviews) {
updateClippingRect();
}
}

@Override
protected void onScrollChanged(int x, int y, int oldX, int oldY) {
super.onScrollChanged(x, y, oldX, oldY);
@@ -353,7 +353,17 @@ private void updateSubviewClipStatus(View subview) {
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
updateClippingRect();
if (mRemoveClippedSubviews) {
updateClippingRect();
}
}

@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (mRemoveClippedSubviews) {
updateClippingRect();
}
}

@Override

0 comments on commit 5f4390b

Please sign in to comment.
You can’t perform that action at this time.