Fabric: Backward-compatible behaviour of `measureInWindow` and `measure`

Summary:
Before this change, in case of incorrect measurements, Fabric's implementation of `measure` and `measureInWindow` incorrectly returned negative height and width. Now it returns zeros (as classic React Native does).

Fabric:
This does not fix `measureLayout` called for virtual nodes. This is not so trivially to fix and it will be done separately.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: JoshuaGross, yungsters, mdvacca

Differential Revision: D21433239

fbshipit-source-id: fbaf5ee35c690506822c634daac4426542c2cdcf
This commit is contained in:
Valentin Shergin 2020-05-06 15:14:02 -07:00 коммит произвёл Facebook GitHub Bot
Родитель d14b89bd8a
Коммит fa5b4c9e0c
1 изменённых файлов: 12 добавлений и 2 удалений

Просмотреть файл

@ -535,10 +535,15 @@ jsi::Value UIManagerBinding::get(
*shadowNodeFromValue(runtime, arguments[0]),
nullptr,
{/* .includeTransform = */ true});
auto frame = layoutMetrics.frame;
auto onSuccessFunction =
arguments[1].getObject(runtime).getFunction(runtime);
if (layoutMetrics == EmptyLayoutMetrics) {
onSuccessFunction.call(runtime, {0, 0, 0, 0, 0, 0});
return jsi::Value::undefined();
}
auto frame = layoutMetrics.frame;
onSuccessFunction.call(
runtime,
{0,
@ -568,8 +573,13 @@ jsi::Value UIManagerBinding::get(
auto onSuccessFunction =
arguments[1].getObject(runtime).getFunction(runtime);
auto frame = layoutMetrics.frame;
if (layoutMetrics == EmptyLayoutMetrics) {
onSuccessFunction.call(runtime, {0, 0, 0, 0});
return jsi::Value::undefined();
}
auto frame = layoutMetrics.frame;
onSuccessFunction.call(
runtime,
{jsi::Value{runtime, (double)frame.origin.x},