mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-28 12:15:37 +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.infer.annotation.Assertions;
|
||||||
import com.facebook.react.bridge.ReadableMap;
|
import com.facebook.react.bridge.ReadableMap;
|
||||||
import com.facebook.react.bridge.ReadableMapKeySetIterator;
|
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
|
* 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 absoluteX,
|
||||||
float absoluteY,
|
float absoluteY,
|
||||||
UIViewOperationQueue uiViewOperationQueue,
|
UIViewOperationQueue uiViewOperationQueue,
|
||||||
NativeViewHierarchyOptimizer nativeViewHierarchyOptimizer,
|
NativeViewHierarchyOptimizer nativeViewHierarchyOptimizer) {
|
||||||
EventDispatcher eventDispatcher) {
|
|
||||||
if (mNodeUpdated) {
|
if (mNodeUpdated) {
|
||||||
onCollectExtraUpdates(uiViewOperationQueue);
|
onCollectExtraUpdates(uiViewOperationQueue);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasNewLayout()) {
|
if (hasNewLayout()) {
|
||||||
float absoluteLeft = Math.round(absoluteX + getLayoutX());
|
mAbsoluteLeft = Math.round(absoluteX + getLayoutX());
|
||||||
float absoluteTop = Math.round(absoluteY + getLayoutY());
|
mAbsoluteTop = Math.round(absoluteY + getLayoutY());
|
||||||
float absoluteRight = Math.round(absoluteX + getLayoutX() + getLayoutWidth());
|
mAbsoluteRight = Math.round(absoluteX + getLayoutX() + getLayoutWidth());
|
||||||
float absoluteBottom = Math.round(absoluteY + getLayoutY() + getLayoutHeight());
|
mAbsoluteBottom = 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;
|
|
||||||
|
|
||||||
nativeViewHierarchyOptimizer.handleUpdateLayout(this);
|
nativeViewHierarchyOptimizer.handleUpdateLayout(this);
|
||||||
if (mShouldNotifyOnLayout) {
|
|
||||||
eventDispatcher.dispatchEvent(
|
|
||||||
OnLayoutEvent.obtain(
|
|
||||||
getReactTag(),
|
|
||||||
getScreenX(),
|
|
||||||
getScreenY(),
|
|
||||||
getScreenWidth(),
|
|
||||||
getScreenHeight()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -284,6 +264,10 @@ public class ReactShadowNode extends CSSNode {
|
|||||||
mShouldNotifyOnLayout = shouldNotifyOnLayout;
|
mShouldNotifyOnLayout = shouldNotifyOnLayout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* package */ boolean shouldNotifyOnLayout() {
|
||||||
|
return mShouldNotifyOnLayout;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a child that the native view hierarchy will have at this index in the native view
|
* Adds a child that the native view hierarchy will have at this index in the native view
|
||||||
* corresponding to this node.
|
* corresponding to this node.
|
||||||
|
|||||||
@@ -698,8 +698,18 @@ public class UIImplementation {
|
|||||||
absoluteX,
|
absoluteX,
|
||||||
absoluteY,
|
absoluteY,
|
||||||
mOperationsQueue,
|
mOperationsQueue,
|
||||||
mNativeViewHierarchyOptimizer,
|
mNativeViewHierarchyOptimizer);
|
||||||
eventDispatcher);
|
|
||||||
|
// 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();
|
cssNode.markUpdateSeen();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user