Skip to content

Commit

Permalink
Fix bug related to removeClippedSubviews and view collapsing.
Browse files Browse the repository at this point in the history
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 facebook#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 5f4390b
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 5f4390b

Please sign in to comment.