mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Support "align-content: space-evenly" (#41019)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/41019 ### Changes made - Regenerated tests (as some aspect ratio tests seem to be out of date compared to the fixtures) - Added SpaceEvenly variant to the "Align" enums (via enums.py) - Implemented `align-content: space-evenly` alignment in CalculateLayout.cpp - Added generated tests `align-content: space-evenly` - Updated NumericBitfield test to account for the fact that the Align enum now requires more bits (this bit could do with being reviewed as I am not 100% certain that it's valid to just update the test like this). ### Changes not made - Any attempt to improve the spec-compliance of content alignment in general (e.g. I think https://github.com/facebook/yoga/pull/1013 probably still needs to happen) X-link: https://github.com/facebook/yoga/pull/1422 Reviewed By: yungsters Differential Revision: D50305438 Pulled By: NickGerleman fbshipit-source-id: ef9f6f14220a0db066bc30db8dd690a4a82a0b00
This commit is contained in:
committed by
Facebook GitHub Bot
parent
2bf1a8f4e0
commit
d66ab59570
@@ -17,7 +17,8 @@ public enum YogaAlign {
|
||||
STRETCH(4),
|
||||
BASELINE(5),
|
||||
SPACE_BETWEEN(6),
|
||||
SPACE_AROUND(7);
|
||||
SPACE_AROUND(7),
|
||||
SPACE_EVENLY(8);
|
||||
|
||||
private final int mIntValue;
|
||||
|
||||
@@ -39,6 +40,7 @@ public enum YogaAlign {
|
||||
case 5: return BASELINE;
|
||||
case 6: return SPACE_BETWEEN;
|
||||
case 7: return SPACE_AROUND;
|
||||
case 8: return SPACE_EVENLY;
|
||||
default: throw new IllegalArgumentException("Unknown enum value: " + value);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -746,41 +746,11 @@ inline std::string toString(const yoga::FlexDirection& value) {
|
||||
}
|
||||
|
||||
inline std::string toString(const yoga::Justify& value) {
|
||||
switch (value) {
|
||||
case yoga::Justify::FlexStart:
|
||||
return "flex-start";
|
||||
case yoga::Justify::Center:
|
||||
return "center";
|
||||
case yoga::Justify::FlexEnd:
|
||||
return "flex-end";
|
||||
case yoga::Justify::SpaceBetween:
|
||||
return "space-between";
|
||||
case yoga::Justify::SpaceAround:
|
||||
return "space-around";
|
||||
case yoga::Justify::SpaceEvenly:
|
||||
return "space-evenly";
|
||||
}
|
||||
return YGJustifyToString(yoga::unscopedEnum(value));
|
||||
}
|
||||
|
||||
inline std::string toString(const yoga::Align& value) {
|
||||
switch (value) {
|
||||
case yoga::Align::Auto:
|
||||
return "auto";
|
||||
case yoga::Align::FlexStart:
|
||||
return "flex-start";
|
||||
case yoga::Align::Center:
|
||||
return "center";
|
||||
case yoga::Align::FlexEnd:
|
||||
return "flex-end";
|
||||
case yoga::Align::Stretch:
|
||||
return "stretch";
|
||||
case yoga::Align::Baseline:
|
||||
return "baseline";
|
||||
case yoga::Align::SpaceBetween:
|
||||
return "space-between";
|
||||
case yoga::Align::SpaceAround:
|
||||
return "space-around";
|
||||
}
|
||||
return YGAlignToString(yoga::unscopedEnum(value));
|
||||
}
|
||||
|
||||
inline std::string toString(const yoga::PositionType& value) {
|
||||
|
||||
@@ -27,6 +27,8 @@ const char* YGAlignToString(const YGAlign value) {
|
||||
return "space-between";
|
||||
case YGAlignSpaceAround:
|
||||
return "space-around";
|
||||
case YGAlignSpaceEvenly:
|
||||
return "space-evenly";
|
||||
}
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
@@ -21,7 +21,8 @@ YG_ENUM_SEQ_DECL(
|
||||
YGAlignStretch,
|
||||
YGAlignBaseline,
|
||||
YGAlignSpaceBetween,
|
||||
YGAlignSpaceAround)
|
||||
YGAlignSpaceAround,
|
||||
YGAlignSpaceEvenly)
|
||||
|
||||
YG_ENUM_SEQ_DECL(
|
||||
YGDimension,
|
||||
|
||||
@@ -2036,6 +2036,18 @@ static void calculateLayoutImpl(
|
||||
currentLead += remainingAlignContentDim / 2;
|
||||
}
|
||||
break;
|
||||
case Align::SpaceEvenly:
|
||||
if (availableInnerCrossDim > totalLineCrossDim) {
|
||||
currentLead +=
|
||||
remainingAlignContentDim / static_cast<float>(lineCount + 1);
|
||||
if (lineCount > 1) {
|
||||
crossDimLead =
|
||||
remainingAlignContentDim / static_cast<float>(lineCount + 1);
|
||||
}
|
||||
} else {
|
||||
currentLead += remainingAlignContentDim / 2;
|
||||
}
|
||||
break;
|
||||
case Align::SpaceBetween:
|
||||
if (availableInnerCrossDim > totalLineCrossDim && lineCount > 1) {
|
||||
crossDimLead =
|
||||
@@ -2192,6 +2204,7 @@ static void calculateLayoutImpl(
|
||||
case Align::Auto:
|
||||
case Align::SpaceBetween:
|
||||
case Align::SpaceAround:
|
||||
case Align::SpaceEvenly:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,16 +24,17 @@ enum class Align : uint8_t {
|
||||
Baseline = YGAlignBaseline,
|
||||
SpaceBetween = YGAlignSpaceBetween,
|
||||
SpaceAround = YGAlignSpaceAround,
|
||||
SpaceEvenly = YGAlignSpaceEvenly,
|
||||
};
|
||||
|
||||
template <>
|
||||
constexpr inline int32_t ordinalCount<Align>() {
|
||||
return 8;
|
||||
return 9;
|
||||
}
|
||||
|
||||
template <>
|
||||
constexpr inline int32_t bitCount<Align>() {
|
||||
return 3;
|
||||
return 4;
|
||||
}
|
||||
|
||||
constexpr inline Align scopedEnum(YGAlign unscoped) {
|
||||
|
||||
Reference in New Issue
Block a user