Skip to content

Commit 0752485

Browse files
CSS Grid 1/9: Grid style types and public API (#1893)
Summary: X-link: facebook/react-native#55876 - Add foundational data types, enums, style properties, and C API for expressing CSS Grid layouts - Includes `GridLine.h`, `GridTrack.h`, `GridTrackType.h`, `Display::Grid`, new alignment enums (`Align::Start/End`, `Justify::Auto/Stretch/Start/End`) - C API: `YGGridTrackList.h/cpp`, `YGNodeStyle` grid setters/getters - Layout helper updates, `Node.h` `relativePosition` made public Split from #1865. Part of the CSS Grid implementation series. Changelog: [Internal] Pull Request resolved: #1893 Reviewed By: sammy-SC Differential Revision: D94867121 Pulled By: NickGerleman fbshipit-source-id: adcb6d107cdd782550a614f87f84cff3ecefd806
1 parent 5cd2cbd commit 0752485

25 files changed

Lines changed: 927 additions & 48 deletions

enums.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,16 @@
1919
],
2020
"FlexDirection": ["Column", "ColumnReverse", "Row", "RowReverse"],
2121
"Justify": [
22+
"Auto",
2223
"FlexStart",
2324
"Center",
2425
"FlexEnd",
2526
"SpaceBetween",
2627
"SpaceAround",
2728
"SpaceEvenly",
29+
"Stretch",
30+
"Start",
31+
"End",
2832
],
2933
"Overflow": ["Visible", "Hidden", "Scroll"],
3034
"Align": [
@@ -37,9 +41,11 @@
3741
"SpaceBetween",
3842
"SpaceAround",
3943
"SpaceEvenly",
44+
"Start",
45+
"End",
4046
],
4147
"PositionType": ["Static", "Relative", "Absolute"],
42-
"Display": ["Flex", "None", "Contents"],
48+
"Display": ["Flex", "None", "Contents", "Grid"],
4349
"Wrap": ["NoWrap", "Wrap", "WrapReverse"],
4450
"BoxSizing": ["BorderBox", "ContentBox"],
4551
"MeasureMode": ["Undefined", "Exactly", "AtMost"],
@@ -62,6 +68,7 @@
6268
"WebFlexBasis",
6369
],
6470
"Gutter": ["Column", "Row", "All"],
71+
"GridTrackType": ["Auto", "Points", "Percent", "Fr", "Minmax"],
6572
# Known incorrect behavior which can be enabled for compatibility
6673
"Errata": [
6774
# Default: Standards conformant mode

java/com/facebook/yoga/YogaAlign.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ public enum YogaAlign {
1818
BASELINE(5),
1919
SPACE_BETWEEN(6),
2020
SPACE_AROUND(7),
21-
SPACE_EVENLY(8);
21+
SPACE_EVENLY(8),
22+
START(9),
23+
END(10);
2224

2325
private final int mIntValue;
2426

@@ -41,6 +43,8 @@ public static YogaAlign fromInt(int value) {
4143
case 6: return SPACE_BETWEEN;
4244
case 7: return SPACE_AROUND;
4345
case 8: return SPACE_EVENLY;
46+
case 9: return START;
47+
case 10: return END;
4448
default: throw new IllegalArgumentException("Unknown enum value: " + value);
4549
}
4650
}

java/com/facebook/yoga/YogaDisplay.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
public enum YogaDisplay {
1313
FLEX(0),
1414
NONE(1),
15-
CONTENTS(2);
15+
CONTENTS(2),
16+
GRID(3);
1617

1718
private final int mIntValue;
1819

@@ -29,6 +30,7 @@ public static YogaDisplay fromInt(int value) {
2930
case 0: return FLEX;
3031
case 1: return NONE;
3132
case 2: return CONTENTS;
33+
case 3: return GRID;
3234
default: throw new IllegalArgumentException("Unknown enum value: " + value);
3335
}
3436
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
// @generated by enums.py
9+
10+
package com.facebook.yoga;
11+
12+
public enum YogaGridTrackType {
13+
AUTO(0),
14+
POINTS(1),
15+
PERCENT(2),
16+
FR(3),
17+
MINMAX(4);
18+
19+
private final int mIntValue;
20+
21+
YogaGridTrackType(int intValue) {
22+
mIntValue = intValue;
23+
}
24+
25+
public int intValue() {
26+
return mIntValue;
27+
}
28+
29+
public static YogaGridTrackType fromInt(int value) {
30+
switch (value) {
31+
case 0: return AUTO;
32+
case 1: return POINTS;
33+
case 2: return PERCENT;
34+
case 3: return FR;
35+
case 4: return MINMAX;
36+
default: throw new IllegalArgumentException("Unknown enum value: " + value);
37+
}
38+
}
39+
}

java/com/facebook/yoga/YogaJustify.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,16 @@
1010
package com.facebook.yoga;
1111

1212
public enum YogaJustify {
13-
FLEX_START(0),
14-
CENTER(1),
15-
FLEX_END(2),
16-
SPACE_BETWEEN(3),
17-
SPACE_AROUND(4),
18-
SPACE_EVENLY(5);
13+
AUTO(0),
14+
FLEX_START(1),
15+
CENTER(2),
16+
FLEX_END(3),
17+
SPACE_BETWEEN(4),
18+
SPACE_AROUND(5),
19+
SPACE_EVENLY(6),
20+
STRETCH(7),
21+
START(8),
22+
END(9);
1923

2024
private final int mIntValue;
2125

@@ -29,12 +33,16 @@ public int intValue() {
2933

3034
public static YogaJustify fromInt(int value) {
3135
switch (value) {
32-
case 0: return FLEX_START;
33-
case 1: return CENTER;
34-
case 2: return FLEX_END;
35-
case 3: return SPACE_BETWEEN;
36-
case 4: return SPACE_AROUND;
37-
case 5: return SPACE_EVENLY;
36+
case 0: return AUTO;
37+
case 1: return FLEX_START;
38+
case 2: return CENTER;
39+
case 3: return FLEX_END;
40+
case 4: return SPACE_BETWEEN;
41+
case 5: return SPACE_AROUND;
42+
case 6: return SPACE_EVENLY;
43+
case 7: return STRETCH;
44+
case 8: return START;
45+
case 9: return END;
3846
default: throw new IllegalArgumentException("Unknown enum value: " + value);
3947
}
4048
}

javascript/src/generated/YGEnums.ts

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ export enum Align {
1717
SpaceBetween = 6,
1818
SpaceAround = 7,
1919
SpaceEvenly = 8,
20+
Start = 9,
21+
End = 10,
2022
}
2123

2224
export enum BoxSizing {
@@ -39,6 +41,7 @@ export enum Display {
3941
Flex = 0,
4042
None = 1,
4143
Contents = 2,
44+
Grid = 3,
4245
}
4346

4447
export enum Edge {
@@ -74,19 +77,31 @@ export enum FlexDirection {
7477
RowReverse = 3,
7578
}
7679

80+
export enum GridTrackType {
81+
Auto = 0,
82+
Points = 1,
83+
Percent = 2,
84+
Fr = 3,
85+
Minmax = 4,
86+
}
87+
7788
export enum Gutter {
7889
Column = 0,
7990
Row = 1,
8091
All = 2,
8192
}
8293

8394
export enum Justify {
84-
FlexStart = 0,
85-
Center = 1,
86-
FlexEnd = 2,
87-
SpaceBetween = 3,
88-
SpaceAround = 4,
89-
SpaceEvenly = 5,
95+
Auto = 0,
96+
FlexStart = 1,
97+
Center = 2,
98+
FlexEnd = 3,
99+
SpaceBetween = 4,
100+
SpaceAround = 5,
101+
SpaceEvenly = 6,
102+
Stretch = 7,
103+
Start = 8,
104+
End = 9,
90105
}
91106

92107
export enum LogLevel {
@@ -147,6 +162,8 @@ const constants = {
147162
ALIGN_SPACE_BETWEEN: Align.SpaceBetween,
148163
ALIGN_SPACE_AROUND: Align.SpaceAround,
149164
ALIGN_SPACE_EVENLY: Align.SpaceEvenly,
165+
ALIGN_START: Align.Start,
166+
ALIGN_END: Align.End,
150167
BOX_SIZING_BORDER_BOX: BoxSizing.BorderBox,
151168
BOX_SIZING_CONTENT_BOX: BoxSizing.ContentBox,
152169
DIMENSION_WIDTH: Dimension.Width,
@@ -157,6 +174,7 @@ const constants = {
157174
DISPLAY_FLEX: Display.Flex,
158175
DISPLAY_NONE: Display.None,
159176
DISPLAY_CONTENTS: Display.Contents,
177+
DISPLAY_GRID: Display.Grid,
160178
EDGE_LEFT: Edge.Left,
161179
EDGE_TOP: Edge.Top,
162180
EDGE_RIGHT: Edge.Right,
@@ -178,15 +196,24 @@ const constants = {
178196
FLEX_DIRECTION_COLUMN_REVERSE: FlexDirection.ColumnReverse,
179197
FLEX_DIRECTION_ROW: FlexDirection.Row,
180198
FLEX_DIRECTION_ROW_REVERSE: FlexDirection.RowReverse,
199+
GRID_TRACK_TYPE_AUTO: GridTrackType.Auto,
200+
GRID_TRACK_TYPE_POINTS: GridTrackType.Points,
201+
GRID_TRACK_TYPE_PERCENT: GridTrackType.Percent,
202+
GRID_TRACK_TYPE_FR: GridTrackType.Fr,
203+
GRID_TRACK_TYPE_MINMAX: GridTrackType.Minmax,
181204
GUTTER_COLUMN: Gutter.Column,
182205
GUTTER_ROW: Gutter.Row,
183206
GUTTER_ALL: Gutter.All,
207+
JUSTIFY_AUTO: Justify.Auto,
184208
JUSTIFY_FLEX_START: Justify.FlexStart,
185209
JUSTIFY_CENTER: Justify.Center,
186210
JUSTIFY_FLEX_END: Justify.FlexEnd,
187211
JUSTIFY_SPACE_BETWEEN: Justify.SpaceBetween,
188212
JUSTIFY_SPACE_AROUND: Justify.SpaceAround,
189213
JUSTIFY_SPACE_EVENLY: Justify.SpaceEvenly,
214+
JUSTIFY_STRETCH: Justify.Stretch,
215+
JUSTIFY_START: Justify.Start,
216+
JUSTIFY_END: Justify.End,
190217
LOG_LEVEL_ERROR: LogLevel.Error,
191218
LOG_LEVEL_WARN: LogLevel.Warn,
192219
LOG_LEVEL_INFO: LogLevel.Info,

yoga/YGEnums.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ const char* YGAlignToString(const YGAlign value) {
2929
return "space-around";
3030
case YGAlignSpaceEvenly:
3131
return "space-evenly";
32+
case YGAlignStart:
33+
return "start";
34+
case YGAlignEnd:
35+
return "end";
3236
}
3337
return "unknown";
3438
}
@@ -73,6 +77,8 @@ const char* YGDisplayToString(const YGDisplay value) {
7377
return "none";
7478
case YGDisplayContents:
7579
return "contents";
80+
case YGDisplayGrid:
81+
return "grid";
7682
}
7783
return "unknown";
7884
}
@@ -143,6 +149,22 @@ const char* YGFlexDirectionToString(const YGFlexDirection value) {
143149
return "unknown";
144150
}
145151

152+
const char* YGGridTrackTypeToString(const YGGridTrackType value) {
153+
switch (value) {
154+
case YGGridTrackTypeAuto:
155+
return "auto";
156+
case YGGridTrackTypePoints:
157+
return "points";
158+
case YGGridTrackTypePercent:
159+
return "percent";
160+
case YGGridTrackTypeFr:
161+
return "fr";
162+
case YGGridTrackTypeMinmax:
163+
return "minmax";
164+
}
165+
return "unknown";
166+
}
167+
146168
const char* YGGutterToString(const YGGutter value) {
147169
switch (value) {
148170
case YGGutterColumn:
@@ -157,6 +179,8 @@ const char* YGGutterToString(const YGGutter value) {
157179

158180
const char* YGJustifyToString(const YGJustify value) {
159181
switch (value) {
182+
case YGJustifyAuto:
183+
return "auto";
160184
case YGJustifyFlexStart:
161185
return "flex-start";
162186
case YGJustifyCenter:
@@ -169,6 +193,12 @@ const char* YGJustifyToString(const YGJustify value) {
169193
return "space-around";
170194
case YGJustifySpaceEvenly:
171195
return "space-evenly";
196+
case YGJustifyStretch:
197+
return "stretch";
198+
case YGJustifyStart:
199+
return "start";
200+
case YGJustifyEnd:
201+
return "end";
172202
}
173203
return "unknown";
174204
}

yoga/YGEnums.h

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ YG_ENUM_DECL(
2222
YGAlignBaseline,
2323
YGAlignSpaceBetween,
2424
YGAlignSpaceAround,
25-
YGAlignSpaceEvenly)
25+
YGAlignSpaceEvenly,
26+
YGAlignStart,
27+
YGAlignEnd)
2628

2729
YG_ENUM_DECL(
2830
YGBoxSizing,
@@ -44,7 +46,8 @@ YG_ENUM_DECL(
4446
YGDisplay,
4547
YGDisplayFlex,
4648
YGDisplayNone,
47-
YGDisplayContents)
49+
YGDisplayContents,
50+
YGDisplayGrid)
4851

4952
YG_ENUM_DECL(
5053
YGEdge,
@@ -80,6 +83,14 @@ YG_ENUM_DECL(
8083
YGFlexDirectionRow,
8184
YGFlexDirectionRowReverse)
8285

86+
YG_ENUM_DECL(
87+
YGGridTrackType,
88+
YGGridTrackTypeAuto,
89+
YGGridTrackTypePoints,
90+
YGGridTrackTypePercent,
91+
YGGridTrackTypeFr,
92+
YGGridTrackTypeMinmax)
93+
8394
YG_ENUM_DECL(
8495
YGGutter,
8596
YGGutterColumn,
@@ -88,12 +99,16 @@ YG_ENUM_DECL(
8899

89100
YG_ENUM_DECL(
90101
YGJustify,
102+
YGJustifyAuto,
91103
YGJustifyFlexStart,
92104
YGJustifyCenter,
93105
YGJustifyFlexEnd,
94106
YGJustifySpaceBetween,
95107
YGJustifySpaceAround,
96-
YGJustifySpaceEvenly)
108+
YGJustifySpaceEvenly,
109+
YGJustifyStretch,
110+
YGJustifyStart,
111+
YGJustifyEnd)
97112

98113
YG_ENUM_DECL(
99114
YGLogLevel,

0 commit comments

Comments
 (0)