From 5200ea8a1aca95651f1095f84c965dc49a280085 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Tue, 30 Apr 2019 23:46:21 -0700 Subject: [PATCH] Expose first implementation of the legacy method UIManager.measureInWindow on Fabric Summary: This diff exposes the Legacy method UIManager.measureInWindow as part of Fabric Reviewed By: shergin Differential Revision: D15110795 fbshipit-source-id: 2b4bf47452f7272fd3edc4e580e65ae7ec2f2622 --- .../fabric/uimanager/UIManagerBinding.cpp | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/ReactCommon/fabric/uimanager/UIManagerBinding.cpp b/ReactCommon/fabric/uimanager/UIManagerBinding.cpp index 3807b4929..afcb6aff7 100644 --- a/ReactCommon/fabric/uimanager/UIManagerBinding.cpp +++ b/ReactCommon/fabric/uimanager/UIManagerBinding.cpp @@ -350,6 +350,33 @@ jsi::Value UIManagerBinding::get( }); } + if (methodName == "measureInWindow") { + return jsi::Function::createFromHostFunction( + runtime, + name, + 2, + [&uiManager]( + jsi::Runtime &runtime, + const jsi::Value &thisValue, + const jsi::Value *arguments, + size_t count) -> jsi::Value { + auto layoutMetrics = uiManager.getRelativeLayoutMetrics( + *shadowNodeFromValue(runtime, arguments[0]), nullptr); + + auto onSuccessFunction = + arguments[1].getObject(runtime).getFunction(runtime); + auto frame = layoutMetrics.frame; + + onSuccessFunction.call( + runtime, + {jsi::Value{runtime, (double)frame.origin.x}, + jsi::Value{runtime, (double)frame.origin.y}, + jsi::Value{runtime, (double)frame.size.width}, + jsi::Value{runtime, (double)frame.size.height}}); + return jsi::Value::undefined(); + }); + } + if (methodName == "setNativeProps") { return jsi::Function::createFromHostFunction( runtime,