@@ -24,54 +24,59 @@ static void YGTransferLayoutDirection(YGNodeRef node, alias_ref<jobject> javaNod
2424}
2525
2626static void YGTransferLayoutOutputsRecursive (YGNodeRef root) {
27- if (auto obj = YGNodeJobject (root)->lockLocal ()) {
28- static auto widthField = obj->getClass ()->getField <jfloat>(" mWidth" );
29- static auto heightField = obj->getClass ()->getField <jfloat>(" mHeight" );
30- static auto leftField = obj->getClass ()->getField <jfloat>(" mLeft" );
31- static auto topField = obj->getClass ()->getField <jfloat>(" mTop" );
32-
33- static auto marginLeftField = obj->getClass ()->getField <jfloat>(" mMarginLeft" );
34- static auto marginTopField = obj->getClass ()->getField <jfloat>(" mMarginTop" );
35- static auto marginRightField = obj->getClass ()->getField <jfloat>(" mMarginRight" );
36- static auto marginBottomField = obj->getClass ()->getField <jfloat>(" mMarginBottom" );
37-
38- static auto paddingLeftField = obj->getClass ()->getField <jfloat>(" mPaddingLeft" );
39- static auto paddingTopField = obj->getClass ()->getField <jfloat>(" mPaddingTop" );
40- static auto paddingRightField = obj->getClass ()->getField <jfloat>(" mPaddingRight" );
41- static auto paddingBottomField = obj->getClass ()->getField <jfloat>(" mPaddingBottom" );
42-
43- static auto borderLeftField = obj->getClass ()->getField <jfloat>(" mBorderLeft" );
44- static auto borderTopField = obj->getClass ()->getField <jfloat>(" mBorderTop" );
45- static auto borderRightField = obj->getClass ()->getField <jfloat>(" mBorderRight" );
46- static auto borderBottomField = obj->getClass ()->getField <jfloat>(" mBorderBottom" );
47-
48- obj->setFieldValue (widthField, YGNodeLayoutGetWidth (root));
49- obj->setFieldValue (heightField, YGNodeLayoutGetHeight (root));
50- obj->setFieldValue (leftField, YGNodeLayoutGetLeft (root));
51- obj->setFieldValue (topField, YGNodeLayoutGetTop (root));
52-
53- obj->setFieldValue (marginLeftField, YGNodeLayoutGetMargin (root, YGEdgeLeft));
54- obj->setFieldValue (marginTopField, YGNodeLayoutGetMargin (root, YGEdgeTop));
55- obj->setFieldValue (marginRightField, YGNodeLayoutGetMargin (root, YGEdgeRight));
56- obj->setFieldValue (marginBottomField, YGNodeLayoutGetMargin (root, YGEdgeBottom));
57-
58- obj->setFieldValue (paddingLeftField, YGNodeLayoutGetPadding (root, YGEdgeLeft));
59- obj->setFieldValue (paddingTopField, YGNodeLayoutGetPadding (root, YGEdgeTop));
60- obj->setFieldValue (paddingRightField, YGNodeLayoutGetPadding (root, YGEdgeRight));
61- obj->setFieldValue (paddingBottomField, YGNodeLayoutGetPadding (root, YGEdgeBottom));
62-
63- obj->setFieldValue (borderLeftField, YGNodeLayoutGetBorder (root, YGEdgeLeft));
64- obj->setFieldValue (borderTopField, YGNodeLayoutGetBorder (root, YGEdgeTop));
65- obj->setFieldValue (borderRightField, YGNodeLayoutGetBorder (root, YGEdgeRight));
66- obj->setFieldValue (borderBottomField, YGNodeLayoutGetBorder (root, YGEdgeBottom));
67-
68- YGTransferLayoutDirection (root, obj);
69-
70- for (uint32_t i = 0 ; i < YGNodeGetChildCount (root); i++) {
71- YGTransferLayoutOutputsRecursive (YGNodeGetChild (root, i));
27+ if (YGNodeGetHasNewLayout (root)){
28+ if (auto obj = YGNodeJobject (root)->lockLocal ()) {
29+ static auto widthField = obj->getClass ()->getField <jfloat>(" mWidth" );
30+ static auto heightField = obj->getClass ()->getField <jfloat>(" mHeight" );
31+ static auto leftField = obj->getClass ()->getField <jfloat>(" mLeft" );
32+ static auto topField = obj->getClass ()->getField <jfloat>(" mTop" );
33+
34+ static auto marginLeftField = obj->getClass ()->getField <jfloat>(" mMarginLeft" );
35+ static auto marginTopField = obj->getClass ()->getField <jfloat>(" mMarginTop" );
36+ static auto marginRightField = obj->getClass ()->getField <jfloat>(" mMarginRight" );
37+ static auto marginBottomField = obj->getClass ()->getField <jfloat>(" mMarginBottom" );
38+
39+ static auto paddingLeftField = obj->getClass ()->getField <jfloat>(" mPaddingLeft" );
40+ static auto paddingTopField = obj->getClass ()->getField <jfloat>(" mPaddingTop" );
41+ static auto paddingRightField = obj->getClass ()->getField <jfloat>(" mPaddingRight" );
42+ static auto paddingBottomField = obj->getClass ()->getField <jfloat>(" mPaddingBottom" );
43+
44+ static auto borderLeftField = obj->getClass ()->getField <jfloat>(" mBorderLeft" );
45+ static auto borderTopField = obj->getClass ()->getField <jfloat>(" mBorderTop" );
46+ static auto borderRightField = obj->getClass ()->getField <jfloat>(" mBorderRight" );
47+ static auto borderBottomField = obj->getClass ()->getField <jfloat>(" mBorderBottom" );
48+
49+ static auto hasNewLayoutField = obj->getClass ()->getField <jboolean>(" mHasNewLayout" );
50+
51+ obj->setFieldValue (widthField, YGNodeLayoutGetWidth (root));
52+ obj->setFieldValue (heightField, YGNodeLayoutGetHeight (root));
53+ obj->setFieldValue (leftField, YGNodeLayoutGetLeft (root));
54+ obj->setFieldValue (topField, YGNodeLayoutGetTop (root));
55+
56+ obj->setFieldValue (marginLeftField, YGNodeLayoutGetMargin (root, YGEdgeLeft));
57+ obj->setFieldValue (marginTopField, YGNodeLayoutGetMargin (root, YGEdgeTop));
58+ obj->setFieldValue (marginRightField, YGNodeLayoutGetMargin (root, YGEdgeRight));
59+ obj->setFieldValue (marginBottomField, YGNodeLayoutGetMargin (root, YGEdgeBottom));
60+
61+ obj->setFieldValue (paddingLeftField, YGNodeLayoutGetPadding (root, YGEdgeLeft));
62+ obj->setFieldValue (paddingTopField, YGNodeLayoutGetPadding (root, YGEdgeTop));
63+ obj->setFieldValue (paddingRightField, YGNodeLayoutGetPadding (root, YGEdgeRight));
64+ obj->setFieldValue (paddingBottomField, YGNodeLayoutGetPadding (root, YGEdgeBottom));
65+
66+ obj->setFieldValue (borderLeftField, YGNodeLayoutGetBorder (root, YGEdgeLeft));
67+ obj->setFieldValue (borderTopField, YGNodeLayoutGetBorder (root, YGEdgeTop));
68+ obj->setFieldValue (borderRightField, YGNodeLayoutGetBorder (root, YGEdgeRight));
69+ obj->setFieldValue (borderBottomField, YGNodeLayoutGetBorder (root, YGEdgeBottom));
70+
71+ obj->setFieldValue <jboolean>(hasNewLayoutField, true );
72+ YGTransferLayoutDirection (root, obj);
73+ YGNodeSetHasNewLayout (root, false );
74+ for (uint32_t i = 0 ; i < YGNodeGetChildCount (root); i++) {
75+ YGTransferLayoutOutputsRecursive (YGNodeGetChild (root, i));
76+ }
77+ } else {
78+ YGLog (YGLogLevelError, " Java YGNode was GCed during layout calculation\n " );
7279 }
73- } else {
74- YGLog (YGLogLevelError, " Java YGNode was GCed during layout calculation\n " );
7580 }
7681}
7782
@@ -242,14 +247,6 @@ void jni_YGNodeSetHasBaselineFunc(alias_ref<jobject>,
242247 hasBaselineFunc ? YGJNIBaselineFunc : NULL );
243248}
244249
245- jboolean jni_YGNodeHasNewLayout (alias_ref<jobject>, jlong nativePointer) {
246- return (jboolean) YGNodeGetHasNewLayout (_jlong2YGNodeRef (nativePointer));
247- }
248-
249- void jni_YGNodeMarkLayoutSeen (alias_ref<jobject>, jlong nativePointer) {
250- YGNodeSetHasNewLayout (_jlong2YGNodeRef (nativePointer), false );
251- }
252-
253250void jni_YGNodeCopyStyle (alias_ref<jobject>, jlong dstNativePointer, jlong srcNativePointer) {
254251 YGNodeCopyStyle (_jlong2YGNodeRef (dstNativePointer), _jlong2YGNodeRef (srcNativePointer));
255252}
@@ -403,10 +400,8 @@ jint JNI_OnLoad(JavaVM *vm, void *) {
403400 YGMakeNativeMethod (jni_YGNodeInsertChild),
404401 YGMakeNativeMethod (jni_YGNodeRemoveChild),
405402 YGMakeNativeMethod (jni_YGNodeCalculateLayout),
406- YGMakeNativeMethod (jni_YGNodeHasNewLayout),
407403 YGMakeNativeMethod (jni_YGNodeMarkDirty),
408404 YGMakeNativeMethod (jni_YGNodeIsDirty),
409- YGMakeNativeMethod (jni_YGNodeMarkLayoutSeen),
410405 YGMakeNativeMethod (jni_YGNodeSetHasMeasureFunc),
411406 YGMakeNativeMethod (jni_YGNodeSetHasBaselineFunc),
412407 YGMakeNativeMethod (jni_YGNodeCopyStyle),
0 commit comments