From 17604ec6fe03bd449335b8e087edc07ec7132bbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20W=C3=B6hrl?= Date: Sat, 11 Feb 2017 08:32:48 -0800 Subject: [PATCH] Add support for space-between and space-around on align-content Summary: Adds the two missing alignments ```space-between``` and ```space-around``` for ```align-content``` . Those values are a noop on ```align-items``` in order to prevent a breaking changes for an additional enum. Fix #229 Closes https://github.com/facebook/yoga/pull/364 Reviewed By: gkassabli Differential Revision: D4528561 Pulled By: emilsjolander fbshipit-source-id: ea6291b6dd22cef05d9eec03893250d50371236e --- .../java/com/facebook/yoga/YogaAlign.java | 6 +++++- ReactCommon/yoga/yoga/YGEnums.h | 4 +++- ReactCommon/yoga/yoga/Yoga.c | 19 ++++++++++++++++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/yoga/YogaAlign.java b/ReactAndroid/src/main/java/com/facebook/yoga/YogaAlign.java index 885ecda04..7a3e13e97 100644 --- a/ReactAndroid/src/main/java/com/facebook/yoga/YogaAlign.java +++ b/ReactAndroid/src/main/java/com/facebook/yoga/YogaAlign.java @@ -18,7 +18,9 @@ public enum YogaAlign { CENTER(2), FLEX_END(3), STRETCH(4), - BASELINE(5); + BASELINE(5), + SPACE_BETWEEN(6), + SPACE_AROUND(7); private int mIntValue; @@ -38,6 +40,8 @@ public enum YogaAlign { case 3: return FLEX_END; case 4: return STRETCH; case 5: return BASELINE; + case 6: return SPACE_BETWEEN; + case 7: return SPACE_AROUND; default: throw new IllegalArgumentException("Unknown enum value: " + value); } } diff --git a/ReactCommon/yoga/yoga/YGEnums.h b/ReactCommon/yoga/yoga/YGEnums.h index 3e65e1035..5a97ef786 100644 --- a/ReactCommon/yoga/yoga/YGEnums.h +++ b/ReactCommon/yoga/yoga/YGEnums.h @@ -13,7 +13,7 @@ YG_EXTERN_C_BEGIN -#define YGAlignCount 6 +#define YGAlignCount 8 typedef YG_ENUM_BEGIN(YGAlign) { YGAlignAuto, YGAlignFlexStart, @@ -21,6 +21,8 @@ typedef YG_ENUM_BEGIN(YGAlign) { YGAlignFlexEnd, YGAlignStretch, YGAlignBaseline, + YGAlignSpaceBetween, + YGAlignSpaceAround, } YG_ENUM_END(YGAlign); #define YGDimensionCount 2 diff --git a/ReactCommon/yoga/yoga/Yoga.c b/ReactCommon/yoga/yoga/Yoga.c index a6dde07d5..402abc8aa 100644 --- a/ReactCommon/yoga/yoga/Yoga.c +++ b/ReactCommon/yoga/yoga/Yoga.c @@ -2667,7 +2667,22 @@ static void YGNodelayoutImpl(const YGNodeRef node, break; case YGAlignStretch: if (availableInnerCrossDim > totalLineCrossDim) { - crossDimLead = (remainingAlignContentDim / lineCount); + crossDimLead = remainingAlignContentDim / lineCount; + } + break; + case YGAlignSpaceAround: + if (availableInnerCrossDim > totalLineCrossDim) { + currentLead += remainingAlignContentDim / (2 * lineCount); + if (lineCount > 1) { + crossDimLead = remainingAlignContentDim / lineCount; + } + } else { + currentLead += remainingAlignContentDim / 2; + } + break; + case YGAlignSpaceBetween: + if (availableInnerCrossDim > totalLineCrossDim && lineCount > 1) { + crossDimLead = remainingAlignContentDim / (lineCount - 1); } break; case YGAlignAuto: @@ -2755,6 +2770,8 @@ static void YGNodelayoutImpl(const YGNodeRef node, break; } case YGAlignAuto: + case YGAlignSpaceBetween: + case YGAlignSpaceAround: break; } }