From b6dc9587e61035f812b8be5bb47c79bd133c70b7 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Mon, 10 Jun 2019 01:43:25 -0700 Subject: [PATCH] add node layout event and pass it java layer Summary: Listen to NodeLayout event and passes this event callback to java layer along with the information whether layout or measure was done in this pass Reviewed By: davidaurelio Differential Revision: D15696021 fbshipit-source-id: 8c5ca69330a9baca26b77052d4965cc67fe97c75 --- .../src/main/java/com/facebook/yoga/YogaEventListener.java | 2 ++ ReactCommon/yoga/yoga/Yoga.cpp | 2 +- ReactCommon/yoga/yoga/event/event.h | 6 ++++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/yoga/YogaEventListener.java b/ReactAndroid/src/main/java/com/facebook/yoga/YogaEventListener.java index 97791224577..cc7e9ebd0da 100644 --- a/ReactAndroid/src/main/java/com/facebook/yoga/YogaEventListener.java +++ b/ReactAndroid/src/main/java/com/facebook/yoga/YogaEventListener.java @@ -12,4 +12,6 @@ public interface YogaEventListener { void onNodeMeasure(YogaNode node); + void onNodeLayout(YogaNode node, boolean performLayout); + } diff --git a/ReactCommon/yoga/yoga/Yoga.cpp b/ReactCommon/yoga/yoga/Yoga.cpp index c46104be1d3..6c739a069e0 100644 --- a/ReactCommon/yoga/yoga/Yoga.cpp +++ b/ReactCommon/yoga/yoga/Yoga.cpp @@ -3670,7 +3670,7 @@ bool YGLayoutNodeInternal( YGMarkerLayoutData& layoutMarkerData, void* const layoutContext) { #ifdef YG_ENABLE_EVENTS - Event::publish(node); + Event::publish(node, {performLayout, layoutContext}); #endif YGLayout* layout = &node->getLayout(); diff --git a/ReactCommon/yoga/yoga/event/event.h b/ReactCommon/yoga/yoga/event/event.h index bff8dbfd895..9dcd73b6a0f 100644 --- a/ReactCommon/yoga/yoga/event/event.h +++ b/ReactCommon/yoga/yoga/event/event.h @@ -82,5 +82,11 @@ struct Event::TypedData { void* layoutContext; }; +template <> +struct Event::TypedData { + bool performLayout; + void* layoutContext; +}; + } // namespace yoga } // namespace facebook