mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-02-06 09:17:55 +08:00
Revert D2679408 (Only send layout update operation to nativehierarchymanager when layout actually changes)
Reviewed By: andreicoman11 Differential Revision: D2712224 fb-gh-sync-id: e6aebe6fcf54e9f36cac092cab801bb97a65dbfd
This commit is contained in:
committed by
facebook-github-bot-7
parent
30a5eb51f8
commit
f69ac1eaef
@@ -18,7 +18,6 @@ import com.facebook.csslayout.CSSNode;
|
||||
import com.facebook.infer.annotation.Assertions;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.bridge.ReadableMapKeySetIterator;
|
||||
import com.facebook.react.uimanager.events.EventDispatcher;
|
||||
|
||||
/**
|
||||
* Base node class for representing virtual tree of React nodes. Shadow nodes are used primarily
|
||||
@@ -203,37 +202,18 @@ public class ReactShadowNode extends CSSNode {
|
||||
float absoluteX,
|
||||
float absoluteY,
|
||||
UIViewOperationQueue uiViewOperationQueue,
|
||||
NativeViewHierarchyOptimizer nativeViewHierarchyOptimizer,
|
||||
EventDispatcher eventDispatcher) {
|
||||
NativeViewHierarchyOptimizer nativeViewHierarchyOptimizer) {
|
||||
if (mNodeUpdated) {
|
||||
onCollectExtraUpdates(uiViewOperationQueue);
|
||||
}
|
||||
|
||||
if (hasNewLayout()) {
|
||||
float absoluteLeft = Math.round(absoluteX + getLayoutX());
|
||||
float absoluteTop = Math.round(absoluteY + getLayoutY());
|
||||
float absoluteRight = Math.round(absoluteX + getLayoutX() + getLayoutWidth());
|
||||
float absoluteBottom = Math.round(absoluteY + getLayoutY() + getLayoutHeight());
|
||||
// If the layout didn't change this should calculate exactly same values, it's fine to compare
|
||||
// floats with "==" in this case
|
||||
if (absoluteLeft != mAbsoluteLeft || absoluteTop != mAbsoluteTop ||
|
||||
absoluteRight != mAbsoluteRight || absoluteBottom != mAbsoluteBottom) {
|
||||
mAbsoluteLeft = absoluteLeft;
|
||||
mAbsoluteTop = absoluteTop;
|
||||
mAbsoluteRight = absoluteRight;
|
||||
mAbsoluteBottom = absoluteBottom;
|
||||
mAbsoluteLeft = Math.round(absoluteX + getLayoutX());
|
||||
mAbsoluteTop = Math.round(absoluteY + getLayoutY());
|
||||
mAbsoluteRight = Math.round(absoluteX + getLayoutX() + getLayoutWidth());
|
||||
mAbsoluteBottom = Math.round(absoluteY + getLayoutY() + getLayoutHeight());
|
||||
|
||||
nativeViewHierarchyOptimizer.handleUpdateLayout(this);
|
||||
if (mShouldNotifyOnLayout) {
|
||||
eventDispatcher.dispatchEvent(
|
||||
OnLayoutEvent.obtain(
|
||||
getReactTag(),
|
||||
getScreenX(),
|
||||
getScreenY(),
|
||||
getScreenWidth(),
|
||||
getScreenHeight()));
|
||||
}
|
||||
}
|
||||
nativeViewHierarchyOptimizer.handleUpdateLayout(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -284,6 +264,10 @@ public class ReactShadowNode extends CSSNode {
|
||||
mShouldNotifyOnLayout = shouldNotifyOnLayout;
|
||||
}
|
||||
|
||||
/* package */ boolean shouldNotifyOnLayout() {
|
||||
return mShouldNotifyOnLayout;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a child that the native view hierarchy will have at this index in the native view
|
||||
* corresponding to this node.
|
||||
|
||||
@@ -698,8 +698,18 @@ public class UIImplementation {
|
||||
absoluteX,
|
||||
absoluteY,
|
||||
mOperationsQueue,
|
||||
mNativeViewHierarchyOptimizer,
|
||||
eventDispatcher);
|
||||
mNativeViewHierarchyOptimizer);
|
||||
|
||||
// notify JS about layout event if requested
|
||||
if (cssNode.shouldNotifyOnLayout()) {
|
||||
eventDispatcher.dispatchEvent(
|
||||
OnLayoutEvent.obtain(
|
||||
tag,
|
||||
cssNode.getScreenX(),
|
||||
cssNode.getScreenY(),
|
||||
cssNode.getScreenWidth(),
|
||||
cssNode.getScreenHeight()));
|
||||
}
|
||||
}
|
||||
cssNode.markUpdateSeen();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user