Revert D48710084: C++ Cleanup 1/N: Reorganize YGStyle

Differential Revision:
D48710084

Original commit changeset: 20961aee30d5

Original Phabricator Diff: D48710084

fbshipit-source-id: 79cda4f13979b8d0cdf87dabbfc13cbd17abe488
This commit is contained in:
Zhiyao Zhou
2023-08-29 23:27:25 -07:00
committed by Facebook GitHub Bot
parent 13c5ce2234
commit 2a32637c56
15 changed files with 183 additions and 182 deletions

View File

@@ -35,14 +35,7 @@ Pod::Spec.new do |spec|
'-std=c++17', '-std=c++17',
'-fPIC' '-fPIC'
] ]
spec.swift_version = '5.1'
spec.source_files = 'yoga/**/*.{h,cpp}' spec.source_files = 'yoga/**/*.{h,cpp}'
spec.header_mappings_dir = 'yoga' spec.public_header_files = 'yoga/{Yoga,YGEnums,YGMacros,YGValue}.h'
spec.swift_version = '5.1'
public_header_files = 'yoga/{Yoga,YGEnums,YGMacros,YGValue}.h'
spec.public_header_files = public_header_files
all_header_files = 'yoga/**/*.h'
spec.private_header_files = Dir.glob(all_header_files) - Dir.glob(public_header_files)
end end

View File

@@ -7,11 +7,11 @@
#define YOGA_COMPACT_VALUE_TEST #define YOGA_COMPACT_VALUE_TEST
#include <yoga/style/CompactValue.h> #include <yoga/CompactValue.h>
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <cmath> #include <cmath>
using facebook::yoga::CompactValue; using facebook::yoga::detail::CompactValue;
const auto tooSmall = nextafterf(CompactValue::LOWER_BOUND, -INFINITY); const auto tooSmall = nextafterf(CompactValue::LOWER_BOUND, -INFINITY);
const auto tooLargePoints = const auto tooLargePoints =

View File

@@ -8,8 +8,9 @@
#include <cstdint> #include <cstdint>
#include <type_traits> #include <type_traits>
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <yoga/Yoga.h> #include <yoga/YGEnums.h>
#include <yoga/style/Style.h> #include <yoga/YGStyle.h>
#include <yoga/YGValue.h>
#define ACCESSOR_TESTS_1(NAME, X) \ #define ACCESSOR_TESTS_1(NAME, X) \
style.NAME() = X; \ style.NAME() = X; \
@@ -30,14 +31,14 @@
#define ACCESSOR_TESTS_N(a, b, c, d, e, COUNT, ...) ACCESSOR_TESTS_##COUNT #define ACCESSOR_TESTS_N(a, b, c, d, e, COUNT, ...) ACCESSOR_TESTS_##COUNT
#define ACCESSOR_TESTS(...) ACCESSOR_TESTS_N(__VA_ARGS__, 5, 4, 3, 2, 1) #define ACCESSOR_TESTS(...) ACCESSOR_TESTS_N(__VA_ARGS__, 5, 4, 3, 2, 1)
#define INDEX_ACCESSOR_TESTS_1(NAME, IDX, X) \ #define INDEX_ACCESSOR_TESTS_1(NAME, IDX, X) \
{ \ { \
auto style = Style{}; \ auto style = YGStyle{}; \
style.NAME()[IDX] = X; \ style.NAME()[IDX] = X; \
ASSERT_EQ(style.NAME()[IDX], X); \ ASSERT_EQ(style.NAME()[IDX], X); \
auto asArray = decltype(std::declval<const Style&>().NAME()){X}; \ auto asArray = decltype(std::declval<const YGStyle&>().NAME()){X}; \
style.NAME() = asArray; \ style.NAME() = asArray; \
ASSERT_EQ(static_cast<decltype(asArray)>(style.NAME()), asArray); \ ASSERT_EQ(static_cast<decltype(asArray)>(style.NAME()), asArray); \
} }
#define INDEX_ACCESSOR_TESTS_2(NAME, IDX, X, Y) \ #define INDEX_ACCESSOR_TESTS_2(NAME, IDX, X, Y) \
@@ -63,20 +64,22 @@
// test macro for up to 5 values. If more are needed, extend the macros above. // test macro for up to 5 values. If more are needed, extend the macros above.
#define ACCESSOR_TEST(NAME, DEFAULT_VAL, ...) \ #define ACCESSOR_TEST(NAME, DEFAULT_VAL, ...) \
TEST(Style, style_##NAME##_access) { \ TEST(YGStyle, style_##NAME##_access) { \
auto style = Style{}; \ auto style = YGStyle{}; \
ASSERT_EQ(style.NAME(), DEFAULT_VAL); \ ASSERT_EQ(style.NAME(), DEFAULT_VAL); \
ACCESSOR_TESTS(__VA_ARGS__)(NAME, __VA_ARGS__) \ ACCESSOR_TESTS(__VA_ARGS__)(NAME, __VA_ARGS__) \
} }
#define INDEX_ACCESSOR_TEST(NAME, DEFAULT_VAL, IDX, ...) \ #define INDEX_ACCESSOR_TEST(NAME, DEFAULT_VAL, IDX, ...) \
TEST(Style, style_##NAME##_access) { \ TEST(YGStyle, style_##NAME##_access) { \
ASSERT_EQ(Style{}.NAME()[IDX], DEFAULT_VAL); \ ASSERT_EQ(YGStyle{}.NAME()[IDX], DEFAULT_VAL); \
INDEX_ACCESSOR_TESTS(__VA_ARGS__)(NAME, IDX, __VA_ARGS__) \ INDEX_ACCESSOR_TESTS(__VA_ARGS__)(NAME, IDX, __VA_ARGS__) \
} }
namespace facebook::yoga { namespace facebook::yoga {
using CompactValue = detail::CompactValue;
// TODO: MSVC doesn't like the macros // TODO: MSVC doesn't like the macros
#ifndef _MSC_VER #ifndef _MSC_VER

View File

@@ -38,7 +38,7 @@ static_assert(
#define VISIBLE_FOR_TESTING private: #define VISIBLE_FOR_TESTING private:
#endif #endif
namespace facebook::yoga { namespace facebook::yoga::detail {
// This class stores YGValue in 32 bits. // This class stores YGValue in 32 bits.
// - The value does not matter for Undefined and Auto. NaNs are used for their // - The value does not matter for Undefined and Auto. NaNs are used for their
@@ -207,4 +207,4 @@ constexpr bool operator!=(CompactValue a, CompactValue b) noexcept {
return !(a == b); return !(a == b);
} }
} // namespace facebook::yoga } // namespace facebook::yoga::detail

View File

@@ -8,8 +8,8 @@
#pragma once #pragma once
#include "YGNode.h" #include "YGNode.h"
#include <yoga/Yoga-internal.h> #include "Yoga-internal.h"
#include <yoga/style/CompactValue.h> #include "CompactValue.h"
// This struct is an helper model to hold the data for step 4 of flexbox algo, // This struct is an helper model to hold the data for step 4 of flexbox algo,
// which is collecting the flex items in a line. // which is collecting the flex items in a line.
@@ -56,8 +56,8 @@ struct YGCollectFlexItemsRowValues {
bool YGValueEqual(const YGValue& a, const YGValue& b); bool YGValueEqual(const YGValue& a, const YGValue& b);
inline bool YGValueEqual( inline bool YGValueEqual(
facebook::yoga::CompactValue a, facebook::yoga::detail::CompactValue a,
facebook::yoga::CompactValue b) { facebook::yoga::detail::CompactValue b) {
return YGValueEqual((YGValue) a, (YGValue) b); return YGValueEqual((YGValue) a, (YGValue) b);
} }
@@ -115,7 +115,7 @@ inline YGFloatOptional YGResolveValue(
} }
inline YGFloatOptional YGResolveValue( inline YGFloatOptional YGResolveValue(
facebook::yoga::CompactValue value, facebook::yoga::detail::CompactValue value,
float ownerSize) { float ownerSize) {
return YGResolveValue((YGValue) value, ownerSize); return YGResolveValue((YGValue) value, ownerSize);
} }
@@ -140,7 +140,7 @@ inline YGFlexDirection YGResolveFlexDirection(
} }
inline YGFloatOptional YGResolveValueMargin( inline YGFloatOptional YGResolveValueMargin(
facebook::yoga::CompactValue value, facebook::yoga::detail::CompactValue value,
const float ownerSize) { const float ownerSize) {
return value.isAuto() ? YGFloatOptional{0} : YGResolveValue(value, ownerSize); return value.isAuto() ? YGFloatOptional{0} : YGResolveValue(value, ownerSize);
} }

View File

@@ -9,8 +9,8 @@
#include <yoga/Yoga.h> #include <yoga/Yoga.h>
#include <yoga/BitUtils.h> #include "BitUtils.h"
#include <yoga/Yoga-internal.h> #include "Yoga-internal.h"
namespace facebook::yoga { namespace facebook::yoga {

View File

@@ -9,7 +9,7 @@
#include <cmath> #include <cmath>
#include <limits> #include <limits>
#include <yoga/Yoga-internal.h> #include "Yoga-internal.h"
struct YGFloatOptional { struct YGFloatOptional {
private: private:

View File

@@ -7,9 +7,9 @@
#pragma once #pragma once
#include <yoga/BitUtils.h> #include "BitUtils.h"
#include <yoga/YGFloatOptional.h> #include "YGFloatOptional.h"
#include <yoga/Yoga-internal.h> #include "Yoga-internal.h"
struct YGLayout { struct YGLayout {
std::array<float, 4> position = {}; std::array<float, 4> position = {};

View File

@@ -11,8 +11,7 @@
#include "Utils.h" #include "Utils.h"
using namespace facebook; using namespace facebook;
using namespace facebook::yoga; using facebook::yoga::detail::CompactValue;
using facebook::yoga::CompactValue;
YGNode::YGNode(const YGConfigRef config) : config_{config} { YGNode::YGNode(const YGConfigRef config) : config_{config} {
YGAssert( YGAssert(
@@ -54,7 +53,7 @@ void YGNode::print(void* printContext) {
} }
CompactValue YGNode::computeEdgeValueForRow( CompactValue YGNode::computeEdgeValueForRow(
const Style::Edges& edges, const YGStyle::Edges& edges,
YGEdge rowEdge, YGEdge rowEdge,
YGEdge edge, YGEdge edge,
CompactValue defaultValue) { CompactValue defaultValue) {
@@ -72,7 +71,7 @@ CompactValue YGNode::computeEdgeValueForRow(
} }
CompactValue YGNode::computeEdgeValueForColumn( CompactValue YGNode::computeEdgeValueForColumn(
const Style::Edges& edges, const YGStyle::Edges& edges,
YGEdge edge, YGEdge edge,
CompactValue defaultValue) { CompactValue defaultValue) {
if (!edges[edge].isUndefined()) { if (!edges[edge].isUndefined()) {
@@ -87,7 +86,7 @@ CompactValue YGNode::computeEdgeValueForColumn(
} }
CompactValue YGNode::computeRowGap( CompactValue YGNode::computeRowGap(
const Style::Gutters& gutters, const YGStyle::Gutters& gutters,
CompactValue defaultValue) { CompactValue defaultValue) {
if (!gutters[YGGutterRow].isUndefined()) { if (!gutters[YGGutterRow].isUndefined()) {
return gutters[YGGutterRow]; return gutters[YGGutterRow];
@@ -99,7 +98,7 @@ CompactValue YGNode::computeRowGap(
} }
CompactValue YGNode::computeColumnGap( CompactValue YGNode::computeColumnGap(
const Style::Gutters& gutters, const YGStyle::Gutters& gutters,
CompactValue defaultValue) { CompactValue defaultValue) {
if (!gutters[YGGutterColumn].isUndefined()) { if (!gutters[YGGutterColumn].isUndefined()) {
return gutters[YGGutterColumn]; return gutters[YGGutterColumn];
@@ -432,7 +431,7 @@ YGValue YGNode::resolveFlexBasisPtr() const {
void YGNode::resolveDimension() { void YGNode::resolveDimension() {
using namespace yoga; using namespace yoga;
const Style& style = getStyle(); const YGStyle& style = getStyle();
for (auto dim : {YGDimensionWidth, YGDimensionHeight}) { for (auto dim : {YGDimensionWidth, YGDimensionHeight}) {
if (!style.maxDimensions()[dim].isUndefined() && if (!style.maxDimensions()[dim].isUndefined() &&
YGValueEqual(style.maxDimensions()[dim], style.minDimensions()[dim])) { YGValueEqual(style.maxDimensions()[dim], style.minDimensions()[dim])) {

View File

@@ -9,12 +9,11 @@
#include <cstdint> #include <cstdint>
#include <stdio.h> #include <stdio.h>
#include "CompactValue.h"
#include "YGConfig.h" #include "YGConfig.h"
#include "YGLayout.h" #include "YGLayout.h"
#include <yoga/Yoga-internal.h> #include "YGStyle.h"
#include "Yoga-internal.h"
#include <yoga/style/CompactValue.h>
#include <yoga/style/Style.h>
YGConfigRef YGConfigGetDefault(); YGConfigRef YGConfigGetDefault();
@@ -53,7 +52,7 @@ private:
PrintWithContextFn withContext; PrintWithContextFn withContext;
} print_ = {nullptr}; } print_ = {nullptr};
YGDirtiedFunc dirtied_ = nullptr; YGDirtiedFunc dirtied_ = nullptr;
facebook::yoga::Style style_ = {}; YGStyle style_ = {};
YGLayout layout_ = {}; YGLayout layout_ = {};
uint32_t lineIndex_ = 0; uint32_t lineIndex_ = 0;
YGNodeRef owner_ = nullptr; YGNodeRef owner_ = nullptr;
@@ -81,7 +80,7 @@ private:
// DO NOT CHANGE THE VISIBILITY OF THIS METHOD! // DO NOT CHANGE THE VISIBILITY OF THIS METHOD!
YGNode& operator=(YGNode&&) = default; YGNode& operator=(YGNode&&) = default;
using CompactValue = facebook::yoga::CompactValue; using CompactValue = facebook::yoga::detail::CompactValue;
public: public:
YGNode() : YGNode{YGConfigGetDefault()} { flags_.hasNewLayout = true; } YGNode() : YGNode{YGConfigGetDefault()} { flags_.hasNewLayout = true; }
@@ -124,9 +123,9 @@ public:
YGDirtiedFunc getDirtied() const { return dirtied_; } YGDirtiedFunc getDirtied() const { return dirtied_; }
// For Performance reasons passing as reference. // For Performance reasons passing as reference.
facebook::yoga::Style& getStyle() { return style_; } YGStyle& getStyle() { return style_; }
const facebook::yoga::Style& getStyle() const { return style_; } const YGStyle& getStyle() const { return style_; }
// For Performance reasons passing as reference. // For Performance reasons passing as reference.
YGLayout& getLayout() { return layout_; } YGLayout& getLayout() { return layout_; }
@@ -179,22 +178,22 @@ public:
} }
static CompactValue computeEdgeValueForColumn( static CompactValue computeEdgeValueForColumn(
const facebook::yoga::Style::Edges& edges, const YGStyle::Edges& edges,
YGEdge edge, YGEdge edge,
CompactValue defaultValue); CompactValue defaultValue);
static CompactValue computeEdgeValueForRow( static CompactValue computeEdgeValueForRow(
const facebook::yoga::Style::Edges& edges, const YGStyle::Edges& edges,
YGEdge rowEdge, YGEdge rowEdge,
YGEdge edge, YGEdge edge,
CompactValue defaultValue); CompactValue defaultValue);
static CompactValue computeRowGap( static CompactValue computeRowGap(
const facebook::yoga::Style::Gutters& gutters, const YGStyle::Gutters& gutters,
CompactValue defaultValue); CompactValue defaultValue);
static CompactValue computeColumnGap( static CompactValue computeColumnGap(
const facebook::yoga::Style::Gutters& gutters, const YGStyle::Gutters& gutters,
CompactValue defaultValue); CompactValue defaultValue);
// Methods related to positions, margin, padding and border // Methods related to positions, margin, padding and border
@@ -274,7 +273,7 @@ public:
void setDirtiedFunc(YGDirtiedFunc dirtiedFunc) { dirtied_ = dirtiedFunc; } void setDirtiedFunc(YGDirtiedFunc dirtiedFunc) { dirtied_ = dirtiedFunc; }
void setStyle(const facebook::yoga::Style& style) { style_ = style; } void setStyle(const YGStyle& style) { style_ = style; }
void setLayout(const YGLayout& layout) { layout_ = layout; } void setLayout(const YGLayout& layout) { layout_ = layout; }

View File

@@ -13,7 +13,7 @@
#include "YGNodePrint.h" #include "YGNodePrint.h"
#include "YGNode.h" #include "YGNode.h"
#include <yoga/Yoga-internal.h> #include "Yoga-internal.h"
#include "Utils.h" #include "Utils.h"
namespace facebook::yoga { namespace facebook::yoga {
@@ -25,7 +25,7 @@ static void indent(string& base, uint32_t level) {
} }
} }
static bool areFourValuesEqual(const Style::Edges& four) { static bool areFourValuesEqual(const YGStyle::Edges& four) {
return YGValueEqual(four[0], four[1]) && YGValueEqual(four[0], four[2]) && return YGValueEqual(four[0], four[1]) && YGValueEqual(four[0], four[2]) &&
YGValueEqual(four[0], four[3]); YGValueEqual(four[0], four[3]);
} }
@@ -90,10 +90,10 @@ static void appendNumberIfNotZero(
static void appendEdges( static void appendEdges(
string& base, string& base,
const string& key, const string& key,
const Style::Edges& edges) { const YGStyle::Edges& edges) {
if (areFourValuesEqual(edges)) { if (areFourValuesEqual(edges)) {
auto edgeValue = YGNode::computeEdgeValueForColumn( auto edgeValue = YGNode::computeEdgeValueForColumn(
edges, YGEdgeLeft, CompactValue::ofZero()); edges, YGEdgeLeft, detail::CompactValue::ofZero());
appendNumberIfNotZero(base, key, edgeValue); appendNumberIfNotZero(base, key, edgeValue);
} else { } else {
for (int edge = YGEdgeLeft; edge != YGEdgeAll; ++edge) { for (int edge = YGEdgeLeft; edge != YGEdgeAll; ++edge) {
@@ -106,14 +106,14 @@ static void appendEdges(
static void appendEdgeIfNotUndefined( static void appendEdgeIfNotUndefined(
string& base, string& base,
const string& str, const string& str,
const Style::Edges& edges, const YGStyle::Edges& edges,
const YGEdge edge) { const YGEdge edge) {
// TODO: this doesn't take RTL / YGEdgeStart / YGEdgeEnd into account // TODO: this doesn't take RTL / YGEdgeStart / YGEdgeEnd into account
auto value = (edge == YGEdgeLeft || edge == YGEdgeRight) auto value = (edge == YGEdgeLeft || edge == YGEdgeRight)
? YGNode::computeEdgeValueForRow( ? YGNode::computeEdgeValueForRow(
edges, edge, edge, CompactValue::ofUndefined()) edges, edge, edge, detail::CompactValue::ofUndefined())
: YGNode::computeEdgeValueForColumn( : YGNode::computeEdgeValueForColumn(
edges, edge, CompactValue::ofUndefined()); edges, edge, detail::CompactValue::ofUndefined());
appendNumberIfNotUndefined(base, str, value); appendNumberIfNotUndefined(base, str, value);
} }
@@ -188,15 +188,17 @@ void YGNodeToString(
appendEdges(str, "padding", style.padding()); appendEdges(str, "padding", style.padding());
appendEdges(str, "border", style.border()); appendEdges(str, "border", style.border());
if (YGNode::computeColumnGap(style.gap(), CompactValue::ofUndefined()) != if (YGNode::computeColumnGap(
style.gap(), detail::CompactValue::ofUndefined()) !=
YGNode::computeColumnGap( YGNode::computeColumnGap(
YGNode().getStyle().gap(), CompactValue::ofUndefined())) { YGNode().getStyle().gap(), detail::CompactValue::ofUndefined())) {
appendNumberIfNotUndefined( appendNumberIfNotUndefined(
str, "column-gap", style.gap()[YGGutterColumn]); str, "column-gap", style.gap()[YGGutterColumn]);
} }
if (YGNode::computeRowGap(style.gap(), CompactValue::ofUndefined()) != if (YGNode::computeRowGap(
style.gap(), detail::CompactValue::ofUndefined()) !=
YGNode::computeRowGap( YGNode::computeRowGap(
YGNode().getStyle().gap(), CompactValue::ofUndefined())) { YGNode().getStyle().gap(), detail::CompactValue::ofUndefined())) {
appendNumberIfNotUndefined(str, "row-gap", style.gap()[YGGutterRow]); appendNumberIfNotUndefined(str, "row-gap", style.gap()[YGGutterRow]);
} }

View File

@@ -5,13 +5,11 @@
* LICENSE file in the root directory of this source tree. * LICENSE file in the root directory of this source tree.
*/ */
#include <yoga/style/Style.h> #include "YGStyle.h"
#include <yoga/Utils.h> #include "Utils.h"
namespace facebook::yoga {
// Yoga specific properties, not compatible with flexbox specification // Yoga specific properties, not compatible with flexbox specification
bool operator==(const Style& lhs, const Style& rhs) { bool operator==(const YGStyle& lhs, const YGStyle& rhs) {
bool areNonFloatValuesEqual = lhs.direction() == rhs.direction() && bool areNonFloatValuesEqual = lhs.direction() == rhs.direction() &&
lhs.flexDirection() == rhs.flexDirection() && lhs.flexDirection() == rhs.flexDirection() &&
lhs.justifyContent() == rhs.justifyContent() && lhs.justifyContent() == rhs.justifyContent() &&
@@ -56,5 +54,3 @@ bool operator==(const Style& lhs, const Style& rhs) {
return areNonFloatValuesEqual; return areNonFloatValuesEqual;
} }
} // namespace facebook::yoga

View File

@@ -13,17 +13,17 @@
#include <type_traits> #include <type_traits>
#include <yoga/Yoga.h> #include <yoga/Yoga.h>
#include <yoga/YGFloatOptional.h>
#include <yoga/Yoga-internal.h>
#include <yoga/BitUtils.h>
#include <yoga/style/CompactValue.h> #include "CompactValue.h"
#include "YGFloatOptional.h"
#include "Yoga-internal.h"
#include "BitUtils.h"
namespace facebook::yoga { class YOGA_EXPORT YGStyle {
class YOGA_EXPORT Style {
template <typename Enum> template <typename Enum>
using Values = detail::Values<enums::count<Enum>()>; using Values =
facebook::yoga::detail::Values<facebook::yoga::enums::count<Enum>()>;
using CompactValue = facebook::yoga::detail::CompactValue;
public: public:
using Dimensions = Values<YGDimension>; using Dimensions = Values<YGDimension>;
@@ -32,7 +32,7 @@ public:
template <typename T> template <typename T>
struct BitfieldRef { struct BitfieldRef {
Style& style; YGStyle& style;
size_t offset; size_t offset;
operator T() const { operator T() const {
return facebook::yoga::detail::getEnumData<T>(style.flags, offset); return facebook::yoga::detail::getEnumData<T>(style.flags, offset);
@@ -43,9 +43,9 @@ public:
} }
}; };
template <typename T, T Style::*Prop> template <typename T, T YGStyle::*Prop>
struct Ref { struct Ref {
Style& style; YGStyle& style;
operator T() const { return style.*Prop; } operator T() const { return style.*Prop; }
Ref<T, Prop>& operator=(T value) { Ref<T, Prop>& operator=(T value) {
style.*Prop = value; style.*Prop = value;
@@ -53,10 +53,10 @@ public:
} }
}; };
template <typename Idx, Values<Idx> Style::*Prop> template <typename Idx, Values<Idx> YGStyle::*Prop>
struct IdxRef { struct IdxRef {
struct Ref { struct Ref {
Style& style; YGStyle& style;
Idx idx; Idx idx;
operator CompactValue() const { return (style.*Prop)[idx]; } operator CompactValue() const { return (style.*Prop)[idx]; }
operator YGValue() const { return (style.*Prop)[idx]; } operator YGValue() const { return (style.*Prop)[idx]; }
@@ -66,7 +66,7 @@ public:
} }
}; };
Style& style; YGStyle& style;
IdxRef<Idx, Prop>& operator=(const Values<Idx>& values) { IdxRef<Idx, Prop>& operator=(const Values<Idx>& values) {
style.*Prop = values; style.*Prop = values;
return *this; return *this;
@@ -76,11 +76,11 @@ public:
CompactValue operator[](Idx idx) const { return (style.*Prop)[idx]; } CompactValue operator[](Idx idx) const { return (style.*Prop)[idx]; }
}; };
Style() { YGStyle() {
alignContent() = YGAlignFlexStart; alignContent() = YGAlignFlexStart;
alignItems() = YGAlignStretch; alignItems() = YGAlignStretch;
} }
~Style() = default; ~YGStyle() = default;
private: private:
static constexpr size_t directionOffset = 0; static constexpr size_t directionOffset = 0;
@@ -188,52 +188,51 @@ public:
BitfieldRef<YGDisplay> display() { return {*this, displayOffset}; } BitfieldRef<YGDisplay> display() { return {*this, displayOffset}; }
YGFloatOptional flex() const { return flex_; } YGFloatOptional flex() const { return flex_; }
Ref<YGFloatOptional, &Style::flex_> flex() { return {*this}; } Ref<YGFloatOptional, &YGStyle::flex_> flex() { return {*this}; }
YGFloatOptional flexGrow() const { return flexGrow_; } YGFloatOptional flexGrow() const { return flexGrow_; }
Ref<YGFloatOptional, &Style::flexGrow_> flexGrow() { return {*this}; } Ref<YGFloatOptional, &YGStyle::flexGrow_> flexGrow() { return {*this}; }
YGFloatOptional flexShrink() const { return flexShrink_; } YGFloatOptional flexShrink() const { return flexShrink_; }
Ref<YGFloatOptional, &Style::flexShrink_> flexShrink() { return {*this}; } Ref<YGFloatOptional, &YGStyle::flexShrink_> flexShrink() { return {*this}; }
CompactValue flexBasis() const { return flexBasis_; } CompactValue flexBasis() const { return flexBasis_; }
Ref<CompactValue, &Style::flexBasis_> flexBasis() { return {*this}; } Ref<CompactValue, &YGStyle::flexBasis_> flexBasis() { return {*this}; }
const Edges& margin() const { return margin_; } const Edges& margin() const { return margin_; }
IdxRef<YGEdge, &Style::margin_> margin() { return {*this}; } IdxRef<YGEdge, &YGStyle::margin_> margin() { return {*this}; }
const Edges& position() const { return position_; } const Edges& position() const { return position_; }
IdxRef<YGEdge, &Style::position_> position() { return {*this}; } IdxRef<YGEdge, &YGStyle::position_> position() { return {*this}; }
const Edges& padding() const { return padding_; } const Edges& padding() const { return padding_; }
IdxRef<YGEdge, &Style::padding_> padding() { return {*this}; } IdxRef<YGEdge, &YGStyle::padding_> padding() { return {*this}; }
const Edges& border() const { return border_; } const Edges& border() const { return border_; }
IdxRef<YGEdge, &Style::border_> border() { return {*this}; } IdxRef<YGEdge, &YGStyle::border_> border() { return {*this}; }
const Gutters& gap() const { return gap_; } const Gutters& gap() const { return gap_; }
IdxRef<YGGutter, &Style::gap_> gap() { return {*this}; } IdxRef<YGGutter, &YGStyle::gap_> gap() { return {*this}; }
const Dimensions& dimensions() const { return dimensions_; } const Dimensions& dimensions() const { return dimensions_; }
IdxRef<YGDimension, &Style::dimensions_> dimensions() { return {*this}; } IdxRef<YGDimension, &YGStyle::dimensions_> dimensions() { return {*this}; }
const Dimensions& minDimensions() const { return minDimensions_; } const Dimensions& minDimensions() const { return minDimensions_; }
IdxRef<YGDimension, &Style::minDimensions_> minDimensions() { IdxRef<YGDimension, &YGStyle::minDimensions_> minDimensions() {
return {*this}; return {*this};
} }
const Dimensions& maxDimensions() const { return maxDimensions_; } const Dimensions& maxDimensions() const { return maxDimensions_; }
IdxRef<YGDimension, &Style::maxDimensions_> maxDimensions() { IdxRef<YGDimension, &YGStyle::maxDimensions_> maxDimensions() {
return {*this}; return {*this};
} }
// Yoga specific properties, not compatible with flexbox specification // Yoga specific properties, not compatible with flexbox specification
YGFloatOptional aspectRatio() const { return aspectRatio_; } YGFloatOptional aspectRatio() const { return aspectRatio_; }
Ref<YGFloatOptional, &Style::aspectRatio_> aspectRatio() { return {*this}; } Ref<YGFloatOptional, &YGStyle::aspectRatio_> aspectRatio() { return {*this}; }
}; };
YOGA_EXPORT bool operator==(const Style& lhs, const Style& rhs); YOGA_EXPORT bool operator==(const YGStyle& lhs, const YGStyle& rhs);
YOGA_EXPORT inline bool operator!=(const Style& lhs, const Style& rhs) { YOGA_EXPORT inline bool operator!=(const YGStyle& lhs, const YGStyle& rhs) {
return !(lhs == rhs); return !(lhs == rhs);
} }
} // namespace facebook::yoga

View File

@@ -14,7 +14,7 @@
#include <yoga/Yoga.h> #include <yoga/Yoga.h>
#include <yoga/style/CompactValue.h> #include "CompactValue.h"
using YGVector = std::vector<YGNodeRef>; using YGVector = std::vector<YGNodeRef>;

View File

@@ -17,7 +17,7 @@
#include "Utils.h" #include "Utils.h"
#include "YGNode.h" #include "YGNode.h"
#include "YGNodePrint.h" #include "YGNodePrint.h"
#include <yoga/Yoga-internal.h> #include "Yoga-internal.h"
#include "event/event.h" #include "event/event.h"
using namespace facebook::yoga; using namespace facebook::yoga;
@@ -480,25 +480,26 @@ void updateStyle(
} }
template <typename Ref, typename T> template <typename Ref, typename T>
void updateStyle(YGNode* node, Ref (Style::*prop)(), T value) { void updateStyle(YGNode* node, Ref (YGStyle::*prop)(), T value) {
updateStyle( updateStyle(
node, node,
value, value,
[prop](Style& s, T x) { return (s.*prop)() != x; }, [prop](YGStyle& s, T x) { return (s.*prop)() != x; },
[prop](Style& s, T x) { (s.*prop)() = x; }); [prop](YGStyle& s, T x) { (s.*prop)() = x; });
} }
template <typename Ref, typename Idx> template <typename Ref, typename Idx>
void updateIndexedStyleProp( void updateIndexedStyleProp(
YGNode* node, YGNode* node,
Ref (Style::*prop)(), Ref (YGStyle::*prop)(),
Idx idx, Idx idx,
CompactValue value) { detail::CompactValue value) {
using detail::CompactValue;
updateStyle( updateStyle(
node, node,
value, value,
[idx, prop](Style& s, CompactValue x) { return (s.*prop)()[idx] != x; }, [idx, prop](YGStyle& s, CompactValue x) { return (s.*prop)()[idx] != x; },
[idx, prop](Style& s, CompactValue x) { (s.*prop)()[idx] = x; }); [idx, prop](YGStyle& s, CompactValue x) { (s.*prop)()[idx] = x; });
} }
} // namespace } // namespace
@@ -508,12 +509,12 @@ void updateIndexedStyleProp(
// overload like clang and GCC. For the purposes of updateStyle(), we can help // overload like clang and GCC. For the purposes of updateStyle(), we can help
// MSVC by specifying that return type explicitly. In combination with // MSVC by specifying that return type explicitly. In combination with
// decltype, MSVC will prefer the non-const version. // decltype, MSVC will prefer the non-const version.
#define MSVC_HINT(PROP) decltype(Style{}.PROP()) #define MSVC_HINT(PROP) decltype(YGStyle{}.PROP())
YOGA_EXPORT void YGNodeStyleSetDirection( YOGA_EXPORT void YGNodeStyleSetDirection(
const YGNodeRef node, const YGNodeRef node,
const YGDirection value) { const YGDirection value) {
updateStyle<MSVC_HINT(direction)>(node, &Style::direction, value); updateStyle<MSVC_HINT(direction)>(node, &YGStyle::direction, value);
} }
YOGA_EXPORT YGDirection YGNodeStyleGetDirection(const YGNodeConstRef node) { YOGA_EXPORT YGDirection YGNodeStyleGetDirection(const YGNodeConstRef node) {
return node->getStyle().direction(); return node->getStyle().direction();
@@ -523,7 +524,7 @@ YOGA_EXPORT void YGNodeStyleSetFlexDirection(
const YGNodeRef node, const YGNodeRef node,
const YGFlexDirection flexDirection) { const YGFlexDirection flexDirection) {
updateStyle<MSVC_HINT(flexDirection)>( updateStyle<MSVC_HINT(flexDirection)>(
node, &Style::flexDirection, flexDirection); node, &YGStyle::flexDirection, flexDirection);
} }
YOGA_EXPORT YGFlexDirection YOGA_EXPORT YGFlexDirection
YGNodeStyleGetFlexDirection(const YGNodeConstRef node) { YGNodeStyleGetFlexDirection(const YGNodeConstRef node) {
@@ -534,7 +535,7 @@ YOGA_EXPORT void YGNodeStyleSetJustifyContent(
const YGNodeRef node, const YGNodeRef node,
const YGJustify justifyContent) { const YGJustify justifyContent) {
updateStyle<MSVC_HINT(justifyContent)>( updateStyle<MSVC_HINT(justifyContent)>(
node, &Style::justifyContent, justifyContent); node, &YGStyle::justifyContent, justifyContent);
} }
YOGA_EXPORT YGJustify YGNodeStyleGetJustifyContent(const YGNodeConstRef node) { YOGA_EXPORT YGJustify YGNodeStyleGetJustifyContent(const YGNodeConstRef node) {
return node->getStyle().justifyContent(); return node->getStyle().justifyContent();
@@ -544,7 +545,7 @@ YOGA_EXPORT void YGNodeStyleSetAlignContent(
const YGNodeRef node, const YGNodeRef node,
const YGAlign alignContent) { const YGAlign alignContent) {
updateStyle<MSVC_HINT(alignContent)>( updateStyle<MSVC_HINT(alignContent)>(
node, &Style::alignContent, alignContent); node, &YGStyle::alignContent, alignContent);
} }
YOGA_EXPORT YGAlign YGNodeStyleGetAlignContent(const YGNodeConstRef node) { YOGA_EXPORT YGAlign YGNodeStyleGetAlignContent(const YGNodeConstRef node) {
return node->getStyle().alignContent(); return node->getStyle().alignContent();
@@ -553,7 +554,7 @@ YOGA_EXPORT YGAlign YGNodeStyleGetAlignContent(const YGNodeConstRef node) {
YOGA_EXPORT void YGNodeStyleSetAlignItems( YOGA_EXPORT void YGNodeStyleSetAlignItems(
const YGNodeRef node, const YGNodeRef node,
const YGAlign alignItems) { const YGAlign alignItems) {
updateStyle<MSVC_HINT(alignItems)>(node, &Style::alignItems, alignItems); updateStyle<MSVC_HINT(alignItems)>(node, &YGStyle::alignItems, alignItems);
} }
YOGA_EXPORT YGAlign YGNodeStyleGetAlignItems(const YGNodeConstRef node) { YOGA_EXPORT YGAlign YGNodeStyleGetAlignItems(const YGNodeConstRef node) {
return node->getStyle().alignItems(); return node->getStyle().alignItems();
@@ -562,7 +563,7 @@ YOGA_EXPORT YGAlign YGNodeStyleGetAlignItems(const YGNodeConstRef node) {
YOGA_EXPORT void YGNodeStyleSetAlignSelf( YOGA_EXPORT void YGNodeStyleSetAlignSelf(
const YGNodeRef node, const YGNodeRef node,
const YGAlign alignSelf) { const YGAlign alignSelf) {
updateStyle<MSVC_HINT(alignSelf)>(node, &Style::alignSelf, alignSelf); updateStyle<MSVC_HINT(alignSelf)>(node, &YGStyle::alignSelf, alignSelf);
} }
YOGA_EXPORT YGAlign YGNodeStyleGetAlignSelf(const YGNodeConstRef node) { YOGA_EXPORT YGAlign YGNodeStyleGetAlignSelf(const YGNodeConstRef node) {
return node->getStyle().alignSelf(); return node->getStyle().alignSelf();
@@ -572,7 +573,7 @@ YOGA_EXPORT void YGNodeStyleSetPositionType(
const YGNodeRef node, const YGNodeRef node,
const YGPositionType positionType) { const YGPositionType positionType) {
updateStyle<MSVC_HINT(positionType)>( updateStyle<MSVC_HINT(positionType)>(
node, &Style::positionType, positionType); node, &YGStyle::positionType, positionType);
} }
YOGA_EXPORT YGPositionType YOGA_EXPORT YGPositionType
YGNodeStyleGetPositionType(const YGNodeConstRef node) { YGNodeStyleGetPositionType(const YGNodeConstRef node) {
@@ -582,7 +583,7 @@ YGNodeStyleGetPositionType(const YGNodeConstRef node) {
YOGA_EXPORT void YGNodeStyleSetFlexWrap( YOGA_EXPORT void YGNodeStyleSetFlexWrap(
const YGNodeRef node, const YGNodeRef node,
const YGWrap flexWrap) { const YGWrap flexWrap) {
updateStyle<MSVC_HINT(flexWrap)>(node, &Style::flexWrap, flexWrap); updateStyle<MSVC_HINT(flexWrap)>(node, &YGStyle::flexWrap, flexWrap);
} }
YOGA_EXPORT YGWrap YGNodeStyleGetFlexWrap(const YGNodeConstRef node) { YOGA_EXPORT YGWrap YGNodeStyleGetFlexWrap(const YGNodeConstRef node) {
return node->getStyle().flexWrap(); return node->getStyle().flexWrap();
@@ -591,7 +592,7 @@ YOGA_EXPORT YGWrap YGNodeStyleGetFlexWrap(const YGNodeConstRef node) {
YOGA_EXPORT void YGNodeStyleSetOverflow( YOGA_EXPORT void YGNodeStyleSetOverflow(
const YGNodeRef node, const YGNodeRef node,
const YGOverflow overflow) { const YGOverflow overflow) {
updateStyle<MSVC_HINT(overflow)>(node, &Style::overflow, overflow); updateStyle<MSVC_HINT(overflow)>(node, &YGStyle::overflow, overflow);
} }
YOGA_EXPORT YGOverflow YGNodeStyleGetOverflow(const YGNodeConstRef node) { YOGA_EXPORT YGOverflow YGNodeStyleGetOverflow(const YGNodeConstRef node) {
return node->getStyle().overflow(); return node->getStyle().overflow();
@@ -600,7 +601,7 @@ YOGA_EXPORT YGOverflow YGNodeStyleGetOverflow(const YGNodeConstRef node) {
YOGA_EXPORT void YGNodeStyleSetDisplay( YOGA_EXPORT void YGNodeStyleSetDisplay(
const YGNodeRef node, const YGNodeRef node,
const YGDisplay display) { const YGDisplay display) {
updateStyle<MSVC_HINT(display)>(node, &Style::display, display); updateStyle<MSVC_HINT(display)>(node, &YGStyle::display, display);
} }
YOGA_EXPORT YGDisplay YGNodeStyleGetDisplay(const YGNodeConstRef node) { YOGA_EXPORT YGDisplay YGNodeStyleGetDisplay(const YGNodeConstRef node) {
return node->getStyle().display(); return node->getStyle().display();
@@ -608,7 +609,7 @@ YOGA_EXPORT YGDisplay YGNodeStyleGetDisplay(const YGNodeConstRef node) {
// TODO(T26792433): Change the API to accept YGFloatOptional. // TODO(T26792433): Change the API to accept YGFloatOptional.
YOGA_EXPORT void YGNodeStyleSetFlex(const YGNodeRef node, const float flex) { YOGA_EXPORT void YGNodeStyleSetFlex(const YGNodeRef node, const float flex) {
updateStyle<MSVC_HINT(flex)>(node, &Style::flex, YGFloatOptional{flex}); updateStyle<MSVC_HINT(flex)>(node, &YGStyle::flex, YGFloatOptional{flex});
} }
// TODO(T26792433): Change the API to accept YGFloatOptional. // TODO(T26792433): Change the API to accept YGFloatOptional.
@@ -623,7 +624,7 @@ YOGA_EXPORT void YGNodeStyleSetFlexGrow(
const YGNodeRef node, const YGNodeRef node,
const float flexGrow) { const float flexGrow) {
updateStyle<MSVC_HINT(flexGrow)>( updateStyle<MSVC_HINT(flexGrow)>(
node, &Style::flexGrow, YGFloatOptional{flexGrow}); node, &YGStyle::flexGrow, YGFloatOptional{flexGrow});
} }
// TODO(T26792433): Change the API to accept YGFloatOptional. // TODO(T26792433): Change the API to accept YGFloatOptional.
@@ -631,7 +632,7 @@ YOGA_EXPORT void YGNodeStyleSetFlexShrink(
const YGNodeRef node, const YGNodeRef node,
const float flexShrink) { const float flexShrink) {
updateStyle<MSVC_HINT(flexShrink)>( updateStyle<MSVC_HINT(flexShrink)>(
node, &Style::flexShrink, YGFloatOptional{flexShrink}); node, &YGStyle::flexShrink, YGFloatOptional{flexShrink});
} }
YOGA_EXPORT YGValue YGNodeStyleGetFlexBasis(const YGNodeConstRef node) { YOGA_EXPORT YGValue YGNodeStyleGetFlexBasis(const YGNodeConstRef node) {
@@ -646,37 +647,37 @@ YOGA_EXPORT YGValue YGNodeStyleGetFlexBasis(const YGNodeConstRef node) {
YOGA_EXPORT void YGNodeStyleSetFlexBasis( YOGA_EXPORT void YGNodeStyleSetFlexBasis(
const YGNodeRef node, const YGNodeRef node,
const float flexBasis) { const float flexBasis) {
auto value = CompactValue::ofMaybe<YGUnitPoint>(flexBasis); auto value = detail::CompactValue::ofMaybe<YGUnitPoint>(flexBasis);
updateStyle<MSVC_HINT(flexBasis)>(node, &Style::flexBasis, value); updateStyle<MSVC_HINT(flexBasis)>(node, &YGStyle::flexBasis, value);
} }
YOGA_EXPORT void YGNodeStyleSetFlexBasisPercent( YOGA_EXPORT void YGNodeStyleSetFlexBasisPercent(
const YGNodeRef node, const YGNodeRef node,
const float flexBasisPercent) { const float flexBasisPercent) {
auto value = CompactValue::ofMaybe<YGUnitPercent>(flexBasisPercent); auto value = detail::CompactValue::ofMaybe<YGUnitPercent>(flexBasisPercent);
updateStyle<MSVC_HINT(flexBasis)>(node, &Style::flexBasis, value); updateStyle<MSVC_HINT(flexBasis)>(node, &YGStyle::flexBasis, value);
} }
YOGA_EXPORT void YGNodeStyleSetFlexBasisAuto(const YGNodeRef node) { YOGA_EXPORT void YGNodeStyleSetFlexBasisAuto(const YGNodeRef node) {
updateStyle<MSVC_HINT(flexBasis)>( updateStyle<MSVC_HINT(flexBasis)>(
node, &Style::flexBasis, CompactValue::ofAuto()); node, &YGStyle::flexBasis, detail::CompactValue::ofAuto());
} }
YOGA_EXPORT void YGNodeStyleSetPosition( YOGA_EXPORT void YGNodeStyleSetPosition(
YGNodeRef node, YGNodeRef node,
YGEdge edge, YGEdge edge,
float points) { float points) {
auto value = CompactValue::ofMaybe<YGUnitPoint>(points); auto value = detail::CompactValue::ofMaybe<YGUnitPoint>(points);
updateIndexedStyleProp<MSVC_HINT(position)>( updateIndexedStyleProp<MSVC_HINT(position)>(
node, &Style::position, edge, value); node, &YGStyle::position, edge, value);
} }
YOGA_EXPORT void YGNodeStyleSetPositionPercent( YOGA_EXPORT void YGNodeStyleSetPositionPercent(
YGNodeRef node, YGNodeRef node,
YGEdge edge, YGEdge edge,
float percent) { float percent) {
auto value = CompactValue::ofMaybe<YGUnitPercent>(percent); auto value = detail::CompactValue::ofMaybe<YGUnitPercent>(percent);
updateIndexedStyleProp<MSVC_HINT(position)>( updateIndexedStyleProp<MSVC_HINT(position)>(
node, &Style::position, edge, value); node, &YGStyle::position, edge, value);
} }
YOGA_EXPORT YGValue YGNodeStyleGetPosition(YGNodeConstRef node, YGEdge edge) { YOGA_EXPORT YGValue YGNodeStyleGetPosition(YGNodeConstRef node, YGEdge edge) {
return node->getStyle().position()[edge]; return node->getStyle().position()[edge];
@@ -686,19 +687,21 @@ YOGA_EXPORT void YGNodeStyleSetMargin(
YGNodeRef node, YGNodeRef node,
YGEdge edge, YGEdge edge,
float points) { float points) {
auto value = CompactValue::ofMaybe<YGUnitPoint>(points); auto value = detail::CompactValue::ofMaybe<YGUnitPoint>(points);
updateIndexedStyleProp<MSVC_HINT(margin)>(node, &Style::margin, edge, value); updateIndexedStyleProp<MSVC_HINT(margin)>(
node, &YGStyle::margin, edge, value);
} }
YOGA_EXPORT void YGNodeStyleSetMarginPercent( YOGA_EXPORT void YGNodeStyleSetMarginPercent(
YGNodeRef node, YGNodeRef node,
YGEdge edge, YGEdge edge,
float percent) { float percent) {
auto value = CompactValue::ofMaybe<YGUnitPercent>(percent); auto value = detail::CompactValue::ofMaybe<YGUnitPercent>(percent);
updateIndexedStyleProp<MSVC_HINT(margin)>(node, &Style::margin, edge, value); updateIndexedStyleProp<MSVC_HINT(margin)>(
node, &YGStyle::margin, edge, value);
} }
YOGA_EXPORT void YGNodeStyleSetMarginAuto(YGNodeRef node, YGEdge edge) { YOGA_EXPORT void YGNodeStyleSetMarginAuto(YGNodeRef node, YGEdge edge) {
updateIndexedStyleProp<MSVC_HINT(margin)>( updateIndexedStyleProp<MSVC_HINT(margin)>(
node, &Style::margin, edge, CompactValue::ofAuto()); node, &YGStyle::margin, edge, detail::CompactValue::ofAuto());
} }
YOGA_EXPORT YGValue YGNodeStyleGetMargin(YGNodeConstRef node, YGEdge edge) { YOGA_EXPORT YGValue YGNodeStyleGetMargin(YGNodeConstRef node, YGEdge edge) {
return node->getStyle().margin()[edge]; return node->getStyle().margin()[edge];
@@ -708,17 +711,17 @@ YOGA_EXPORT void YGNodeStyleSetPadding(
YGNodeRef node, YGNodeRef node,
YGEdge edge, YGEdge edge,
float points) { float points) {
auto value = CompactValue::ofMaybe<YGUnitPoint>(points); auto value = detail::CompactValue::ofMaybe<YGUnitPoint>(points);
updateIndexedStyleProp<MSVC_HINT(padding)>( updateIndexedStyleProp<MSVC_HINT(padding)>(
node, &Style::padding, edge, value); node, &YGStyle::padding, edge, value);
} }
YOGA_EXPORT void YGNodeStyleSetPaddingPercent( YOGA_EXPORT void YGNodeStyleSetPaddingPercent(
YGNodeRef node, YGNodeRef node,
YGEdge edge, YGEdge edge,
float percent) { float percent) {
auto value = CompactValue::ofMaybe<YGUnitPercent>(percent); auto value = detail::CompactValue::ofMaybe<YGUnitPercent>(percent);
updateIndexedStyleProp<MSVC_HINT(padding)>( updateIndexedStyleProp<MSVC_HINT(padding)>(
node, &Style::padding, edge, value); node, &YGStyle::padding, edge, value);
} }
YOGA_EXPORT YGValue YGNodeStyleGetPadding(YGNodeConstRef node, YGEdge edge) { YOGA_EXPORT YGValue YGNodeStyleGetPadding(YGNodeConstRef node, YGEdge edge) {
return node->getStyle().padding()[edge]; return node->getStyle().padding()[edge];
@@ -729,8 +732,9 @@ YOGA_EXPORT void YGNodeStyleSetBorder(
const YGNodeRef node, const YGNodeRef node,
const YGEdge edge, const YGEdge edge,
const float border) { const float border) {
auto value = CompactValue::ofMaybe<YGUnitPoint>(border); auto value = detail::CompactValue::ofMaybe<YGUnitPoint>(border);
updateIndexedStyleProp<MSVC_HINT(border)>(node, &Style::border, edge, value); updateIndexedStyleProp<MSVC_HINT(border)>(
node, &YGStyle::border, edge, value);
} }
YOGA_EXPORT float YGNodeStyleGetBorder( YOGA_EXPORT float YGNodeStyleGetBorder(
@@ -750,8 +754,8 @@ YOGA_EXPORT void YGNodeStyleSetGap(
const YGNodeRef node, const YGNodeRef node,
const YGGutter gutter, const YGGutter gutter,
const float gapLength) { const float gapLength) {
auto length = CompactValue::ofMaybe<YGUnitPoint>(gapLength); auto length = detail::CompactValue::ofMaybe<YGUnitPoint>(gapLength);
updateIndexedStyleProp<MSVC_HINT(gap)>(node, &Style::gap, gutter, length); updateIndexedStyleProp<MSVC_HINT(gap)>(node, &YGStyle::gap, gutter, length);
} }
YOGA_EXPORT float YGNodeStyleGetGap( YOGA_EXPORT float YGNodeStyleGetGap(
@@ -780,40 +784,46 @@ YOGA_EXPORT void YGNodeStyleSetAspectRatio(
const YGNodeRef node, const YGNodeRef node,
const float aspectRatio) { const float aspectRatio) {
updateStyle<MSVC_HINT(aspectRatio)>( updateStyle<MSVC_HINT(aspectRatio)>(
node, &Style::aspectRatio, YGFloatOptional{aspectRatio}); node, &YGStyle::aspectRatio, YGFloatOptional{aspectRatio});
} }
YOGA_EXPORT void YGNodeStyleSetWidth(YGNodeRef node, float points) { YOGA_EXPORT void YGNodeStyleSetWidth(YGNodeRef node, float points) {
auto value = CompactValue::ofMaybe<YGUnitPoint>(points); auto value = detail::CompactValue::ofMaybe<YGUnitPoint>(points);
updateIndexedStyleProp<MSVC_HINT(dimensions)>( updateIndexedStyleProp<MSVC_HINT(dimensions)>(
node, &Style::dimensions, YGDimensionWidth, value); node, &YGStyle::dimensions, YGDimensionWidth, value);
} }
YOGA_EXPORT void YGNodeStyleSetWidthPercent(YGNodeRef node, float percent) { YOGA_EXPORT void YGNodeStyleSetWidthPercent(YGNodeRef node, float percent) {
auto value = CompactValue::ofMaybe<YGUnitPercent>(percent); auto value = detail::CompactValue::ofMaybe<YGUnitPercent>(percent);
updateIndexedStyleProp<MSVC_HINT(dimensions)>( updateIndexedStyleProp<MSVC_HINT(dimensions)>(
node, &Style::dimensions, YGDimensionWidth, value); node, &YGStyle::dimensions, YGDimensionWidth, value);
} }
YOGA_EXPORT void YGNodeStyleSetWidthAuto(YGNodeRef node) { YOGA_EXPORT void YGNodeStyleSetWidthAuto(YGNodeRef node) {
updateIndexedStyleProp<MSVC_HINT(dimensions)>( updateIndexedStyleProp<MSVC_HINT(dimensions)>(
node, &Style::dimensions, YGDimensionWidth, CompactValue::ofAuto()); node,
&YGStyle::dimensions,
YGDimensionWidth,
detail::CompactValue::ofAuto());
} }
YOGA_EXPORT YGValue YGNodeStyleGetWidth(YGNodeConstRef node) { YOGA_EXPORT YGValue YGNodeStyleGetWidth(YGNodeConstRef node) {
return node->getStyle().dimensions()[YGDimensionWidth]; return node->getStyle().dimensions()[YGDimensionWidth];
} }
YOGA_EXPORT void YGNodeStyleSetHeight(YGNodeRef node, float points) { YOGA_EXPORT void YGNodeStyleSetHeight(YGNodeRef node, float points) {
auto value = CompactValue::ofMaybe<YGUnitPoint>(points); auto value = detail::CompactValue::ofMaybe<YGUnitPoint>(points);
updateIndexedStyleProp<MSVC_HINT(dimensions)>( updateIndexedStyleProp<MSVC_HINT(dimensions)>(
node, &Style::dimensions, YGDimensionHeight, value); node, &YGStyle::dimensions, YGDimensionHeight, value);
} }
YOGA_EXPORT void YGNodeStyleSetHeightPercent(YGNodeRef node, float percent) { YOGA_EXPORT void YGNodeStyleSetHeightPercent(YGNodeRef node, float percent) {
auto value = CompactValue::ofMaybe<YGUnitPercent>(percent); auto value = detail::CompactValue::ofMaybe<YGUnitPercent>(percent);
updateIndexedStyleProp<MSVC_HINT(dimensions)>( updateIndexedStyleProp<MSVC_HINT(dimensions)>(
node, &Style::dimensions, YGDimensionHeight, value); node, &YGStyle::dimensions, YGDimensionHeight, value);
} }
YOGA_EXPORT void YGNodeStyleSetHeightAuto(YGNodeRef node) { YOGA_EXPORT void YGNodeStyleSetHeightAuto(YGNodeRef node) {
updateIndexedStyleProp<MSVC_HINT(dimensions)>( updateIndexedStyleProp<MSVC_HINT(dimensions)>(
node, &Style::dimensions, YGDimensionHeight, CompactValue::ofAuto()); node,
&YGStyle::dimensions,
YGDimensionHeight,
detail::CompactValue::ofAuto());
} }
YOGA_EXPORT YGValue YGNodeStyleGetHeight(YGNodeConstRef node) { YOGA_EXPORT YGValue YGNodeStyleGetHeight(YGNodeConstRef node) {
return node->getStyle().dimensions()[YGDimensionHeight]; return node->getStyle().dimensions()[YGDimensionHeight];
@@ -822,16 +832,16 @@ YOGA_EXPORT YGValue YGNodeStyleGetHeight(YGNodeConstRef node) {
YOGA_EXPORT void YGNodeStyleSetMinWidth( YOGA_EXPORT void YGNodeStyleSetMinWidth(
const YGNodeRef node, const YGNodeRef node,
const float minWidth) { const float minWidth) {
auto value = CompactValue::ofMaybe<YGUnitPoint>(minWidth); auto value = detail::CompactValue::ofMaybe<YGUnitPoint>(minWidth);
updateIndexedStyleProp<MSVC_HINT(minDimensions)>( updateIndexedStyleProp<MSVC_HINT(minDimensions)>(
node, &Style::minDimensions, YGDimensionWidth, value); node, &YGStyle::minDimensions, YGDimensionWidth, value);
} }
YOGA_EXPORT void YGNodeStyleSetMinWidthPercent( YOGA_EXPORT void YGNodeStyleSetMinWidthPercent(
const YGNodeRef node, const YGNodeRef node,
const float minWidth) { const float minWidth) {
auto value = CompactValue::ofMaybe<YGUnitPercent>(minWidth); auto value = detail::CompactValue::ofMaybe<YGUnitPercent>(minWidth);
updateIndexedStyleProp<MSVC_HINT(minDimensions)>( updateIndexedStyleProp<MSVC_HINT(minDimensions)>(
node, &Style::minDimensions, YGDimensionWidth, value); node, &YGStyle::minDimensions, YGDimensionWidth, value);
} }
YOGA_EXPORT YGValue YGNodeStyleGetMinWidth(const YGNodeConstRef node) { YOGA_EXPORT YGValue YGNodeStyleGetMinWidth(const YGNodeConstRef node) {
return node->getStyle().minDimensions()[YGDimensionWidth]; return node->getStyle().minDimensions()[YGDimensionWidth];
@@ -840,16 +850,16 @@ YOGA_EXPORT YGValue YGNodeStyleGetMinWidth(const YGNodeConstRef node) {
YOGA_EXPORT void YGNodeStyleSetMinHeight( YOGA_EXPORT void YGNodeStyleSetMinHeight(
const YGNodeRef node, const YGNodeRef node,
const float minHeight) { const float minHeight) {
auto value = CompactValue::ofMaybe<YGUnitPoint>(minHeight); auto value = detail::CompactValue::ofMaybe<YGUnitPoint>(minHeight);
updateIndexedStyleProp<MSVC_HINT(minDimensions)>( updateIndexedStyleProp<MSVC_HINT(minDimensions)>(
node, &Style::minDimensions, YGDimensionHeight, value); node, &YGStyle::minDimensions, YGDimensionHeight, value);
} }
YOGA_EXPORT void YGNodeStyleSetMinHeightPercent( YOGA_EXPORT void YGNodeStyleSetMinHeightPercent(
const YGNodeRef node, const YGNodeRef node,
const float minHeight) { const float minHeight) {
auto value = CompactValue::ofMaybe<YGUnitPercent>(minHeight); auto value = detail::CompactValue::ofMaybe<YGUnitPercent>(minHeight);
updateIndexedStyleProp<MSVC_HINT(minDimensions)>( updateIndexedStyleProp<MSVC_HINT(minDimensions)>(
node, &Style::minDimensions, YGDimensionHeight, value); node, &YGStyle::minDimensions, YGDimensionHeight, value);
} }
YOGA_EXPORT YGValue YGNodeStyleGetMinHeight(const YGNodeConstRef node) { YOGA_EXPORT YGValue YGNodeStyleGetMinHeight(const YGNodeConstRef node) {
return node->getStyle().minDimensions()[YGDimensionHeight]; return node->getStyle().minDimensions()[YGDimensionHeight];
@@ -858,16 +868,16 @@ YOGA_EXPORT YGValue YGNodeStyleGetMinHeight(const YGNodeConstRef node) {
YOGA_EXPORT void YGNodeStyleSetMaxWidth( YOGA_EXPORT void YGNodeStyleSetMaxWidth(
const YGNodeRef node, const YGNodeRef node,
const float maxWidth) { const float maxWidth) {
auto value = CompactValue::ofMaybe<YGUnitPoint>(maxWidth); auto value = detail::CompactValue::ofMaybe<YGUnitPoint>(maxWidth);
updateIndexedStyleProp<MSVC_HINT(maxDimensions)>( updateIndexedStyleProp<MSVC_HINT(maxDimensions)>(
node, &Style::maxDimensions, YGDimensionWidth, value); node, &YGStyle::maxDimensions, YGDimensionWidth, value);
} }
YOGA_EXPORT void YGNodeStyleSetMaxWidthPercent( YOGA_EXPORT void YGNodeStyleSetMaxWidthPercent(
const YGNodeRef node, const YGNodeRef node,
const float maxWidth) { const float maxWidth) {
auto value = CompactValue::ofMaybe<YGUnitPercent>(maxWidth); auto value = detail::CompactValue::ofMaybe<YGUnitPercent>(maxWidth);
updateIndexedStyleProp<MSVC_HINT(maxDimensions)>( updateIndexedStyleProp<MSVC_HINT(maxDimensions)>(
node, &Style::maxDimensions, YGDimensionWidth, value); node, &YGStyle::maxDimensions, YGDimensionWidth, value);
} }
YOGA_EXPORT YGValue YGNodeStyleGetMaxWidth(const YGNodeConstRef node) { YOGA_EXPORT YGValue YGNodeStyleGetMaxWidth(const YGNodeConstRef node) {
return node->getStyle().maxDimensions()[YGDimensionWidth]; return node->getStyle().maxDimensions()[YGDimensionWidth];
@@ -876,16 +886,16 @@ YOGA_EXPORT YGValue YGNodeStyleGetMaxWidth(const YGNodeConstRef node) {
YOGA_EXPORT void YGNodeStyleSetMaxHeight( YOGA_EXPORT void YGNodeStyleSetMaxHeight(
const YGNodeRef node, const YGNodeRef node,
const float maxHeight) { const float maxHeight) {
auto value = CompactValue::ofMaybe<YGUnitPoint>(maxHeight); auto value = detail::CompactValue::ofMaybe<YGUnitPoint>(maxHeight);
updateIndexedStyleProp<MSVC_HINT(maxDimensions)>( updateIndexedStyleProp<MSVC_HINT(maxDimensions)>(
node, &Style::maxDimensions, YGDimensionHeight, value); node, &YGStyle::maxDimensions, YGDimensionHeight, value);
} }
YOGA_EXPORT void YGNodeStyleSetMaxHeightPercent( YOGA_EXPORT void YGNodeStyleSetMaxHeightPercent(
const YGNodeRef node, const YGNodeRef node,
const float maxHeight) { const float maxHeight) {
auto value = CompactValue::ofMaybe<YGUnitPercent>(maxHeight); auto value = detail::CompactValue::ofMaybe<YGUnitPercent>(maxHeight);
updateIndexedStyleProp<MSVC_HINT(maxDimensions)>( updateIndexedStyleProp<MSVC_HINT(maxDimensions)>(
node, &Style::maxDimensions, YGDimensionHeight, value); node, &YGStyle::maxDimensions, YGDimensionHeight, value);
} }
YOGA_EXPORT YGValue YGNodeStyleGetMaxHeight(const YGNodeConstRef node) { YOGA_EXPORT YGValue YGNodeStyleGetMaxHeight(const YGNodeConstRef node) {
return node->getStyle().maxDimensions()[YGDimensionHeight]; return node->getStyle().maxDimensions()[YGDimensionHeight];
@@ -2509,7 +2519,7 @@ static void YGJustifyMainAxis(
i < collectedFlexItemsValues.endOfLineIndex; i < collectedFlexItemsValues.endOfLineIndex;
i++) { i++) {
const YGNodeRef child = node->getChild(i); const YGNodeRef child = node->getChild(i);
const Style& childStyle = child->getStyle(); const YGStyle& childStyle = child->getStyle();
const YGLayout childLayout = child->getLayout(); const YGLayout childLayout = child->getLayout();
const bool isLastChild = i == collectedFlexItemsValues.endOfLineIndex - 1; const bool isLastChild = i == collectedFlexItemsValues.endOfLineIndex - 1;
// remove the gap if it is the last element of the line // remove the gap if it is the last element of the line