Revert D48712710: C++ Cleanup 3/N: Reorganize YGNode

Differential Revision:
D48712710

Original commit changeset: d28eae38469a

Original Phabricator Diff: D48712710

fbshipit-source-id: 7a10b071edcf045ce98bbf8f9deca0d0e2e80a14
This commit is contained in:
Zhiyao Zhou
2023-08-29 23:27:25 -07:00
committed by Facebook GitHub Bot
parent 6ca56e87ce
commit ea7f61a3db
31 changed files with 578 additions and 625 deletions

View File

@@ -17,7 +17,7 @@
// TODO: Reconcile missing layoutContext functionality from callbacks in the C
// API and use that
#include <yoga/node/Node.h>
#include <yoga/YGNode.h>
using namespace facebook;
using namespace facebook::yoga;
@@ -688,7 +688,7 @@ static void jni_YGNodeSetHasMeasureFuncJNI(
jobject /*obj*/,
jlong nativePointer,
jboolean hasMeasureFunc) {
static_cast<yoga::Node*>(_jlong2YGNodeRef(nativePointer))
_jlong2YGNodeRef(nativePointer)
->setMeasureFunc(hasMeasureFunc ? YGJNIMeasureFunc : nullptr);
}
@@ -715,7 +715,7 @@ static void jni_YGNodeSetHasBaselineFuncJNI(
jobject /*obj*/,
jlong nativePointer,
jboolean hasBaselineFunc) {
static_cast<yoga::Node*>(_jlong2YGNodeRef(nativePointer))
_jlong2YGNodeRef(nativePointer)
->setBaselineFunc(hasBaselineFunc ? YGJNIBaselineFunc : nullptr);
}

View File

@@ -14,12 +14,11 @@
#include "jni.h"
class PtrJNodeMapVanilla {
std::map<YGNodeConstRef, size_t> ptrsToIdxs_{};
jobjectArray javaNodes_{};
std::map<YGNodeRef, size_t> ptrsToIdxs_;
jobjectArray javaNodes_;
public:
PtrJNodeMapVanilla() = default;
PtrJNodeMapVanilla() : ptrsToIdxs_{}, javaNodes_{} {}
PtrJNodeMapVanilla(jlongArray javaNativePointers, jobjectArray javaNodes)
: javaNodes_{javaNodes} {
using namespace facebook::yoga::vanillajni;
@@ -31,11 +30,11 @@ public:
javaNativePointers, 0, nativePointersSize, nativePointers.data());
for (size_t i = 0; i < nativePointersSize; ++i) {
ptrsToIdxs_[(YGNodeConstRef) nativePointers[i]] = i;
ptrsToIdxs_[(YGNodeRef) nativePointers[i]] = i;
}
}
facebook::yoga::vanillajni::ScopedLocalRef<jobject> ref(YGNodeConstRef node) {
facebook::yoga::vanillajni::ScopedLocalRef<jobject> ref(YGNodeRef node) {
using namespace facebook::yoga::vanillajni;
JNIEnv* env = getCurrentEnv();

View File

@@ -9,6 +9,7 @@
#include <yoga/event/event.h>
#include <yoga/Yoga.h>
#include <yoga/YGEnums.h>
#include <yoga/YGNode.h>
#include <algorithm>
#include <functional>
@@ -29,7 +30,7 @@ struct TypedEventTestData<Event::LayoutPassEnd> {
};
struct EventArgs {
const YGNodeConstRef node;
const YGNode* node;
Event::Type type;
std::unique_ptr<void, std::function<void(void*)>> dataPtr;
std::unique_ptr<void, std::function<void(void*)>> eventTestDataPtr;
@@ -47,7 +48,7 @@ struct EventArgs {
class EventTest : public ::testing::Test {
ScopedEventSubscription subscription = {&EventTest::listen};
static void listen(YGNodeConstRef, Event::Type, Event::Data);
static void listen(const YGNode&, Event::Type, Event::Data);
public:
static std::vector<EventArgs> events;
@@ -283,16 +284,16 @@ TEST_F(EventTest, baseline_functions_get_wrapped) {
namespace {
template <Event::Type E>
EventArgs createArgs(YGNodeConstRef node, const Event::Data data) {
EventArgs createArgs(const YGNode& node, const Event::Data data) {
using Data = Event::TypedData<E>;
auto deleteData = [](void* x) { delete static_cast<Data*>(x); };
return {node, E, {new Data{(data.get<E>())}, deleteData}, nullptr};
return {&node, E, {new Data{(data.get<E>())}, deleteData}, nullptr};
}
template <Event::Type E>
EventArgs createArgs(
YGNodeConstRef node,
const YGNode& node,
const Event::Data data,
TypedEventTestData<E> eventTestData) {
using EventTestData = TypedEventTestData<E>;
@@ -308,10 +309,7 @@ EventArgs createArgs(
} // namespace
void EventTest::listen(
YGNodeConstRef node,
Event::Type type,
Event::Data data) {
void EventTest::listen(const YGNode& node, Event::Type type, Event::Data data) {
switch (type) {
case Event::NodeAllocation:
events.push_back(createArgs<Event::NodeAllocation>(node, data));

View File

@@ -6,6 +6,7 @@
*/
#include <gtest/gtest.h>
#include <yoga/YGNode.h>
#include <yoga/Yoga.h>
static float _baselineFunc(
@@ -196,7 +197,7 @@ TEST(YogaTest, align_baseline_parent_using_child_in_column_as_reference) {
const YGNodeRef root_child1_child1 =
createYGNode(config, YGFlexDirectionColumn, 500, 400, false);
YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);
root_child1_child1->setBaselineFunc(_baselineFunc);
YGNodeSetIsReferenceBaseline(root_child1_child1, true);
YGNodeInsertChild(root_child1, root_child1_child1, 1);
@@ -241,7 +242,7 @@ TEST(
const YGNodeRef root_child1_child1 =
createYGNode(config, YGFlexDirectionColumn, 500, 400, false);
YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);
root_child1_child1->setBaselineFunc(_baselineFunc);
YGNodeSetIsReferenceBaseline(root_child1_child1, true);
YGNodeStyleSetPadding(root_child1_child1, YGEdgeLeft, 100);
YGNodeStyleSetPadding(root_child1_child1, YGEdgeRight, 100);
@@ -294,7 +295,7 @@ TEST(
const YGNodeRef root_child1_child1 =
createYGNode(config, YGFlexDirectionColumn, 500, 400, false);
YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);
root_child1_child1->setBaselineFunc(_baselineFunc);
YGNodeSetIsReferenceBaseline(root_child1_child1, true);
YGNodeInsertChild(root_child1, root_child1_child1, 1);
@@ -343,7 +344,7 @@ TEST(
const YGNodeRef root_child1_child1 =
createYGNode(config, YGFlexDirectionColumn, 500, 400, false);
YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);
root_child1_child1->setBaselineFunc(_baselineFunc);
YGNodeSetIsReferenceBaseline(root_child1_child1, true);
YGNodeInsertChild(root_child1, root_child1_child1, 1);
@@ -388,7 +389,7 @@ TEST(
const YGNodeRef root_child1_child1 =
createYGNode(config, YGFlexDirectionColumn, 500, 400, false);
YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);
root_child1_child1->setBaselineFunc(_baselineFunc);
YGNodeSetIsReferenceBaseline(root_child1_child1, true);
YGNodeStyleSetMargin(root_child1_child1, YGEdgeLeft, 100);
YGNodeStyleSetMargin(root_child1_child1, YGEdgeRight, 100);
@@ -435,7 +436,7 @@ TEST(YogaTest, align_baseline_parent_using_child_in_row_as_reference) {
const YGNodeRef root_child1_child1 =
createYGNode(config, YGFlexDirectionColumn, 500, 400, false);
YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);
root_child1_child1->setBaselineFunc(_baselineFunc);
YGNodeSetIsReferenceBaseline(root_child1_child1, true);
YGNodeInsertChild(root_child1, root_child1_child1, 1);
@@ -480,7 +481,7 @@ TEST(
const YGNodeRef root_child1_child1 =
createYGNode(config, YGFlexDirectionColumn, 500, 400, false);
YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);
root_child1_child1->setBaselineFunc(_baselineFunc);
YGNodeSetIsReferenceBaseline(root_child1_child1, true);
YGNodeStyleSetPadding(root_child1_child1, YGEdgeLeft, 100);
YGNodeStyleSetPadding(root_child1_child1, YGEdgeRight, 100);
@@ -529,7 +530,7 @@ TEST(
const YGNodeRef root_child1_child1 =
createYGNode(config, YGFlexDirectionColumn, 500, 400, false);
YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);
root_child1_child1->setBaselineFunc(_baselineFunc);
YGNodeSetIsReferenceBaseline(root_child1_child1, true);
YGNodeStyleSetMargin(root_child1_child1, YGEdgeLeft, 100);
YGNodeStyleSetMargin(root_child1_child1, YGEdgeRight, 100);
@@ -669,7 +670,7 @@ TEST(
const YGNodeRef root_child1_child1 =
createYGNode(config, YGFlexDirectionColumn, 500, 400, false);
YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);
root_child1_child1->setBaselineFunc(_baselineFunc);
YGNodeSetIsReferenceBaseline(root_child1_child1, true);
YGNodeInsertChild(root_child1, root_child1_child1, 1);
@@ -720,7 +721,7 @@ TEST(
const YGNodeRef root_child1_child1 =
createYGNode(config, YGFlexDirectionColumn, 500, 400, false);
YGNodeSetBaselineFunc(root_child1_child1, _baselineFunc);
root_child1_child1->setBaselineFunc(_baselineFunc);
YGNodeSetIsReferenceBaseline(root_child1_child1, true);
YGNodeInsertChild(root_child1, root_child1_child1, 1);

View File

@@ -6,6 +6,7 @@
*/
#include <gtest/gtest.h>
#include <yoga/YGNode.h>
#include <yoga/Yoga.h>
static YGSize _measure(
@@ -448,7 +449,7 @@ TEST(YogaTest, aspect_ratio_with_measure_func) {
YGNodeStyleSetHeight(root, 100);
const YGNodeRef root_child0 = YGNodeNew();
YGNodeSetMeasureFunc(root_child0, _measure);
root_child0->setMeasureFunc(_measure);
YGNodeStyleSetAspectRatio(root_child0, 1);
YGNodeInsertChild(root, root_child0, 0);

View File

@@ -6,13 +6,14 @@
*/
#include <gtest/gtest.h>
#include <yoga/YGNode.h>
#include <yoga/Yoga.h>
static float _baseline(
YGNodeRef node,
const float /*width*/,
const float /*height*/) {
float* baseline = (float*) YGNodeGetContext(node);
float* baseline = (float*) node->getContext();
return *baseline;
}
@@ -35,9 +36,9 @@ TEST(YogaTest, align_baseline_customer_func) {
float baselineValue = 10;
const YGNodeRef root_child1_child0 = YGNodeNew();
YGNodeSetContext(root_child1_child0, &baselineValue);
root_child1_child0->setContext(&baselineValue);
YGNodeStyleSetWidth(root_child1_child0, 50);
YGNodeSetBaselineFunc(root_child1_child0, _baseline);
root_child1_child0->setBaselineFunc(_baseline);
YGNodeStyleSetHeight(root_child1_child0, 20);
YGNodeInsertChild(root_child1, root_child1_child0, 0);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);

View File

@@ -6,13 +6,10 @@
*/
#include <gtest/gtest.h>
#include <yoga/Yoga.h>
#include <yoga/node/Node.h>
using namespace facebook;
#include <yoga/YGNode.h>
static void _dirtied(YGNodeRef node) {
int* dirtiedCount = (int*) YGNodeGetContext(node);
int* dirtiedCount = (int*) node->getContext();
(*dirtiedCount)++;
}
@@ -25,17 +22,17 @@ TEST(YogaTest, dirtied) {
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
int dirtiedCount = 0;
YGNodeSetContext(root, &dirtiedCount);
YGNodeSetDirtiedFunc(root, _dirtied);
root->setContext(&dirtiedCount);
root->setDirtiedFunc(_dirtied);
ASSERT_EQ(0, dirtiedCount);
// `_dirtied` MUST be called in case of explicit dirtying.
static_cast<yoga::Node*>(root)->setDirty(true);
root->setDirty(true);
ASSERT_EQ(1, dirtiedCount);
// `_dirtied` MUST be called ONCE.
static_cast<yoga::Node*>(root)->setDirty(true);
root->setDirty(true);
ASSERT_EQ(1, dirtiedCount);
}
@@ -58,17 +55,17 @@ TEST(YogaTest, dirtied_propagation) {
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
int dirtiedCount = 0;
YGNodeSetContext(root, &dirtiedCount);
YGNodeSetDirtiedFunc(root, _dirtied);
root->setContext(&dirtiedCount);
root->setDirtiedFunc(_dirtied);
ASSERT_EQ(0, dirtiedCount);
// `_dirtied` MUST be called for the first time.
static_cast<yoga::Node*>(root_child0)->markDirtyAndPropagate();
root_child0->markDirtyAndPropagate();
ASSERT_EQ(1, dirtiedCount);
// `_dirtied` must NOT be called for the second time.
static_cast<yoga::Node*>(root_child0)->markDirtyAndPropagate();
root_child0->markDirtyAndPropagate();
ASSERT_EQ(1, dirtiedCount);
}
@@ -91,20 +88,20 @@ TEST(YogaTest, dirtied_hierarchy) {
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
int dirtiedCount = 0;
YGNodeSetContext(root_child0, &dirtiedCount);
YGNodeSetDirtiedFunc(root_child0, _dirtied);
root_child0->setContext(&dirtiedCount);
root_child0->setDirtiedFunc(_dirtied);
ASSERT_EQ(0, dirtiedCount);
// `_dirtied` must NOT be called for descendants.
static_cast<yoga::Node*>(root)->markDirtyAndPropagate();
root->markDirtyAndPropagate();
ASSERT_EQ(0, dirtiedCount);
// `_dirtied` must NOT be called for the sibling node.
static_cast<yoga::Node*>(root_child1)->markDirtyAndPropagate();
root_child1->markDirtyAndPropagate();
ASSERT_EQ(0, dirtiedCount);
// `_dirtied` MUST be called in case of explicit dirtying.
static_cast<yoga::Node*>(root_child0)->markDirtyAndPropagate();
root_child0->markDirtyAndPropagate();
ASSERT_EQ(1, dirtiedCount);
}

View File

@@ -6,7 +6,7 @@
*/
#include <gtest/gtest.h>
#include <yoga/Yoga.h>
#include <yoga/YGNode.h>
TEST(YogaTest, dirty_propagation) {
const YGNodeRef root = YGNodeNew();
@@ -28,15 +28,15 @@ TEST(YogaTest, dirty_propagation) {
YGNodeStyleSetWidth(root_child0, 20);
EXPECT_TRUE(YGNodeIsDirty(root_child0));
EXPECT_FALSE(YGNodeIsDirty(root_child1));
EXPECT_TRUE(YGNodeIsDirty(root));
EXPECT_TRUE(root_child0->isDirty());
EXPECT_FALSE(root_child1->isDirty());
EXPECT_TRUE(root->isDirty());
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
EXPECT_FALSE(YGNodeIsDirty(root_child0));
EXPECT_FALSE(YGNodeIsDirty(root_child1));
EXPECT_FALSE(YGNodeIsDirty(root));
EXPECT_FALSE(root_child0->isDirty());
EXPECT_FALSE(root_child1->isDirty());
EXPECT_FALSE(root->isDirty());
YGNodeFreeRecursive(root);
}
@@ -61,9 +61,9 @@ TEST(YogaTest, dirty_propagation_only_if_prop_changed) {
YGNodeStyleSetWidth(root_child0, 50);
EXPECT_FALSE(YGNodeIsDirty(root_child0));
EXPECT_FALSE(YGNodeIsDirty(root_child1));
EXPECT_FALSE(YGNodeIsDirty(root));
EXPECT_FALSE(root_child0->isDirty());
EXPECT_FALSE(root_child1->isDirty());
EXPECT_FALSE(root->isDirty());
YGNodeFreeRecursive(root);
}
@@ -91,26 +91,26 @@ TEST(YogaTest, dirty_propagation_changing_layout_config) {
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
EXPECT_FALSE(YGNodeIsDirty(root));
EXPECT_FALSE(YGNodeIsDirty(root_child0));
EXPECT_FALSE(YGNodeIsDirty(root_child1));
EXPECT_FALSE(YGNodeIsDirty(root_child0_child0));
EXPECT_FALSE(root->isDirty());
EXPECT_FALSE(root_child0->isDirty());
EXPECT_FALSE(root_child1->isDirty());
EXPECT_FALSE(root_child0_child0->isDirty());
YGConfigRef newConfig = YGConfigNew();
YGConfigSetErrata(newConfig, YGErrataStretchFlexBasis);
YGNodeSetConfig(root_child0, newConfig);
EXPECT_TRUE(YGNodeIsDirty(root));
EXPECT_TRUE(YGNodeIsDirty(root_child0));
EXPECT_FALSE(YGNodeIsDirty(root_child1));
EXPECT_FALSE(YGNodeIsDirty(root_child0_child0));
EXPECT_TRUE(root->isDirty());
EXPECT_TRUE(root_child0->isDirty());
EXPECT_FALSE(root_child1->isDirty());
EXPECT_FALSE(root_child0_child0->isDirty());
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
EXPECT_FALSE(YGNodeIsDirty(root));
EXPECT_FALSE(YGNodeIsDirty(root_child0));
EXPECT_FALSE(YGNodeIsDirty(root_child1));
EXPECT_FALSE(YGNodeIsDirty(root_child0_child0));
EXPECT_FALSE(root->isDirty());
EXPECT_FALSE(root_child0->isDirty());
EXPECT_FALSE(root_child1->isDirty());
EXPECT_FALSE(root_child0_child0->isDirty());
YGConfigFree(newConfig);
YGNodeFreeRecursive(root);
@@ -139,10 +139,10 @@ TEST(YogaTest, dirty_propagation_changing_benign_config) {
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
EXPECT_FALSE(YGNodeIsDirty(root));
EXPECT_FALSE(YGNodeIsDirty(root_child0));
EXPECT_FALSE(YGNodeIsDirty(root_child1));
EXPECT_FALSE(YGNodeIsDirty(root_child0_child0));
EXPECT_FALSE(root->isDirty());
EXPECT_FALSE(root_child0->isDirty());
EXPECT_FALSE(root_child1->isDirty());
EXPECT_FALSE(root_child0_child0->isDirty());
YGConfigRef newConfig = YGConfigNew();
YGConfigSetLogger(
@@ -152,10 +152,10 @@ TEST(YogaTest, dirty_propagation_changing_benign_config) {
});
YGNodeSetConfig(root_child0, newConfig);
EXPECT_FALSE(YGNodeIsDirty(root));
EXPECT_FALSE(YGNodeIsDirty(root_child0));
EXPECT_FALSE(YGNodeIsDirty(root_child1));
EXPECT_FALSE(YGNodeIsDirty(root_child0_child0));
EXPECT_FALSE(root->isDirty());
EXPECT_FALSE(root_child0->isDirty());
EXPECT_FALSE(root_child1->isDirty());
EXPECT_FALSE(root_child0_child0->isDirty());
YGConfigFree(newConfig);
YGNodeFreeRecursive(root);
@@ -224,11 +224,11 @@ TEST(YogaTest, dirty_node_only_if_children_are_actually_removed) {
const YGNodeRef child1 = YGNodeNew();
YGNodeRemoveChild(root, child1);
EXPECT_FALSE(YGNodeIsDirty(root));
EXPECT_FALSE(root->isDirty());
YGNodeFree(child1);
YGNodeRemoveChild(root, child0);
EXPECT_TRUE(YGNodeIsDirty(root));
EXPECT_TRUE(root->isDirty());
YGNodeFree(child0);
YGNodeFreeRecursive(root);
@@ -241,11 +241,12 @@ TEST(YogaTest, dirty_node_only_if_undefined_values_gets_set_to_undefined) {
YGNodeStyleSetMinWidth(root, YGUndefined);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
EXPECT_FALSE(YGNodeIsDirty(root));
EXPECT_FALSE(root->isDirty());
YGNodeStyleSetMinWidth(root, YGUndefined);
EXPECT_FALSE(YGNodeIsDirty(root));
EXPECT_FALSE(root->isDirty());
YGNodeFreeRecursive(root);
}

View File

@@ -6,6 +6,7 @@
*/
#include <gtest/gtest.h>
#include <yoga/YGNode.h>
#include <yoga/Yoga.h>
static YGSize _measureMax(
@@ -14,7 +15,7 @@ static YGSize _measureMax(
YGMeasureMode widthMode,
float height,
YGMeasureMode heightMode) {
int* measureCount = (int*) YGNodeGetContext(node);
int* measureCount = (int*) node->getContext();
(*measureCount)++;
return YGSize{
@@ -29,7 +30,7 @@ static YGSize _measureMin(
YGMeasureMode widthMode,
float height,
YGMeasureMode heightMode) {
int* measureCount = (int*) YGNodeGetContext(node);
int* measureCount = (int*) node->getContext();
*measureCount = *measureCount + 1;
return YGSize{
widthMode == YGMeasureModeUndefined ||
@@ -49,7 +50,7 @@ static YGSize _measure_84_49(
YGMeasureMode /*widthMode*/,
float /*height*/,
YGMeasureMode /*heightMode*/) {
int* measureCount = (int*) YGNodeGetContext(node);
int* measureCount = (int*) node->getContext();
if (measureCount) {
(*measureCount)++;
}
@@ -66,8 +67,8 @@ TEST(YogaTest, measure_once_single_flexible_child) {
const YGNodeRef root_child0 = YGNodeNew();
int measureCount = 0;
YGNodeSetContext(root_child0, &measureCount);
YGNodeSetMeasureFunc(root_child0, _measureMax);
root_child0->setContext(&measureCount);
root_child0->setMeasureFunc(_measureMax);
YGNodeStyleSetFlexGrow(root_child0, 1);
YGNodeInsertChild(root, root_child0, 0);
@@ -83,8 +84,8 @@ TEST(YogaTest, remeasure_with_same_exact_width_larger_than_needed_height) {
const YGNodeRef root_child0 = YGNodeNew();
int measureCount = 0;
YGNodeSetContext(root_child0, &measureCount);
YGNodeSetMeasureFunc(root_child0, _measureMin);
root_child0->setContext(&measureCount);
root_child0->setMeasureFunc(_measureMin);
YGNodeInsertChild(root, root_child0, 0);
YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);
@@ -101,8 +102,8 @@ TEST(YogaTest, remeasure_with_same_atmost_width_larger_than_needed_height) {
const YGNodeRef root_child0 = YGNodeNew();
int measureCount = 0;
YGNodeSetContext(root_child0, &measureCount);
YGNodeSetMeasureFunc(root_child0, _measureMin);
root_child0->setContext(&measureCount);
root_child0->setMeasureFunc(_measureMin);
YGNodeInsertChild(root, root_child0, 0);
YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);
@@ -119,8 +120,8 @@ TEST(YogaTest, remeasure_with_computed_width_larger_than_needed_height) {
const YGNodeRef root_child0 = YGNodeNew();
int measureCount = 0;
YGNodeSetContext(root_child0, &measureCount);
YGNodeSetMeasureFunc(root_child0, _measureMin);
root_child0->setContext(&measureCount);
root_child0->setMeasureFunc(_measureMin);
YGNodeInsertChild(root, root_child0, 0);
YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR);
@@ -138,8 +139,8 @@ TEST(YogaTest, remeasure_with_atmost_computed_width_undefined_height) {
const YGNodeRef root_child0 = YGNodeNew();
int measureCount = 0;
YGNodeSetContext(root_child0, &measureCount);
YGNodeSetMeasureFunc(root_child0, _measureMin);
root_child0->setContext(&measureCount);
root_child0->setMeasureFunc(_measureMin);
YGNodeInsertChild(root, root_child0, 0);
YGNodeCalculateLayout(root, 100, YGUndefined, YGDirectionLTR);
@@ -166,8 +167,8 @@ TEST(
YGNodeInsertChild(root, root_child0, 0);
const YGNodeRef root_child0_child0 = YGNodeNew();
YGNodeSetContext(root_child0_child0, &measureCount);
YGNodeSetMeasureFunc(root_child0_child0, _measure_84_49);
root_child0_child0->setContext(&measureCount);
root_child0_child0->setMeasureFunc(_measure_84_49);
YGNodeInsertChild(root_child0, root_child0_child0, 0);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);

View File

@@ -6,6 +6,7 @@
*/
#include <gtest/gtest.h>
#include <yoga/YGNode.h>
#include <yoga/Yoga.h>
struct _MeasureConstraint {
@@ -27,7 +28,7 @@ static YGSize _measure(
float height,
YGMeasureMode heightMode) {
struct _MeasureConstraintList* constraintList =
(struct _MeasureConstraintList*) YGNodeGetContext(node);
(struct _MeasureConstraintList*) node->getContext();
struct _MeasureConstraint* constraints = constraintList->constraints;
uint32_t currentIndex = constraintList->length;
(&constraints[currentIndex])->width = width;
@@ -54,8 +55,10 @@ TEST(YogaTest, exactly_measure_stretched_child_column) {
YGNodeStyleSetHeight(root, 100);
const YGNodeRef root_child0 = YGNodeNew();
YGNodeSetContext(root_child0, &constraintList);
YGNodeSetMeasureFunc(root_child0, _measure);
// root_child0->setContext(&constraintList);
root_child0->setContext(&constraintList);
root_child0->setMeasureFunc(_measure);
// root_child0->setMeasureFunc(_measure);
YGNodeInsertChild(root, root_child0, 0);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
@@ -82,8 +85,9 @@ TEST(YogaTest, exactly_measure_stretched_child_row) {
YGNodeStyleSetHeight(root, 100);
const YGNodeRef root_child0 = YGNodeNew();
YGNodeSetContext(root_child0, &constraintList);
YGNodeSetMeasureFunc(root_child0, _measure);
// root_child0->setContext(&constraintList);
root_child0->setContext(&constraintList);
root_child0->setMeasureFunc(_measure);
YGNodeInsertChild(root, root_child0, 0);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
@@ -109,8 +113,8 @@ TEST(YogaTest, at_most_main_axis_column) {
YGNodeStyleSetHeight(root, 100);
const YGNodeRef root_child0 = YGNodeNew();
YGNodeSetContext(root_child0, &constraintList);
YGNodeSetMeasureFunc(root_child0, _measure);
root_child0->setContext(&constraintList);
root_child0->setMeasureFunc(_measure);
YGNodeInsertChild(root, root_child0, 0);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
@@ -137,8 +141,8 @@ TEST(YogaTest, at_most_cross_axis_column) {
YGNodeStyleSetHeight(root, 100);
const YGNodeRef root_child0 = YGNodeNew();
YGNodeSetContext(root_child0, &constraintList);
YGNodeSetMeasureFunc(root_child0, _measure);
root_child0->setContext(&constraintList);
root_child0->setMeasureFunc(_measure);
YGNodeInsertChild(root, root_child0, 0);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
@@ -165,8 +169,8 @@ TEST(YogaTest, at_most_main_axis_row) {
YGNodeStyleSetHeight(root, 100);
const YGNodeRef root_child0 = YGNodeNew();
YGNodeSetContext(root_child0, &constraintList);
YGNodeSetMeasureFunc(root_child0, _measure);
root_child0->setContext(&constraintList);
root_child0->setMeasureFunc(_measure);
YGNodeInsertChild(root, root_child0, 0);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
@@ -194,8 +198,8 @@ TEST(YogaTest, at_most_cross_axis_row) {
YGNodeStyleSetHeight(root, 100);
const YGNodeRef root_child0 = YGNodeNew();
YGNodeSetContext(root_child0, &constraintList);
YGNodeSetMeasureFunc(root_child0, _measure);
root_child0->setContext(&constraintList);
root_child0->setMeasureFunc(_measure);
YGNodeInsertChild(root, root_child0, 0);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
@@ -221,8 +225,8 @@ TEST(YogaTest, flex_child) {
const YGNodeRef root_child0 = YGNodeNew();
YGNodeStyleSetFlexGrow(root_child0, 1);
YGNodeSetContext(root_child0, &constraintList);
YGNodeSetMeasureFunc(root_child0, _measure);
root_child0->setContext(&constraintList);
root_child0->setMeasureFunc(_measure);
YGNodeInsertChild(root, root_child0, 0);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
@@ -252,8 +256,8 @@ TEST(YogaTest, flex_child_with_flex_basis) {
const YGNodeRef root_child0 = YGNodeNew();
YGNodeStyleSetFlexGrow(root_child0, 1);
YGNodeStyleSetFlexBasis(root_child0, 0);
YGNodeSetContext(root_child0, &constraintList);
YGNodeSetMeasureFunc(root_child0, _measure);
root_child0->setContext(&constraintList);
root_child0->setMeasureFunc(_measure);
YGNodeInsertChild(root, root_child0, 0);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
@@ -281,8 +285,8 @@ TEST(YogaTest, overflow_scroll_column) {
YGNodeStyleSetWidth(root, 100);
const YGNodeRef root_child0 = YGNodeNew();
YGNodeSetContext(root_child0, &constraintList);
YGNodeSetMeasureFunc(root_child0, _measure);
root_child0->setContext(&constraintList);
root_child0->setMeasureFunc(_measure);
YGNodeInsertChild(root, root_child0, 0);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
@@ -314,8 +318,8 @@ TEST(YogaTest, overflow_scroll_row) {
YGNodeStyleSetWidth(root, 100);
const YGNodeRef root_child0 = YGNodeNew();
YGNodeSetContext(root_child0, &constraintList);
YGNodeSetMeasureFunc(root_child0, _measure);
root_child0->setContext(&constraintList);
root_child0->setMeasureFunc(_measure);
YGNodeInsertChild(root, root_child0, 0);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);

View File

@@ -6,6 +6,7 @@
*/
#include <gtest/gtest.h>
#include <yoga/YGNode.h>
#include <yoga/Yoga.h>
static YGSize _measure(
@@ -14,7 +15,7 @@ static YGSize _measure(
YGMeasureMode /*widthMode*/,
float /*height*/,
YGMeasureMode /*heightMode*/) {
int* measureCount = (int*) YGNodeGetContext(node);
int* measureCount = (int*) node->getContext();
if (measureCount) {
(*measureCount)++;
}
@@ -55,8 +56,8 @@ TEST(YogaTest, dont_measure_single_grow_shrink_child) {
int measureCount = 0;
const YGNodeRef root_child0 = YGNodeNew();
YGNodeSetContext(root_child0, &measureCount);
YGNodeSetMeasureFunc(root_child0, _measure);
root_child0->setContext(&measureCount);
root_child0->setMeasureFunc(_measure);
YGNodeStyleSetFlexGrow(root_child0, 1);
YGNodeStyleSetFlexShrink(root_child0, 1);
YGNodeInsertChild(root, root_child0, 0);
@@ -78,8 +79,8 @@ TEST(YogaTest, measure_absolute_child_with_no_constraints) {
const YGNodeRef root_child0_child0 = YGNodeNew();
YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);
YGNodeSetContext(root_child0_child0, &measureCount);
YGNodeSetMeasureFunc(root_child0_child0, _measure);
root_child0_child0->setContext(&measureCount);
root_child0_child0->setMeasureFunc(_measure);
YGNodeInsertChild(root_child0, root_child0_child0, 0);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
@@ -98,8 +99,8 @@ TEST(YogaTest, dont_measure_when_min_equals_max) {
int measureCount = 0;
const YGNodeRef root_child0 = YGNodeNew();
YGNodeSetContext(root_child0, &measureCount);
YGNodeSetMeasureFunc(root_child0, _measure);
root_child0->setContext(&measureCount);
root_child0->setMeasureFunc(_measure);
YGNodeStyleSetMinWidth(root_child0, 10);
YGNodeStyleSetMaxWidth(root_child0, 10);
YGNodeStyleSetMinHeight(root_child0, 10);
@@ -126,8 +127,8 @@ TEST(YogaTest, dont_measure_when_min_equals_max_percentages) {
int measureCount = 0;
const YGNodeRef root_child0 = YGNodeNew();
YGNodeSetContext(root_child0, &measureCount);
YGNodeSetMeasureFunc(root_child0, _measure);
root_child0->setContext(&measureCount);
root_child0->setMeasureFunc(_measure);
YGNodeStyleSetMinWidthPercent(root_child0, 10);
YGNodeStyleSetMaxWidthPercent(root_child0, 10);
YGNodeStyleSetMinHeightPercent(root_child0, 10);
@@ -151,7 +152,7 @@ TEST(YogaTest, measure_nodes_with_margin_auto_and_stretch) {
YGNodeStyleSetHeight(root, 500);
const YGNodeRef root_child0 = YGNodeNew();
YGNodeSetMeasureFunc(root_child0, _measure);
root_child0->setMeasureFunc(_measure);
YGNodeStyleSetMarginAuto(root_child0, YGEdgeLeft);
YGNodeInsertChild(root, root_child0, 0);
@@ -174,8 +175,8 @@ TEST(YogaTest, dont_measure_when_min_equals_max_mixed_width_percent) {
int measureCount = 0;
const YGNodeRef root_child0 = YGNodeNew();
YGNodeSetContext(root_child0, &measureCount);
YGNodeSetMeasureFunc(root_child0, _measure);
root_child0->setContext(&measureCount);
root_child0->setMeasureFunc(_measure);
YGNodeStyleSetMinWidthPercent(root_child0, 10);
YGNodeStyleSetMaxWidthPercent(root_child0, 10);
YGNodeStyleSetMinHeight(root_child0, 10);
@@ -202,8 +203,8 @@ TEST(YogaTest, dont_measure_when_min_equals_max_mixed_height_percent) {
int measureCount = 0;
const YGNodeRef root_child0 = YGNodeNew();
YGNodeSetContext(root_child0, &measureCount);
YGNodeSetMeasureFunc(root_child0, _measure);
root_child0->setContext(&measureCount);
root_child0->setMeasureFunc(_measure);
YGNodeStyleSetMinWidth(root_child0, 10);
YGNodeStyleSetMaxWidth(root_child0, 10);
YGNodeStyleSetMinHeightPercent(root_child0, 10);
@@ -227,7 +228,7 @@ TEST(YogaTest, measure_enough_size_should_be_in_single_line) {
const YGNodeRef root_child0 = YGNodeNew();
YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexStart);
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
root_child0->setMeasureFunc(_simulate_wrapping_text);
YGNodeInsertChild(root, root_child0, 0);
@@ -246,7 +247,7 @@ TEST(YogaTest, measure_not_enough_size_should_wrap) {
const YGNodeRef root_child0 = YGNodeNew();
YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexStart);
// YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
root_child0->setMeasureFunc(_simulate_wrapping_text);
YGNodeInsertChild(root, root_child0, 0);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
@@ -268,8 +269,8 @@ TEST(YogaTest, measure_zero_space_should_grow) {
const YGNodeRef root_child0 = YGNodeNew();
YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionColumn);
YGNodeStyleSetPadding(root_child0, YGEdgeAll, 100);
YGNodeSetContext(root_child0, &measureCount);
YGNodeSetMeasureFunc(root_child0, _measure);
root_child0->setContext(&measureCount);
root_child0->setMeasureFunc(_measure);
YGNodeInsertChild(root, root_child0, 0);
@@ -294,7 +295,8 @@ TEST(YogaTest, measure_flex_direction_row_and_padding) {
YGNodeStyleSetHeight(root, 50);
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
root_child0->setMeasureFunc(_simulate_wrapping_text);
// YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
YGNodeInsertChild(root, root_child0, 0);
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
@@ -333,7 +335,7 @@ TEST(YogaTest, measure_flex_direction_column_and_padding) {
YGNodeStyleSetHeight(root, 50);
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
root_child0->setMeasureFunc(_simulate_wrapping_text);
// YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
YGNodeInsertChild(root, root_child0, 0);
@@ -374,7 +376,7 @@ TEST(YogaTest, measure_flex_direction_row_no_padding) {
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
// YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
root_child0->setMeasureFunc(_simulate_wrapping_text);
YGNodeInsertChild(root, root_child0, 0);
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
@@ -414,7 +416,7 @@ TEST(YogaTest, measure_flex_direction_row_no_padding_align_items_flexstart) {
YGNodeStyleSetAlignItems(root, YGAlignFlexStart);
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
root_child0->setMeasureFunc(_simulate_wrapping_text);
YGNodeInsertChild(root, root_child0, 0);
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
@@ -453,7 +455,7 @@ TEST(YogaTest, measure_with_fixed_size) {
YGNodeStyleSetHeight(root, 50);
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
root_child0->setMeasureFunc(_simulate_wrapping_text);
YGNodeStyleSetWidth(root_child0, 10);
YGNodeStyleSetHeight(root_child0, 10);
YGNodeInsertChild(root, root_child0, 0);
@@ -494,7 +496,7 @@ TEST(YogaTest, measure_with_flex_shrink) {
YGNodeStyleSetHeight(root, 50);
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
root_child0->setMeasureFunc(_simulate_wrapping_text);
YGNodeStyleSetFlexShrink(root_child0, 1);
YGNodeInsertChild(root, root_child0, 0);
@@ -533,7 +535,7 @@ TEST(YogaTest, measure_no_padding) {
YGNodeStyleSetHeight(root, 50);
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
root_child0->setMeasureFunc(_simulate_wrapping_text);
YGNodeStyleSetFlexShrink(root_child0, 1);
YGNodeInsertChild(root, root_child0, 0);
@@ -566,7 +568,7 @@ TEST(YogaTest, measure_no_padding) {
#if GTEST_HAS_DEATH_TEST
TEST(YogaDeathTest, cannot_add_child_to_node_with_measure_func) {
const YGNodeRef root = YGNodeNew();
YGNodeSetMeasureFunc(root, _measure);
root->setMeasureFunc(_measure);
const YGNodeRef root_child0 = YGNodeNew();
#if defined(__cpp_exceptions)
@@ -583,10 +585,9 @@ TEST(YogaDeathTest, cannot_add_nonnull_measure_func_to_non_leaf_node) {
const YGNodeRef root_child0 = YGNodeNew();
YGNodeInsertChild(root, root_child0, 0);
#if defined(__cpp_exceptions)
ASSERT_THROW(YGNodeSetMeasureFunc(root, _measure), std::logic_error);
ASSERT_THROW(root->setMeasureFunc(_measure), std::logic_error);
#else // !defined(__cpp_exceptions)
ASSERT_DEATH(
YGNodeSetMeasureFunc(root, _measure), "Cannot set measure function.*");
ASSERT_DEATH(root->setMeasureFunc(_measure), "Cannot set measure function.*");
#endif // defined(__cpp_exceptions)
YGNodeFreeRecursive(root);
}
@@ -596,8 +597,8 @@ TEST(YogaDeathTest, cannot_add_nonnull_measure_func_to_non_leaf_node) {
TEST(YogaTest, can_nullify_measure_func_on_any_node) {
const YGNodeRef root = YGNodeNew();
YGNodeInsertChild(root, YGNodeNew(), 0);
YGNodeSetMeasureFunc(root, nullptr);
ASSERT_TRUE(!YGNodeHasMeasureFunc(root));
root->setMeasureFunc(nullptr);
ASSERT_TRUE(!root->hasMeasureFunc());
YGNodeFreeRecursive(root);
}
@@ -610,7 +611,7 @@ TEST(YogaTest, cant_call_negative_measure) {
YGNodeStyleSetHeight(root, 10);
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
YGNodeSetMeasureFunc(root_child0, _measure_assert_negative);
root_child0->setMeasureFunc(_measure_assert_negative);
YGNodeStyleSetMargin(root_child0, YGEdgeTop, 20);
YGNodeInsertChild(root, root_child0, 0);
@@ -629,7 +630,7 @@ TEST(YogaTest, cant_call_negative_measure_horizontal) {
YGNodeStyleSetHeight(root, 20);
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
YGNodeSetMeasureFunc(root_child0, _measure_assert_negative);
root_child0->setMeasureFunc(_measure_assert_negative);
YGNodeStyleSetMargin(root_child0, YGEdgeStart, 20);
YGNodeInsertChild(root, root_child0, 0);
@@ -673,7 +674,7 @@ TEST(YogaTest, percent_with_text_node) {
YGNodeInsertChild(root, root_child0, 0);
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
YGNodeSetMeasureFunc(root_child1, _measure_90_10);
root_child1->setMeasureFunc(_measure_90_10);
YGNodeStyleSetMaxWidthPercent(root_child1, 50);
YGNodeStyleSetPaddingPercent(root_child1, YGEdgeTop, 50);
YGNodeInsertChild(root, root_child1, 1);
@@ -712,28 +713,28 @@ TEST(YogaTest, percent_margin_with_measure_func) {
YGNodeStyleSetWidth(root_child0, 100);
YGNodeStyleSetHeight(root_child0, 100);
YGNodeStyleSetMargin(root_child0, YGEdgeTop, 0);
YGNodeSetMeasureFunc(root_child0, _measure_100_100);
root_child0->setMeasureFunc(_measure_100_100);
YGNodeInsertChild(root, root_child0, 0);
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
YGNodeStyleSetWidth(root_child1, 100);
YGNodeStyleSetHeight(root_child1, 100);
YGNodeStyleSetMargin(root_child1, YGEdgeTop, 100);
YGNodeSetMeasureFunc(root_child1, _measure_100_100);
root_child1->setMeasureFunc(_measure_100_100);
YGNodeInsertChild(root, root_child1, 1);
const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
YGNodeStyleSetWidth(root_child2, 100);
YGNodeStyleSetHeight(root_child2, 100);
YGNodeStyleSetMarginPercent(root_child2, YGEdgeTop, 10);
YGNodeSetMeasureFunc(root_child2, _measure_100_100);
root_child2->setMeasureFunc(_measure_100_100);
YGNodeInsertChild(root, root_child2, 2);
const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
YGNodeStyleSetWidth(root_child3, 100);
YGNodeStyleSetHeight(root_child3, 100);
YGNodeStyleSetMarginPercent(root_child3, YGEdgeTop, 20);
YGNodeSetMeasureFunc(root_child3, _measure_100_100);
root_child3->setMeasureFunc(_measure_100_100);
YGNodeInsertChild(root, root_child3, 3);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
@@ -782,24 +783,24 @@ TEST(YogaTest, percent_padding_with_measure_func) {
YGNodeStyleSetWidth(root_child0, 100);
YGNodeStyleSetHeight(root_child0, 100);
YGNodeStyleSetPadding(root_child0, YGEdgeTop, 0);
YGNodeSetMeasureFunc(root_child0, _measure_100_100);
root_child0->setMeasureFunc(_measure_100_100);
YGNodeInsertChild(root, root_child0, 0);
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
YGNodeStyleSetWidth(root_child1, 100);
YGNodeStyleSetHeight(root_child1, 100);
YGNodeStyleSetPadding(root_child1, YGEdgeTop, 100);
YGNodeSetMeasureFunc(root_child1, _measure_100_100);
root_child1->setMeasureFunc(_measure_100_100);
YGNodeInsertChild(root, root_child1, 1);
const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
YGNodeStyleSetPaddingPercent(root_child2, YGEdgeTop, 10);
YGNodeSetMeasureFunc(root_child2, _measure_100_100);
root_child2->setMeasureFunc(_measure_100_100);
YGNodeInsertChild(root, root_child2, 2);
const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
YGNodeStyleSetPaddingPercent(root_child3, YGEdgeTop, 20);
YGNodeSetMeasureFunc(root_child3, _measure_100_100);
root_child3->setMeasureFunc(_measure_100_100);
YGNodeInsertChild(root, root_child3, 3);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
@@ -848,26 +849,26 @@ TEST(YogaTest, percent_padding_and_percent_margin_with_measure_func) {
YGNodeStyleSetWidth(root_child0, 100);
YGNodeStyleSetHeight(root_child0, 100);
YGNodeStyleSetPadding(root_child0, YGEdgeTop, 0);
YGNodeSetMeasureFunc(root_child0, _measure_100_100);
root_child0->setMeasureFunc(_measure_100_100);
YGNodeInsertChild(root, root_child0, 0);
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
YGNodeStyleSetWidth(root_child1, 100);
YGNodeStyleSetHeight(root_child1, 100);
YGNodeStyleSetPadding(root_child1, YGEdgeTop, 100);
YGNodeSetMeasureFunc(root_child1, _measure_100_100);
root_child1->setMeasureFunc(_measure_100_100);
YGNodeInsertChild(root, root_child1, 1);
const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
YGNodeStyleSetPaddingPercent(root_child2, YGEdgeTop, 10);
YGNodeStyleSetMarginPercent(root_child2, YGEdgeTop, 10);
YGNodeSetMeasureFunc(root_child2, _measure_100_100);
root_child2->setMeasureFunc(_measure_100_100);
YGNodeInsertChild(root, root_child2, 2);
const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
YGNodeStyleSetPaddingPercent(root_child3, YGEdgeTop, 20);
YGNodeStyleSetMarginPercent(root_child3, YGEdgeTop, 20);
YGNodeSetMeasureFunc(root_child3, _measure_100_100);
root_child3->setMeasureFunc(_measure_100_100);
YGNodeInsertChild(root, root_child3, 3);
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);

View File

@@ -6,33 +6,33 @@
*/
#include <gtest/gtest.h>
#include <yoga/node/Node.h>
#include <yoga/YGNode.h>
#include <ostream>
using namespace facebook::yoga;
inline bool operator==(const YGSize& lhs, const YGSize& rhs) {
return lhs.width == rhs.width && lhs.height == rhs.height;
}
TEST(Node, hasMeasureFunc_initial) {
auto n = Node{};
void PrintTo(const YGSize&, std::ostream*);
TEST(YGNode, hasMeasureFunc_initial) {
auto n = YGNode{};
ASSERT_FALSE(n.hasMeasureFunc());
}
TEST(Node, hasMeasureFunc_with_measure_fn) {
auto n = Node{};
n.setMeasureFunc([](YGNodeRef, float, YGMeasureMode, float, YGMeasureMode) {
TEST(YGNode, hasMeasureFunc_with_measure_fn) {
auto n = YGNode{};
n.setMeasureFunc([](YGNode*, float, YGMeasureMode, float, YGMeasureMode) {
return YGSize{};
});
ASSERT_TRUE(n.hasMeasureFunc());
}
TEST(Node, measure_with_measure_fn) {
auto n = Node{};
TEST(YGNode, measure_with_measure_fn) {
auto n = YGNode{};
n.setMeasureFunc(
[](YGNodeRef, float w, YGMeasureMode wm, float h, YGMeasureMode hm) {
[](YGNode*, float w, YGMeasureMode wm, float h, YGMeasureMode hm) {
return YGSize{w * static_cast<int>(wm), h / static_cast<int>(hm)};
});
@@ -41,10 +41,10 @@ TEST(Node, measure_with_measure_fn) {
(YGSize{23, 12}));
}
TEST(Node, measure_with_context_measure_fn) {
auto n = Node{};
TEST(YGNode, measure_with_context_measure_fn) {
auto n = YGNode{};
n.setMeasureFunc(
[](YGNodeRef, float, YGMeasureMode, float, YGMeasureMode, void* ctx) {
[](YGNode*, float, YGMeasureMode, float, YGMeasureMode, void* ctx) {
return *(YGSize*) ctx;
});
@@ -54,14 +54,14 @@ TEST(Node, measure_with_context_measure_fn) {
result);
}
TEST(Node, switching_measure_fn_types) {
auto n = Node{};
TEST(YGNode, switching_measure_fn_types) {
auto n = YGNode{};
n.setMeasureFunc(
[](YGNodeRef, float, YGMeasureMode, float, YGMeasureMode, void*) {
[](YGNode*, float, YGMeasureMode, float, YGMeasureMode, void*) {
return YGSize{};
});
n.setMeasureFunc(
[](YGNodeRef, float w, YGMeasureMode wm, float h, YGMeasureMode hm) {
[](YGNode*, float w, YGMeasureMode wm, float h, YGMeasureMode hm) {
return YGSize{w * static_cast<int>(wm), h / static_cast<int>(hm)};
});
@@ -70,9 +70,9 @@ TEST(Node, switching_measure_fn_types) {
(YGSize{23, 12}));
}
TEST(Node, hasMeasureFunc_after_unset) {
auto n = Node{};
n.setMeasureFunc([](YGNodeRef, float, YGMeasureMode, float, YGMeasureMode) {
TEST(YGNode, hasMeasureFunc_after_unset) {
auto n = YGNode{};
n.setMeasureFunc([](YGNode*, float, YGMeasureMode, float, YGMeasureMode) {
return YGSize{};
});
@@ -80,10 +80,10 @@ TEST(Node, hasMeasureFunc_after_unset) {
ASSERT_FALSE(n.hasMeasureFunc());
}
TEST(Node, hasMeasureFunc_after_unset_context) {
auto n = Node{};
TEST(YGNode, hasMeasureFunc_after_unset_context) {
auto n = YGNode{};
n.setMeasureFunc(
[](YGNodeRef, float, YGMeasureMode, float, YGMeasureMode, void*) {
[](YGNode*, float, YGMeasureMode, float, YGMeasureMode, void*) {
return YGSize{};
});
@@ -91,27 +91,27 @@ TEST(Node, hasMeasureFunc_after_unset_context) {
ASSERT_FALSE(n.hasMeasureFunc());
}
TEST(Node, hasBaselineFunc_initial) {
auto n = Node{};
TEST(YGNode, hasBaselineFunc_initial) {
auto n = YGNode{};
ASSERT_FALSE(n.hasBaselineFunc());
}
TEST(Node, hasBaselineFunc_with_baseline_fn) {
auto n = Node{};
n.setBaselineFunc([](YGNodeRef, float, float) { return 0.0f; });
TEST(YGNode, hasBaselineFunc_with_baseline_fn) {
auto n = YGNode{};
n.setBaselineFunc([](YGNode*, float, float) { return 0.0f; });
ASSERT_TRUE(n.hasBaselineFunc());
}
TEST(Node, baseline_with_baseline_fn) {
auto n = Node{};
n.setBaselineFunc([](YGNodeRef, float w, float h) { return w + h; });
TEST(YGNode, baseline_with_baseline_fn) {
auto n = YGNode{};
n.setBaselineFunc([](YGNode*, float w, float h) { return w + h; });
ASSERT_EQ(n.baseline(1.25f, 2.5f, nullptr), 3.75f);
}
TEST(Node, baseline_with_context_baseline_fn) {
auto n = Node{};
n.setBaselineFunc([](YGNodeRef, float w, float h, void* ctx) {
TEST(YGNode, baseline_with_context_baseline_fn) {
auto n = YGNode{};
n.setBaselineFunc([](YGNode*, float w, float h, void* ctx) {
return w + h + *(float*) ctx;
});
@@ -119,25 +119,29 @@ TEST(Node, baseline_with_context_baseline_fn) {
ASSERT_EQ(n.baseline(1.25f, 2.5f, &ctx), -6.25f);
}
TEST(Node, hasBaselineFunc_after_unset) {
auto n = Node{};
n.setBaselineFunc([](YGNodeRef, float, float) { return 0.0f; });
TEST(YGNode, hasBaselineFunc_after_unset) {
auto n = YGNode{};
n.setBaselineFunc([](YGNode*, float, float) { return 0.0f; });
n.setBaselineFunc(nullptr);
ASSERT_FALSE(n.hasBaselineFunc());
}
TEST(Node, hasBaselineFunc_after_unset_context) {
auto n = Node{};
n.setBaselineFunc([](YGNodeRef, float, float, void*) { return 0.0f; });
TEST(YGNode, hasBaselineFunc_after_unset_context) {
auto n = YGNode{};
n.setBaselineFunc([](YGNode*, float, float, void*) { return 0.0f; });
n.setMeasureFunc(nullptr);
ASSERT_FALSE(n.hasMeasureFunc());
}
TEST(Node, switching_baseline_fn_types) {
auto n = Node{};
n.setBaselineFunc([](YGNodeRef, float, float, void*) { return 0.0f; });
n.setBaselineFunc([](YGNodeRef, float, float) { return 1.0f; });
TEST(YGNode, switching_baseline_fn_types) {
auto n = YGNode{};
n.setBaselineFunc([](YGNode*, float, float, void*) { return 0.0f; });
n.setBaselineFunc([](YGNode*, float, float) { return 1.0f; });
ASSERT_EQ(n.baseline(1, 2, nullptr), 1.0f);
}
void PrintTo(const YGSize& size, std::ostream* os) {
*os << "YGSize{" << size.width << ", " << size.height << "}";
}

View File

@@ -7,11 +7,10 @@
#include <gtest/gtest.h>
#include <yoga/Yoga.h>
#include <yoga/node/Node.h>
#include <yoga/YGNode.h>
#include "util/TestUtil.h"
using namespace facebook;
using facebook::yoga::test::TestUtil;
TEST(YogaTest, cloning_shared_root) {
@@ -274,10 +273,9 @@ TEST(YogaTest, mixed_shared_and_owned_children) {
YGNodeInsertChild(root1, root1_child0, 0);
YGNodeInsertChild(root1, root1_child2, 1);
auto children = static_cast<yoga::Node*>(root1)->getChildren();
children.insert(children.begin() + 1, static_cast<yoga::Node*>(root0_child0));
static_cast<yoga::Node*>(root1)->setChildren(children);
auto children = root1->getChildren();
children.insert(children.begin() + 1, root0_child0);
root1->setChildren(children);
auto secondChild = YGNodeGetChild(root1, 1);
ASSERT_EQ(secondChild, YGNodeGetChild(root0, 0));
ASSERT_EQ(YGNodeGetChild(secondChild, 0), YGNodeGetChild(root0_child0, 0));

View File

@@ -6,6 +6,7 @@
*/
#include <gtest/gtest.h>
#include <yoga/YGNode.h>
#include <yoga/Yoga.h>
static YGSize _measureFloor(
@@ -49,7 +50,7 @@ TEST(YogaTest, rounding_feature_with_custom_measure_func_floor) {
const YGNodeRef root = YGNodeNewWithConfig(config);
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
YGNodeSetMeasureFunc(root_child0, _measureFloor);
root_child0->setMeasureFunc(_measureFloor);
YGNodeInsertChild(root, root_child0, 0);
YGConfigSetPointScaleFactor(config, 0.0f);
@@ -97,7 +98,7 @@ TEST(YogaTest, rounding_feature_with_custom_measure_func_ceil) {
const YGNodeRef root = YGNodeNewWithConfig(config);
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
YGNodeSetMeasureFunc(root_child0, _measureCeil);
root_child0->setMeasureFunc(_measureCeil);
YGNodeInsertChild(root, root_child0, 0);
YGConfigSetPointScaleFactor(config, 1.0f);
@@ -120,7 +121,7 @@ TEST(
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
YGNodeStyleSetPosition(root_child0, YGEdgeLeft, 73.625);
YGNodeSetMeasureFunc(root_child0, _measureFractial);
root_child0->setMeasureFunc(_measureFractial);
YGNodeInsertChild(root, root_child0, 0);
YGConfigSetPointScaleFactor(config, 2.0f);

View File

@@ -6,15 +6,16 @@
*/
#include <gtest/gtest.h>
#include <yoga/Yoga.h>
#include <yoga/YGNode.h>
#include <iostream>
TEST(YogaTest, copy_style_same) {
const YGNodeRef node0 = YGNodeNew();
const YGNodeRef node1 = YGNodeNew();
ASSERT_FALSE(YGNodeIsDirty(node0));
ASSERT_FALSE(node0->isDirty());
YGNodeCopyStyle(node0, node1);
ASSERT_FALSE(YGNodeIsDirty(node0));
ASSERT_FALSE(node0->isDirty());
YGNodeFree(node0);
YGNodeFree(node1);
@@ -22,7 +23,7 @@ TEST(YogaTest, copy_style_same) {
TEST(YogaTest, copy_style_modified) {
const YGNodeRef node0 = YGNodeNew();
ASSERT_FALSE(YGNodeIsDirty(node0));
ASSERT_FALSE(node0->isDirty());
ASSERT_EQ(YGFlexDirectionColumn, YGNodeStyleGetFlexDirection(node0));
ASSERT_FALSE(YGNodeStyleGetMaxHeight(node0).unit != YGUnitUndefined);
@@ -31,7 +32,7 @@ TEST(YogaTest, copy_style_modified) {
YGNodeStyleSetMaxHeight(node1, 10);
YGNodeCopyStyle(node0, node1);
ASSERT_TRUE(YGNodeIsDirty(node0));
ASSERT_TRUE(node0->isDirty());
ASSERT_EQ(YGFlexDirectionRow, YGNodeStyleGetFlexDirection(node0));
ASSERT_FLOAT_EQ(10, YGNodeStyleGetMaxHeight(node0).value);
@@ -44,14 +45,14 @@ TEST(YogaTest, copy_style_modified_same) {
YGNodeStyleSetFlexDirection(node0, YGFlexDirectionRow);
YGNodeStyleSetMaxHeight(node0, 10);
YGNodeCalculateLayout(node0, YGUndefined, YGUndefined, YGDirectionLTR);
ASSERT_FALSE(YGNodeIsDirty(node0));
ASSERT_FALSE(node0->isDirty());
const YGNodeRef node1 = YGNodeNew();
YGNodeStyleSetFlexDirection(node1, YGFlexDirectionRow);
YGNodeStyleSetMaxHeight(node1, 10);
YGNodeCopyStyle(node0, node1);
ASSERT_FALSE(YGNodeIsDirty(node0));
ASSERT_FALSE(node0->isDirty());
YGNodeFree(node0);
YGNodeFree(node1);

View File

@@ -10,7 +10,7 @@
#include <gtest/gtest.h>
#include <yoga/Yoga.h>
#include <yoga/config/Config.h>
#include <yoga/node/Node.h>
#include <yoga/YGNode.h>
#include <functional>
#include <memory>
@@ -22,7 +22,7 @@ struct ConfigCloningTest : public ::testing::Test {
void SetUp() override;
void TearDown() override;
static yoga::Node clonedNode;
static YGNode clonedNode;
static YGNodeRef cloneNode(YGNodeRef, YGNodeRef, int) { return &clonedNode; }
static YGNodeRef doNotClone(YGNodeRef, YGNodeRef, int) { return nullptr; }
};
@@ -30,7 +30,7 @@ struct ConfigCloningTest : public ::testing::Test {
TEST_F(ConfigCloningTest, uses_values_provided_by_cloning_callback) {
config->setCloneNodeCallback(cloneNode);
yoga::Node node{}, owner{};
YGNode node{}, owner{};
auto clone = config->cloneNode(&node, &owner, 0, nullptr);
ASSERT_EQ(clone, &clonedNode);
@@ -41,7 +41,7 @@ TEST_F(
falls_back_to_regular_cloning_if_callback_returns_null) {
config->setCloneNodeCallback(doNotClone);
yoga::Node node{}, owner{};
YGNode node{}, owner{};
auto clone = config->cloneNode(&node, &owner, 0, nullptr);
ASSERT_NE(clone, nullptr);
@@ -53,7 +53,7 @@ TEST_F(ConfigCloningTest, can_clone_with_context) {
return (YGNodeRef) context;
});
yoga::Node node{}, owner{}, clone{};
YGNode node{}, owner{}, clone{};
ASSERT_EQ(config->cloneNode(&node, &owner, 0, &clone), &clone);
}
@@ -65,4 +65,4 @@ void ConfigCloningTest::TearDown() {
config.reset();
}
yoga::Node ConfigCloningTest::clonedNode = {};
YGNode ConfigCloningTest::clonedNode = {};

View File

@@ -7,7 +7,7 @@
#include "TestUtil.h"
#include <yoga/node/Node.h>
#include <yoga/YGNode.h>
#include <yoga/event/event.h>
namespace facebook::yoga::test {
@@ -17,7 +17,7 @@ int nodeInstanceCount = 0;
namespace {
void yogaEventSubscriber(
YGNodeConstRef /*node*/,
const YGNode& /*node*/,
Event::Type eventType,
const Event::Data& /*eventData*/) {

View File

@@ -7,7 +7,7 @@
#pragma once
#include <yoga/node/Node.h>
#include "YGNode.h"
#include <yoga/Yoga-internal.h>
#include <yoga/style/CompactValue.h>
@@ -43,7 +43,7 @@ struct YGCollectFlexItemsRowValues {
float totalFlexGrowFactors;
float totalFlexShrinkScaledFactors;
uint32_t endOfLineIndex;
std::vector<facebook::yoga::Node*> relativeChildren;
std::vector<YGNodeRef> relativeChildren;
float remainingFreeSpace;
// The size of the mainDim for the row after considering size, padding, margin
// and border of flex items. This is used to calculate maxLineDim after going

View File

@@ -5,12 +5,12 @@
* LICENSE file in the root directory of this source tree.
*/
#include <yoga/node/LayoutResults.h>
#include <yoga/Utils.h>
#include "YGLayout.h"
#include "Utils.h"
namespace facebook::yoga {
using namespace facebook;
bool LayoutResults::operator==(LayoutResults layout) const {
bool YGLayout::operator==(YGLayout layout) const {
bool isEqual = YGFloatArrayEqual(position, layout.position) &&
YGFloatArrayEqual(dimensions, layout.dimensions) &&
YGFloatArrayEqual(margin, layout.margin) &&
@@ -40,5 +40,3 @@ bool LayoutResults::operator==(LayoutResults layout) const {
return isEqual;
}
} // namespace facebook::yoga

View File

@@ -11,9 +11,7 @@
#include <yoga/YGFloatOptional.h>
#include <yoga/Yoga-internal.h>
namespace facebook::yoga {
struct LayoutResults {
struct YGLayout {
std::array<float, 4> position = {};
std::array<float, 2> dimensions = {{YGUndefined, YGUndefined}};
std::array<float, 4> margin = {};
@@ -60,8 +58,6 @@ public:
flags, hadOverflowOffset, hadOverflow);
}
bool operator==(LayoutResults layout) const;
bool operator!=(LayoutResults layout) const { return !(*this == layout); }
bool operator==(YGLayout layout) const;
bool operator!=(YGLayout layout) const { return !(*this == layout); }
};
} // namespace facebook::yoga

View File

@@ -5,15 +5,18 @@
* LICENSE file in the root directory of this source tree.
*/
#include <yoga/node/Node.h>
#include "YGNode.h"
#include <algorithm>
#include <iostream>
#include <yoga/Utils.h>
#include "Utils.h"
namespace facebook::yoga {
using namespace facebook;
using namespace facebook::yoga;
using facebook::yoga::CompactValue;
Node::Node(yoga::Config* config) : config_{config} {
YGAssert(config != nullptr, "Attempting to construct Node with null config");
YGNode::YGNode(yoga::Config* config) : config_{config} {
YGAssert(
config != nullptr, "Attempting to construct YGNode with null config");
flags_.hasNewLayout = true;
if (config->useWebDefaults()) {
@@ -21,7 +24,7 @@ Node::Node(yoga::Config* config) : config_{config} {
}
}
Node::Node(Node&& node) {
YGNode::YGNode(YGNode&& node) {
context_ = node.context_;
flags_ = node.flags_;
measure_ = node.measure_;
@@ -40,7 +43,7 @@ Node::Node(Node&& node) {
}
}
void Node::print(void* printContext) {
void YGNode::print(void* printContext) {
if (print_.noContext != nullptr) {
if (flags_.printUsesContext) {
print_.withContext(this, printContext);
@@ -50,7 +53,7 @@ void Node::print(void* printContext) {
}
}
CompactValue Node::computeEdgeValueForRow(
CompactValue YGNode::computeEdgeValueForRow(
const Style::Edges& edges,
YGEdge rowEdge,
YGEdge edge,
@@ -68,7 +71,7 @@ CompactValue Node::computeEdgeValueForRow(
}
}
CompactValue Node::computeEdgeValueForColumn(
CompactValue YGNode::computeEdgeValueForColumn(
const Style::Edges& edges,
YGEdge edge,
CompactValue defaultValue) {
@@ -83,7 +86,7 @@ CompactValue Node::computeEdgeValueForColumn(
}
}
CompactValue Node::computeRowGap(
CompactValue YGNode::computeRowGap(
const Style::Gutters& gutters,
CompactValue defaultValue) {
if (!gutters[YGGutterRow].isUndefined()) {
@@ -95,7 +98,7 @@ CompactValue Node::computeRowGap(
}
}
CompactValue Node::computeColumnGap(
CompactValue YGNode::computeColumnGap(
const Style::Gutters& gutters,
CompactValue defaultValue) {
if (!gutters[YGGutterColumn].isUndefined()) {
@@ -107,7 +110,7 @@ CompactValue Node::computeColumnGap(
}
}
YGFloatOptional Node::getLeadingPosition(
YGFloatOptional YGNode::getLeadingPosition(
const YGFlexDirection axis,
const float axisSize) const {
auto leadingPosition = YGFlexDirectionIsRow(axis)
@@ -121,7 +124,7 @@ YGFloatOptional Node::getLeadingPosition(
return YGResolveValue(leadingPosition, axisSize);
}
YGFloatOptional Node::getTrailingPosition(
YGFloatOptional YGNode::getTrailingPosition(
const YGFlexDirection axis,
const float axisSize) const {
auto trailingPosition = YGFlexDirectionIsRow(axis)
@@ -135,7 +138,7 @@ YGFloatOptional Node::getTrailingPosition(
return YGResolveValue(trailingPosition, axisSize);
}
bool Node::isLeadingPositionDefined(const YGFlexDirection axis) const {
bool YGNode::isLeadingPositionDefined(const YGFlexDirection axis) const {
auto leadingPosition = YGFlexDirectionIsRow(axis)
? computeEdgeValueForRow(
style_.position(),
@@ -147,7 +150,7 @@ bool Node::isLeadingPositionDefined(const YGFlexDirection axis) const {
return !leadingPosition.isUndefined();
}
bool Node::isTrailingPosDefined(const YGFlexDirection axis) const {
bool YGNode::isTrailingPosDefined(const YGFlexDirection axis) const {
auto trailingPosition = YGFlexDirectionIsRow(axis)
? computeEdgeValueForRow(
style_.position(),
@@ -159,7 +162,7 @@ bool Node::isTrailingPosDefined(const YGFlexDirection axis) const {
return !trailingPosition.isUndefined();
}
YGFloatOptional Node::getLeadingMargin(
YGFloatOptional YGNode::getLeadingMargin(
const YGFlexDirection axis,
const float widthSize) const {
auto leadingMargin = YGFlexDirectionIsRow(axis)
@@ -170,7 +173,7 @@ YGFloatOptional Node::getLeadingMargin(
return YGResolveValueMargin(leadingMargin, widthSize);
}
YGFloatOptional Node::getTrailingMargin(
YGFloatOptional YGNode::getTrailingMargin(
const YGFlexDirection axis,
const float widthSize) const {
auto trailingMargin = YGFlexDirectionIsRow(axis)
@@ -181,13 +184,13 @@ YGFloatOptional Node::getTrailingMargin(
return YGResolveValueMargin(trailingMargin, widthSize);
}
YGFloatOptional Node::getMarginForAxis(
YGFloatOptional YGNode::getMarginForAxis(
const YGFlexDirection axis,
const float widthSize) const {
return getLeadingMargin(axis, widthSize) + getTrailingMargin(axis, widthSize);
}
YGFloatOptional Node::getGapForAxis(
YGFloatOptional YGNode::getGapForAxis(
const YGFlexDirection axis,
const float widthSize) const {
auto gap = YGFlexDirectionIsRow(axis)
@@ -196,7 +199,7 @@ YGFloatOptional Node::getGapForAxis(
return YGResolveValue(gap, widthSize);
}
YGSize Node::measure(
YGSize YGNode::measure(
float width,
YGMeasureMode widthMode,
float height,
@@ -208,7 +211,7 @@ YGSize Node::measure(
: measure_.noContext(this, width, widthMode, height, heightMode);
}
float Node::baseline(float width, float height, void* layoutContext) {
float YGNode::baseline(float width, float height, void* layoutContext) {
return flags_.baselineUsesContext
? baseline_.withContext(this, width, height, layoutContext)
: baseline_.noContext(this, width, height);
@@ -216,7 +219,7 @@ float Node::baseline(float width, float height, void* layoutContext) {
// Setters
void Node::setMeasureFunc(decltype(Node::measure_) measureFunc) {
void YGNode::setMeasureFunc(decltype(YGNode::measure_) measureFunc) {
if (measureFunc.noContext == nullptr) {
// TODO: t18095186 Move nodeType to opt-in function and mark appropriate
// places in Litho
@@ -235,38 +238,38 @@ void Node::setMeasureFunc(decltype(Node::measure_) measureFunc) {
measure_ = measureFunc;
}
void Node::setMeasureFunc(YGMeasureFunc measureFunc) {
void YGNode::setMeasureFunc(YGMeasureFunc measureFunc) {
flags_.measureUsesContext = false;
decltype(Node::measure_) m;
decltype(YGNode::measure_) m;
m.noContext = measureFunc;
setMeasureFunc(m);
}
YOGA_EXPORT void Node::setMeasureFunc(MeasureWithContextFn measureFunc) {
YOGA_EXPORT void YGNode::setMeasureFunc(MeasureWithContextFn measureFunc) {
flags_.measureUsesContext = true;
decltype(Node::measure_) m;
decltype(YGNode::measure_) m;
m.withContext = measureFunc;
setMeasureFunc(m);
}
void Node::replaceChild(Node* child, uint32_t index) {
void YGNode::replaceChild(YGNodeRef child, uint32_t index) {
children_[index] = child;
}
void Node::replaceChild(Node* oldChild, Node* newChild) {
void YGNode::replaceChild(YGNodeRef oldChild, YGNodeRef newChild) {
std::replace(children_.begin(), children_.end(), oldChild, newChild);
}
void Node::insertChild(Node* child, uint32_t index) {
void YGNode::insertChild(YGNodeRef child, uint32_t index) {
children_.insert(children_.begin() + index, child);
}
void Node::setConfig(yoga::Config* config) {
YGAssert(config != nullptr, "Attempting to set a null config on a Node");
void YGNode::setConfig(yoga::Config* config) {
YGAssert(config != nullptr, "Attempting to set a null config on a YGNode");
YGAssertWithConfig(
config,
config->useWebDefaults() == config_->useWebDefaults(),
"UseWebDefaults may not be changed after constructing a Node");
"UseWebDefaults may not be changed after constructing a YGNode");
if (yoga::configUpdateInvalidatesLayout(config_, config)) {
markDirtyAndPropagate();
@@ -275,7 +278,7 @@ void Node::setConfig(yoga::Config* config) {
config_ = config;
}
void Node::setDirty(bool isDirty) {
void YGNode::setDirty(bool isDirty) {
if (isDirty == flags_.isDirty) {
return;
}
@@ -285,8 +288,8 @@ void Node::setDirty(bool isDirty) {
}
}
bool Node::removeChild(Node* child) {
std::vector<Node*>::iterator p =
bool YGNode::removeChild(YGNodeRef child) {
std::vector<YGNodeRef>::iterator p =
std::find(children_.begin(), children_.end(), child);
if (p != children_.end()) {
children_.erase(p);
@@ -295,58 +298,59 @@ bool Node::removeChild(Node* child) {
return false;
}
void Node::removeChild(uint32_t index) {
void YGNode::removeChild(uint32_t index) {
children_.erase(children_.begin() + index);
}
void Node::setLayoutDirection(YGDirection direction) {
void YGNode::setLayoutDirection(YGDirection direction) {
layout_.setDirection(direction);
}
void Node::setLayoutMargin(float margin, int index) {
void YGNode::setLayoutMargin(float margin, int index) {
layout_.margin[index] = margin;
}
void Node::setLayoutBorder(float border, int index) {
void YGNode::setLayoutBorder(float border, int index) {
layout_.border[index] = border;
}
void Node::setLayoutPadding(float padding, int index) {
void YGNode::setLayoutPadding(float padding, int index) {
layout_.padding[index] = padding;
}
void Node::setLayoutLastOwnerDirection(YGDirection direction) {
void YGNode::setLayoutLastOwnerDirection(YGDirection direction) {
layout_.lastOwnerDirection = direction;
}
void Node::setLayoutComputedFlexBasis(const YGFloatOptional computedFlexBasis) {
void YGNode::setLayoutComputedFlexBasis(
const YGFloatOptional computedFlexBasis) {
layout_.computedFlexBasis = computedFlexBasis;
}
void Node::setLayoutPosition(float position, int index) {
void YGNode::setLayoutPosition(float position, int index) {
layout_.position[index] = position;
}
void Node::setLayoutComputedFlexBasisGeneration(
void YGNode::setLayoutComputedFlexBasisGeneration(
uint32_t computedFlexBasisGeneration) {
layout_.computedFlexBasisGeneration = computedFlexBasisGeneration;
}
void Node::setLayoutMeasuredDimension(float measuredDimension, int index) {
void YGNode::setLayoutMeasuredDimension(float measuredDimension, int index) {
layout_.measuredDimensions[index] = measuredDimension;
}
void Node::setLayoutHadOverflow(bool hadOverflow) {
void YGNode::setLayoutHadOverflow(bool hadOverflow) {
layout_.setHadOverflow(hadOverflow);
}
void Node::setLayoutDimension(float dimension, int index) {
void YGNode::setLayoutDimension(float dimension, int index) {
layout_.dimensions[index] = dimension;
}
// If both left and right are defined, then use left. Otherwise return +left or
// -right depending on which is defined.
YGFloatOptional Node::relativePosition(
YGFloatOptional YGNode::relativePosition(
const YGFlexDirection axis,
const float axisSize) const {
if (isLeadingPositionDefined(axis)) {
@@ -360,7 +364,7 @@ YGFloatOptional Node::relativePosition(
return trailingPosition;
}
void Node::setPosition(
void YGNode::setPosition(
const YGDirection direction,
const float mainSize,
const float crossSize,
@@ -398,7 +402,7 @@ void Node::setPosition(
trailing[crossAxis]);
}
YGValue Node::marginLeadingValue(const YGFlexDirection axis) const {
YGValue YGNode::marginLeadingValue(const YGFlexDirection axis) const {
if (YGFlexDirectionIsRow(axis) &&
!style_.margin()[YGEdgeStart].isUndefined()) {
return style_.margin()[YGEdgeStart];
@@ -407,7 +411,7 @@ YGValue Node::marginLeadingValue(const YGFlexDirection axis) const {
}
}
YGValue Node::marginTrailingValue(const YGFlexDirection axis) const {
YGValue YGNode::marginTrailingValue(const YGFlexDirection axis) const {
if (YGFlexDirectionIsRow(axis) && !style_.margin()[YGEdgeEnd].isUndefined()) {
return style_.margin()[YGEdgeEnd];
} else {
@@ -415,7 +419,7 @@ YGValue Node::marginTrailingValue(const YGFlexDirection axis) const {
}
}
YGValue Node::resolveFlexBasisPtr() const {
YGValue YGNode::resolveFlexBasisPtr() const {
YGValue flexBasis = style_.flexBasis();
if (flexBasis.unit != YGUnitAuto && flexBasis.unit != YGUnitUndefined) {
return flexBasis;
@@ -426,7 +430,7 @@ YGValue Node::resolveFlexBasisPtr() const {
return YGValueAuto;
}
void Node::resolveDimension() {
void YGNode::resolveDimension() {
using namespace yoga;
const Style& style = getStyle();
for (auto dim : {YGDimensionWidth, YGDimensionHeight}) {
@@ -439,7 +443,7 @@ void Node::resolveDimension() {
}
}
YGDirection Node::resolveDirection(const YGDirection ownerDirection) {
YGDirection YGNode::resolveDirection(const YGDirection ownerDirection) {
if (style_.direction() == YGDirectionInherit) {
return ownerDirection > YGDirectionInherit ? ownerDirection
: YGDirectionLTR;
@@ -448,18 +452,18 @@ YGDirection Node::resolveDirection(const YGDirection ownerDirection) {
}
}
YOGA_EXPORT void Node::clearChildren() {
YOGA_EXPORT void YGNode::clearChildren() {
children_.clear();
children_.shrink_to_fit();
}
// Other Methods
void Node::cloneChildrenIfNeeded(void* cloneContext) {
iterChildrenAfterCloningIfNeeded([](Node*, void*) {}, cloneContext);
void YGNode::cloneChildrenIfNeeded(void* cloneContext) {
iterChildrenAfterCloningIfNeeded([](YGNodeRef, void*) {}, cloneContext);
}
void Node::markDirtyAndPropagate() {
void YGNode::markDirtyAndPropagate() {
if (!flags_.isDirty) {
setDirty(true);
setLayoutComputedFlexBasis(YGFloatOptional());
@@ -469,14 +473,14 @@ void Node::markDirtyAndPropagate() {
}
}
void Node::markDirtyAndPropagateDownwards() {
void YGNode::markDirtyAndPropagateDownwards() {
flags_.isDirty = true;
for_each(children_.begin(), children_.end(), [](Node* childNode) {
for_each(children_.begin(), children_.end(), [](YGNodeRef childNode) {
childNode->markDirtyAndPropagateDownwards();
});
}
float Node::resolveFlexGrow() const {
float YGNode::resolveFlexGrow() const {
// Root nodes flexGrow should always be 0
if (owner_ == nullptr) {
return 0.0;
@@ -490,7 +494,7 @@ float Node::resolveFlexGrow() const {
return kDefaultFlexGrow;
}
float Node::resolveFlexShrink() const {
float YGNode::resolveFlexShrink() const {
if (owner_ == nullptr) {
return 0.0;
}
@@ -504,13 +508,13 @@ float Node::resolveFlexShrink() const {
return config_->useWebDefaults() ? kWebDefaultFlexShrink : kDefaultFlexShrink;
}
bool Node::isNodeFlexible() {
bool YGNode::isNodeFlexible() {
return (
(style_.positionType() != YGPositionTypeAbsolute) &&
(resolveFlexGrow() != 0 || resolveFlexShrink() != 0));
}
float Node::getLeadingBorder(const YGFlexDirection axis) const {
float YGNode::getLeadingBorder(const YGFlexDirection axis) const {
YGValue leadingBorder = YGFlexDirectionIsRow(axis)
? computeEdgeValueForRow(
style_.border(), YGEdgeStart, leading[axis], CompactValue::ofZero())
@@ -519,7 +523,7 @@ float Node::getLeadingBorder(const YGFlexDirection axis) const {
return fmaxf(leadingBorder.value, 0.0f);
}
float Node::getTrailingBorder(const YGFlexDirection axis) const {
float YGNode::getTrailingBorder(const YGFlexDirection axis) const {
YGValue trailingBorder = YGFlexDirectionIsRow(axis)
? computeEdgeValueForRow(
style_.border(), YGEdgeEnd, trailing[axis], CompactValue::ofZero())
@@ -528,7 +532,7 @@ float Node::getTrailingBorder(const YGFlexDirection axis) const {
return fmaxf(trailingBorder.value, 0.0f);
}
YGFloatOptional Node::getLeadingPadding(
YGFloatOptional YGNode::getLeadingPadding(
const YGFlexDirection axis,
const float widthSize) const {
auto leadingPadding = YGFlexDirectionIsRow(axis)
@@ -543,7 +547,7 @@ YGFloatOptional Node::getLeadingPadding(
YGResolveValue(leadingPadding, widthSize), YGFloatOptional(0.0f));
}
YGFloatOptional Node::getTrailingPadding(
YGFloatOptional YGNode::getTrailingPadding(
const YGFlexDirection axis,
const float widthSize) const {
auto trailingPadding = YGFlexDirectionIsRow(axis)
@@ -555,21 +559,21 @@ YGFloatOptional Node::getTrailingPadding(
YGResolveValue(trailingPadding, widthSize), YGFloatOptional(0.0f));
}
YGFloatOptional Node::getLeadingPaddingAndBorder(
YGFloatOptional YGNode::getLeadingPaddingAndBorder(
const YGFlexDirection axis,
const float widthSize) const {
return getLeadingPadding(axis, widthSize) +
YGFloatOptional(getLeadingBorder(axis));
}
YGFloatOptional Node::getTrailingPaddingAndBorder(
YGFloatOptional YGNode::getTrailingPaddingAndBorder(
const YGFlexDirection axis,
const float widthSize) const {
return getTrailingPadding(axis, widthSize) +
YGFloatOptional(getTrailingBorder(axis));
}
void Node::reset() {
void YGNode::reset() {
YGAssertWithNode(
this,
children_.size() == 0,
@@ -577,7 +581,5 @@ void Node::reset() {
YGAssertWithNode(
this, owner_ == nullptr, "Cannot reset a node still attached to a owner");
*this = Node{getConfig()};
*this = YGNode{getConfig()};
}
} // namespace facebook::yoga

View File

@@ -10,20 +10,15 @@
#include <cstdint>
#include <stdio.h>
#include <yoga/config/Config.h>
#include <yoga/node/LayoutResults.h>
#include "YGLayout.h"
#include <yoga/Yoga-internal.h>
#include <yoga/style/CompactValue.h>
#include <yoga/style/Style.h>
// Tag struct used to form the opaque YGNodeRef for the public C API
struct YGNode {};
namespace facebook::yoga {
#pragma pack(push)
#pragma pack(1)
struct NodeFlags {
struct YGNodeFlags {
bool hasNewLayout : 1;
bool isReferenceBaseline : 1;
bool isDirty : 1;
@@ -34,8 +29,7 @@ struct NodeFlags {
};
#pragma pack(pop)
class YOGA_EXPORT Node : public ::YGNode {
public:
struct YOGA_EXPORT YGNode {
using MeasureWithContextFn =
YGSize (*)(YGNode*, float, YGMeasureMode, float, YGMeasureMode, void*);
using BaselineWithContextFn = float (*)(YGNode*, float, float, void*);
@@ -43,7 +37,7 @@ public:
private:
void* context_ = nullptr;
NodeFlags flags_ = {};
YGNodeFlags flags_ = {};
union {
YGMeasureFunc noContext;
MeasureWithContextFn withContext;
@@ -57,12 +51,12 @@ private:
PrintWithContextFn withContext;
} print_ = {nullptr};
YGDirtiedFunc dirtied_ = nullptr;
Style style_ = {};
LayoutResults layout_ = {};
facebook::yoga::Style style_ = {};
YGLayout layout_ = {};
uint32_t lineIndex_ = 0;
Node* owner_ = nullptr;
std::vector<Node*> children_ = {};
Config* config_;
YGNodeRef owner_ = nullptr;
YGVector children_ = {};
facebook::yoga::Config* config_;
std::array<YGValue, 2> resolvedDimensions_ = {
{YGValueUndefined, YGValueUndefined}};
@@ -83,24 +77,27 @@ private:
// them (potentially incorrect) or ignore them (danger of leaks). Only ever
// use this after checking that there are no children.
// DO NOT CHANGE THE VISIBILITY OF THIS METHOD!
Node& operator=(Node&&) = default;
YGNode& operator=(YGNode&&) = default;
using CompactValue = facebook::yoga::CompactValue;
public:
Node() : Node{static_cast<Config*>(YGConfigGetDefault())} {
YGNode()
: YGNode{static_cast<facebook::yoga::Config*>(YGConfigGetDefault())} {
flags_.hasNewLayout = true;
}
explicit Node(Config* config);
~Node() = default; // cleanup of owner/children relationships in YGNodeFree
explicit YGNode(facebook::yoga::Config* config);
~YGNode() = default; // cleanup of owner/children relationships in YGNodeFree
Node(Node&&);
YGNode(YGNode&&);
// Does not expose true value semantics, as children are not cloned eagerly.
// Should we remove this?
Node(const Node& node) = default;
YGNode(const YGNode& node) = default;
// assignment means potential leaks of existing children, or alternatively
// freeing unowned memory, double free, or freeing stack memory.
Node& operator=(const Node&) = delete;
YGNode& operator=(const YGNode&) = delete;
// Getters
void* getContext() const { return context_; }
@@ -128,39 +125,38 @@ public:
YGDirtiedFunc getDirtied() const { return dirtied_; }
// For Performance reasons passing as reference.
Style& getStyle() { return style_; }
facebook::yoga::Style& getStyle() { return style_; }
const Style& getStyle() const { return style_; }
const facebook::yoga::Style& getStyle() const { return style_; }
// For Performance reasons passing as reference.
LayoutResults& getLayout() { return layout_; }
YGLayout& getLayout() { return layout_; }
const LayoutResults& getLayout() const { return layout_; }
const YGLayout& getLayout() const { return layout_; }
uint32_t getLineIndex() const { return lineIndex_; }
bool isReferenceBaseline() { return flags_.isReferenceBaseline; }
// returns the Node that owns this Node. An owner is used to identify
// the YogaTree that a Node belongs to. This method will return the parent
// of the Node when a Node only belongs to one YogaTree or nullptr when
// the Node is shared between two or more YogaTrees.
Node* getOwner() const { return owner_; }
// returns the YGNodeRef that owns this YGNode. An owner is used to identify
// the YogaTree that a YGNode belongs to. This method will return the parent
// of the YGNode when a YGNode only belongs to one YogaTree or nullptr when
// the YGNode is shared between two or more YogaTrees.
YGNodeRef getOwner() const { return owner_; }
// Deprecated, use getOwner() instead.
Node* getParent() const { return getOwner(); }
YGNodeRef getParent() const { return getOwner(); }
const std::vector<Node*>& getChildren() const { return children_; }
const YGVector& getChildren() const { return children_; }
// Applies a callback to all children, after cloning them if they are not
// owned.
template <typename T>
void iterChildrenAfterCloningIfNeeded(T callback, void* cloneContext) {
int i = 0;
for (Node*& child : children_) {
for (YGNodeRef& child : children_) {
if (child->getOwner() != this) {
child = static_cast<Node*>(
config_->cloneNode(child, this, i, cloneContext));
child = config_->cloneNode(child, this, i, cloneContext);
child->setOwner(this);
}
i += 1;
@@ -169,9 +165,9 @@ public:
}
}
Node* getChild(uint32_t index) const { return children_.at(index); }
YGNodeRef getChild(uint32_t index) const { return children_.at(index); }
Config* getConfig() const { return config_; }
facebook::yoga::Config* getConfig() const { return config_; }
bool isDirty() const { return flags_.isDirty; }
@@ -184,22 +180,22 @@ public:
}
static CompactValue computeEdgeValueForColumn(
const Style::Edges& edges,
const facebook::yoga::Style::Edges& edges,
YGEdge edge,
CompactValue defaultValue);
static CompactValue computeEdgeValueForRow(
const Style::Edges& edges,
const facebook::yoga::Style::Edges& edges,
YGEdge rowEdge,
YGEdge edge,
CompactValue defaultValue);
static CompactValue computeRowGap(
const Style::Gutters& gutters,
const facebook::yoga::Style::Gutters& gutters,
CompactValue defaultValue);
static CompactValue computeColumnGap(
const Style::Gutters& gutters,
const facebook::yoga::Style::Gutters& gutters,
CompactValue defaultValue);
// Methods related to positions, margin, padding and border
@@ -279,9 +275,9 @@ public:
void setDirtiedFunc(YGDirtiedFunc dirtiedFunc) { dirtied_ = dirtiedFunc; }
void setStyle(const Style& style) { style_ = style; }
void setStyle(const facebook::yoga::Style& style) { style_ = style; }
void setLayout(const LayoutResults& layout) { layout_ = layout; }
void setLayout(const YGLayout& layout) { layout_ = layout; }
void setLineIndex(uint32_t lineIndex) { lineIndex_ = lineIndex; }
@@ -289,13 +285,13 @@ public:
flags_.isReferenceBaseline = isReferenceBaseline;
}
void setOwner(Node* owner) { owner_ = owner; }
void setOwner(YGNodeRef owner) { owner_ = owner; }
void setChildren(const std::vector<Node*>& children) { children_ = children; }
void setChildren(const YGVector& children) { children_ = children; }
// TODO: rvalue override for setChildren
void setConfig(Config* config);
void setConfig(facebook::yoga::Config* config);
void setDirty(bool isDirty);
void setLayoutLastOwnerDirection(YGDirection direction);
@@ -325,11 +321,11 @@ public:
YGDirection resolveDirection(const YGDirection ownerDirection);
void clearChildren();
/// Replaces the occurrences of oldChild with newChild
void replaceChild(Node* oldChild, Node* newChild);
void replaceChild(Node* child, uint32_t index);
void insertChild(Node* child, uint32_t index);
void replaceChild(YGNodeRef oldChild, YGNodeRef newChild);
void replaceChild(YGNodeRef child, uint32_t index);
void insertChild(YGNodeRef child, uint32_t index);
/// Removes the first occurrence of child
bool removeChild(Node* child);
bool removeChild(YGNodeRef child);
void removeChild(uint32_t index);
void cloneChildrenIfNeeded(void*);
@@ -339,5 +335,3 @@ public:
bool isNodeFlexible();
void reset();
};
} // namespace facebook::yoga

View File

@@ -12,8 +12,9 @@
#include <yoga/YGEnums.h>
#include "YGNodePrint.h"
#include "YGNode.h"
#include <yoga/Yoga-internal.h>
#include <yoga/Utils.h>
#include "Utils.h"
namespace facebook::yoga {
typedef std::string string;
@@ -91,7 +92,7 @@ static void appendEdges(
const string& key,
const Style::Edges& edges) {
if (areFourValuesEqual(edges)) {
auto edgeValue = yoga::Node::computeEdgeValueForColumn(
auto edgeValue = YGNode::computeEdgeValueForColumn(
edges, YGEdgeLeft, CompactValue::ofZero());
appendNumberIfNotZero(base, key, edgeValue);
} else {
@@ -109,16 +110,16 @@ static void appendEdgeIfNotUndefined(
const YGEdge edge) {
// TODO: this doesn't take RTL / YGEdgeStart / YGEdgeEnd into account
auto value = (edge == YGEdgeLeft || edge == YGEdgeRight)
? yoga::Node::computeEdgeValueForRow(
? YGNode::computeEdgeValueForRow(
edges, edge, edge, CompactValue::ofUndefined())
: yoga::Node::computeEdgeValueForColumn(
: YGNode::computeEdgeValueForColumn(
edges, edge, CompactValue::ofUndefined());
appendNumberIfNotUndefined(base, str, value);
}
void YGNodeToString(
std::string& str,
yoga::Node* node,
YGNodeRef node,
YGPrintOptions options,
uint32_t level) {
indent(str, level);
@@ -140,27 +141,27 @@ void YGNodeToString(
if (options & YGPrintOptionsStyle) {
appendFormattedString(str, "style=\"");
const auto& style = node->getStyle();
if (style.flexDirection() != yoga::Node{}.getStyle().flexDirection()) {
if (style.flexDirection() != YGNode().getStyle().flexDirection()) {
appendFormattedString(
str,
"flex-direction: %s; ",
YGFlexDirectionToString(style.flexDirection()));
}
if (style.justifyContent() != yoga::Node{}.getStyle().justifyContent()) {
if (style.justifyContent() != YGNode().getStyle().justifyContent()) {
appendFormattedString(
str,
"justify-content: %s; ",
YGJustifyToString(style.justifyContent()));
}
if (style.alignItems() != yoga::Node{}.getStyle().alignItems()) {
if (style.alignItems() != YGNode().getStyle().alignItems()) {
appendFormattedString(
str, "align-items: %s; ", YGAlignToString(style.alignItems()));
}
if (style.alignContent() != yoga::Node{}.getStyle().alignContent()) {
if (style.alignContent() != YGNode().getStyle().alignContent()) {
appendFormattedString(
str, "align-content: %s; ", YGAlignToString(style.alignContent()));
}
if (style.alignSelf() != yoga::Node{}.getStyle().alignSelf()) {
if (style.alignSelf() != YGNode().getStyle().alignSelf()) {
appendFormattedString(
str, "align-self: %s; ", YGAlignToString(style.alignSelf()));
}
@@ -169,17 +170,17 @@ void YGNodeToString(
appendNumberIfNotAuto(str, "flex-basis", style.flexBasis());
appendFloatOptionalIfDefined(str, "flex", style.flex());
if (style.flexWrap() != yoga::Node{}.getStyle().flexWrap()) {
if (style.flexWrap() != YGNode().getStyle().flexWrap()) {
appendFormattedString(
str, "flex-wrap: %s; ", YGWrapToString(style.flexWrap()));
}
if (style.overflow() != yoga::Node{}.getStyle().overflow()) {
if (style.overflow() != YGNode().getStyle().overflow()) {
appendFormattedString(
str, "overflow: %s; ", YGOverflowToString(style.overflow()));
}
if (style.display() != yoga::Node{}.getStyle().display()) {
if (style.display() != YGNode().getStyle().display()) {
appendFormattedString(
str, "display: %s; ", YGDisplayToString(style.display()));
}
@@ -187,16 +188,15 @@ void YGNodeToString(
appendEdges(str, "padding", style.padding());
appendEdges(str, "border", style.border());
if (yoga::Node::computeColumnGap(
style.gap(), CompactValue::ofUndefined()) !=
yoga::Node::computeColumnGap(
yoga::Node{}.getStyle().gap(), CompactValue::ofUndefined())) {
if (YGNode::computeColumnGap(style.gap(), CompactValue::ofUndefined()) !=
YGNode::computeColumnGap(
YGNode().getStyle().gap(), CompactValue::ofUndefined())) {
appendNumberIfNotUndefined(
str, "column-gap", style.gap()[YGGutterColumn]);
}
if (yoga::Node::computeRowGap(style.gap(), CompactValue::ofUndefined()) !=
yoga::Node::computeRowGap(
yoga::Node{}.getStyle().gap(), CompactValue::ofUndefined())) {
if (YGNode::computeRowGap(style.gap(), CompactValue::ofUndefined()) !=
YGNode::computeRowGap(
YGNode().getStyle().gap(), CompactValue::ofUndefined())) {
appendNumberIfNotUndefined(str, "row-gap", style.gap()[YGGutterRow]);
}
@@ -211,7 +211,7 @@ void YGNodeToString(
appendNumberIfNotAuto(
str, "min-height", style.minDimensions()[YGDimensionHeight]);
if (style.positionType() != yoga::Node{}.getStyle().positionType()) {
if (style.positionType() != YGNode().getStyle().positionType()) {
appendFormattedString(
str, "position: %s; ", YGPositionTypeToString(style.positionType()));
}
@@ -232,7 +232,7 @@ void YGNodeToString(
if (options & YGPrintOptionsChildren && childCount > 0) {
for (uint32_t i = 0; i < childCount; i++) {
appendFormattedString(str, "\n");
YGNodeToString(str, node->getChild(i), options, level + 1);
YGNodeToString(str, YGNodeGetChild(node, i), options, level + 1);
}
appendFormattedString(str, "\n");
indent(str, level);

View File

@@ -12,13 +12,12 @@
#include <string>
#include <yoga/Yoga.h>
#include <yoga/node/Node.h>
namespace facebook::yoga {
void YGNodeToString(
std::string& str,
yoga::Node* node,
YGNodeRef node,
YGPrintOptions options,
uint32_t level);

View File

@@ -16,6 +16,8 @@
#include <yoga/style/CompactValue.h>
using YGVector = std::vector<YGNodeRef>;
YG_EXTERN_C_BEGIN
void YGNodeCalculateLayoutWithContext(

File diff suppressed because it is too large Load Diff

View File

@@ -79,7 +79,7 @@ WIN_EXPORT void YGNodeRemoveAllChildren(YGNodeRef node);
WIN_EXPORT YGNodeRef YGNodeGetChild(YGNodeRef node, uint32_t index);
WIN_EXPORT YGNodeRef YGNodeGetOwner(YGNodeRef node);
WIN_EXPORT YGNodeRef YGNodeGetParent(YGNodeRef node);
WIN_EXPORT uint32_t YGNodeGetChildCount(YGNodeConstRef node);
WIN_EXPORT uint32_t YGNodeGetChildCount(YGNodeRef node);
WIN_EXPORT void YGNodeSetChildren(
YGNodeRef owner,
const YGNodeRef* children,

View File

@@ -73,10 +73,7 @@ void Event::subscribe(std::function<Subscriber>&& subscriber) {
push(new Node{std::move(subscriber)});
}
void Event::publish(
YGNodeConstRef node,
Type eventType,
const Data& eventData) {
void Event::publish(const YGNode& node, Type eventType, const Data& eventData) {
for (auto subscriber = subscribers.load(std::memory_order_relaxed);
subscriber != nullptr;
subscriber = subscriber->next) {

View File

@@ -7,13 +7,15 @@
#pragma once
#include <yoga/Yoga.h>
#include <functional>
#include <vector>
#include <array>
#include <yoga/YGEnums.h>
#include <stdint.h>
struct YGConfig;
struct YGNode;
namespace facebook::yoga {
enum struct LayoutType : int {
@@ -61,7 +63,7 @@ struct YOGA_EXPORT Event {
NodeBaselineEnd,
};
class Data;
using Subscriber = void(YGNodeConstRef, Type, Data);
using Subscriber = void(const YGNode&, Type, Data);
using Subscribers = std::vector<std::function<Subscriber>>;
template <Type E>
@@ -85,22 +87,27 @@ struct YOGA_EXPORT Event {
static void subscribe(std::function<Subscriber>&& subscriber);
template <Type E>
static void publish(YGNodeConstRef node, const TypedData<E>& eventData = {}) {
static void publish(const YGNode& node, const TypedData<E>& eventData = {}) {
publish(node, E, Data{eventData});
}
template <Type E>
static void publish(const YGNode* node, const TypedData<E>& eventData = {}) {
publish<E>(*node, eventData);
}
private:
static void publish(YGNodeConstRef, Type, const Data&);
static void publish(const YGNode&, Type, const Data&);
};
template <>
struct Event::TypedData<Event::NodeAllocation> {
YGConfigRef config;
YGConfig* config;
};
template <>
struct Event::TypedData<Event::NodeDeallocation> {
YGConfigRef config;
YGConfig* config;
};
template <>

View File

@@ -9,7 +9,7 @@
#include "log.h"
#include <yoga/config/Config.h>
#include <yoga/node/Node.h>
#include "YGNode.h"
namespace facebook::yoga::detail {
@@ -17,7 +17,7 @@ namespace {
void vlog(
yoga::Config* config,
yoga::Node* node,
YGNode* node,
YGLogLevel level,
void* context,
const char* format,
@@ -30,7 +30,7 @@ void vlog(
} // namespace
YOGA_EXPORT void Log::log(
yoga::Node* node,
YGNode* node,
YGLogLevel level,
void* context,
const char* format,

View File

@@ -8,14 +8,16 @@
#pragma once
#include <yoga/YGEnums.h>
#include <yoga/node/Node.h>
#include <yoga/config/Config.h>
struct YGNode;
struct YGConfig;
namespace facebook::yoga::detail {
struct Log {
static void log(
yoga::Node* node,
YGNode* node,
YGLogLevel level,
void*,
const char* message,