Skip to content

Commit 8705697

Browse files
committed
Add position modifier
1 parent ecbec2b commit 8705697

File tree

6 files changed

+90
-160
lines changed

6 files changed

+90
-160
lines changed

grid/api/android/grid.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public abstract interface class com/cheonjaeung/compose/grid/BoxGridItemSpanScop
2424
public abstract interface class com/cheonjaeung/compose/grid/BoxGridScope {
2525
public abstract fun align (Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;)Landroidx/compose/ui/Modifier;
2626
public abstract fun column (Landroidx/compose/ui/Modifier;I)Landroidx/compose/ui/Modifier;
27+
public abstract fun position (Landroidx/compose/ui/Modifier;II)Landroidx/compose/ui/Modifier;
2728
public abstract fun row (Landroidx/compose/ui/Modifier;I)Landroidx/compose/ui/Modifier;
2829
public abstract fun span (Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
2930
}

grid/api/jvm/grid.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public abstract interface class com/cheonjaeung/compose/grid/BoxGridItemSpanScop
2424
public abstract interface class com/cheonjaeung/compose/grid/BoxGridScope {
2525
public abstract fun align (Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;)Landroidx/compose/ui/Modifier;
2626
public abstract fun column (Landroidx/compose/ui/Modifier;I)Landroidx/compose/ui/Modifier;
27+
public abstract fun position (Landroidx/compose/ui/Modifier;II)Landroidx/compose/ui/Modifier;
2728
public abstract fun row (Landroidx/compose/ui/Modifier;I)Landroidx/compose/ui/Modifier;
2829
public abstract fun span (Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
2930
}

grid/src/commonMain/kotlin/com/cheonjaeung/compose/grid/BoxGridScope.kt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ interface BoxGridScope {
3030
@ExperimentalGridApi
3131
fun Modifier.column(column: Int): Modifier
3232

33+
/**
34+
* Sets the row and column position of the cell. The position starts from 0 and
35+
* the default is 0.
36+
*/
37+
@Stable
38+
@ExperimentalGridApi
39+
fun Modifier.position(row: Int, column: Int): Modifier
40+
3341
/**
3442
* Sets the row and column span of the cell. The default span size is 1.
3543
*
@@ -76,6 +84,22 @@ internal object BoxGridScopeInstance : BoxGridScope {
7684
)
7785
}
7886

87+
override fun Modifier.position(row: Int, column: Int): Modifier {
88+
require(row >= 0) { "$row is invalid value, must be zero or positive" }
89+
require(column >= 0) { "$column is invalid value, must be zero or positive" }
90+
return this.then(
91+
BoxGridCellPositionElement(
92+
row = row,
93+
column = column,
94+
inspectorInfo = debugInspectorInfo {
95+
name = "position"
96+
properties["row"] = row
97+
properties["column"] = column
98+
}
99+
)
100+
)
101+
}
102+
79103
override fun Modifier.span(span: (BoxGridItemSpanScope.() -> BoxGridItemSpan)?): Modifier {
80104
return this.then(
81105
BoxGridSpanElement(

grid/src/test/java/com/cheonjaeung/compose/grid/BoxGridAlignmentTest.kt

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ class BoxGridAlignmentTest {
4949

5050
Box(
5151
modifier = Modifier
52-
.row(row)
53-
.column(column)
52+
.position(row, column)
5453
.size(100.dp)
5554
.background(colors[index % 4])
5655
)
@@ -73,8 +72,7 @@ class BoxGridAlignmentTest {
7372

7473
Box(
7574
modifier = Modifier
76-
.row(row)
77-
.column(column)
75+
.position(row, column)
7876
.size(100.dp)
7977
.background(colors[index % 4])
8078
)
@@ -124,8 +122,7 @@ class BoxGridAlignmentTest {
124122

125123
Box(
126124
modifier = Modifier
127-
.row(row)
128-
.column(column)
125+
.position(row, column)
129126
.size(100.dp)
130127
.background(colors[index % 4])
131128
.align(alignment)
@@ -150,8 +147,7 @@ class BoxGridAlignmentTest {
150147

151148
Box(
152149
modifier = Modifier
153-
.row(row)
154-
.column(column)
150+
.position(row, column)
155151
.size(100.dp)
156152
.background(colors[index % 4])
157153
.align(alignment)
@@ -203,8 +199,7 @@ class BoxGridAlignmentTest {
203199

204200
Box(
205201
modifier = Modifier
206-
.row(row)
207-
.column(column)
202+
.position(row, column)
208203
.size(100.dp)
209204
.background(colors[index % 4])
210205
.then(
@@ -236,8 +231,7 @@ class BoxGridAlignmentTest {
236231

237232
Box(
238233
modifier = Modifier
239-
.row(row)
240-
.column(column)
234+
.position(row, column)
241235
.size(100.dp)
242236
.background(colors[index % 4])
243237
.then(

grid/src/test/java/com/cheonjaeung/compose/grid/BoxGridSpanTest.kt

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,13 @@ class BoxGridSpanTest {
3636
)
3737
Box(
3838
modifier = Modifier
39-
.row(1)
40-
.column(1)
39+
.position(row = 1, column = 1)
4140
.size(100.dp)
4241
.background(Color.Green)
4342
)
4443
Box(
4544
modifier = Modifier
46-
.row(2)
47-
.column(2)
45+
.position(row = 2, column = 2)
4846
.size(100.dp)
4947
.background(Color.Yellow)
5048
)
@@ -70,16 +68,14 @@ class BoxGridSpanTest {
7068
)
7169
Box(
7270
modifier = Modifier
73-
.row(1)
74-
.column(1)
71+
.position(row = 1, column = 1)
7572
.size(100.dp)
7673
.background(Color.Green)
7774
.span { BoxGridItemSpan(row = 1, column = 1) }
7875
)
7976
Box(
8077
modifier = Modifier
81-
.row(2)
82-
.column(2)
78+
.position(row = 2, column = 2)
8379
.size(100.dp)
8480
.background(Color.Yellow)
8581
.span { BoxGridItemSpan(row = 1, column = 1) }
@@ -106,16 +102,14 @@ class BoxGridSpanTest {
106102
)
107103
Box(
108104
modifier = Modifier
109-
.row(1)
110-
.column(1)
105+
.position(row = 1, column = 1)
111106
.size(100.dp)
112107
.background(Color.Green)
113108
.span { BoxGridItemSpan(row = 2, column = 2) }
114109
)
115110
Box(
116111
modifier = Modifier
117-
.row(2)
118-
.column(2)
112+
.position(row = 2, column = 2)
119113
.size(100.dp)
120114
.background(Color.Yellow)
121115
.span { BoxGridItemSpan(column = 2) }
@@ -142,16 +136,14 @@ class BoxGridSpanTest {
142136
)
143137
Box(
144138
modifier = Modifier
145-
.row(1)
146-
.column(1)
139+
.position(row = 1, column = 1)
147140
.size(100.dp)
148141
.background(Color.Green)
149142
.span { BoxGridItemSpan(row = maxRowSpan + 1, column = maxColumnSpan + 1) }
150143
)
151144
Box(
152145
modifier = Modifier
153-
.row(2)
154-
.column(2)
146+
.position(row = 2, column = 2)
155147
.size(100.dp)
156148
.background(Color.Yellow)
157149
.span { BoxGridItemSpan(column = 2) }
@@ -178,15 +170,13 @@ class BoxGridSpanTest {
178170
)
179171
Box(
180172
modifier = Modifier
181-
.row(1)
182-
.column(1)
173+
.position(row = 1, column = 1)
183174
.size(100.dp)
184175
.background(Color.Green)
185176
)
186177
Box(
187178
modifier = Modifier
188-
.row(2)
189-
.column(2)
179+
.position(row = 2, column = 2)
190180
.size(100.dp)
191181
.background(Color.Yellow)
192182
)
@@ -211,16 +201,14 @@ class BoxGridSpanTest {
211201
)
212202
Box(
213203
modifier = Modifier
214-
.row(1)
215-
.column(1)
204+
.position(row = 1, column = 1)
216205
.size(100.dp)
217206
.background(Color.Green)
218207
.span { BoxGridItemSpan(row = maxCurrentRowSpan) }
219208
)
220209
Box(
221210
modifier = Modifier
222-
.row(2)
223-
.column(2)
211+
.position(row = 2, column = 2)
224212
.size(100.dp)
225213
.background(Color.Yellow)
226214
.span { BoxGridItemSpan(column = maxCurrentColumnSpan) }

0 commit comments

Comments
 (0)