Skip to content

Commit 5de159c

Browse files
authored
Merge pull request #68 from cheonjaeung/refactor-grid-span
Rafactor internal span handling code of horizontal, vertical grid
2 parents 8df5d83 + 9ac00a9 commit 5de159c

File tree

4 files changed

+19
-13
lines changed

4 files changed

+19
-13
lines changed

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.compose.runtime.Immutable
55
import androidx.compose.runtime.Stable
66
import androidx.compose.ui.Alignment
77
import androidx.compose.ui.Modifier
8+
import androidx.compose.ui.platform.debugInspectorInfo
89

910
/**
1011
* A Scope for the children of [HorizontalGrid] or [VerticalGrid].
@@ -32,7 +33,11 @@ internal object GridScopeInstance : GridScope {
3233
override fun Modifier.span(span: (GridItemSpanScope.() -> Int)?): Modifier {
3334
return this.then(
3435
HorizontalVerticalGridSpanElement(
35-
span ?: HorizontalVerticalGridParentData.DefaultSpan
36+
span = span,
37+
inspectorInfo = debugInspectorInfo {
38+
name = "span"
39+
value = span
40+
}
3641
)
3742
)
3843
}

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,6 @@ private class HorizontalVerticalGridMeasureHelper(
118118
measurables[it].parentData as? HorizontalVerticalGridParentData
119119
}
120120

121-
private val HorizontalVerticalGridParentData?.spanOrDefault: (GridItemSpanScope.() -> Int)
122-
get() = this?.span ?: HorizontalVerticalGridParentData.DefaultSpan
123-
124121
/**
125122
* Measures children composable constraints.
126123
*/
@@ -158,9 +155,14 @@ private class HorizontalVerticalGridMeasureHelper(
158155
maxCurrentLineSpan = maxSpan - spanSum,
159156
maxLineSpan = maxSpan
160157
)
161-
val scopeFunction = gridParentDataArrays[measurableIndex].spanOrDefault
162-
val span = scopeFunction(spanScope)
158+
val spanFunction = gridParentDataArrays[measurableIndex]?.span
159+
val span = if (spanFunction != null) {
160+
with(spanScope) { spanFunction() }
161+
} else {
162+
1
163+
}
163164
require(span > 0) { "span must be bigger than zero, $span is zero or negative" }
165+
164166
if (span > maxSpan) {
165167
measurableIndex++
166168
continue

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@ import androidx.compose.ui.Alignment
66
* A data class to contain modifier options of item at the specified position.
77
*/
88
internal data class HorizontalVerticalGridParentData(
9-
var span: GridItemSpanScope.() -> Int = DefaultSpan,
9+
var span: (GridItemSpanScope.() -> Int)? = null,
1010
var alignment: Alignment = DefaultAlignment
1111
) {
1212
companion object {
13-
internal val DefaultSpan: GridItemSpanScope.() -> Int = { 1 }
1413
internal val DefaultAlignment: Alignment = Alignment.TopStart
1514
}
1615
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import androidx.compose.ui.platform.InspectorInfo
77
import androidx.compose.ui.unit.Density
88

99
internal class HorizontalVerticalGridSpanElement(
10-
val span: GridItemSpanScope.() -> Int
10+
val span: (GridItemSpanScope.() -> Int)?,
11+
val inspectorInfo: InspectorInfo.() -> Unit
1112
) : ModifierNodeElement<HorizontalVerticalGridSpanNode>() {
1213
override fun create(): HorizontalVerticalGridSpanNode {
1314
return HorizontalVerticalGridSpanNode(span)
@@ -18,8 +19,7 @@ internal class HorizontalVerticalGridSpanElement(
1819
}
1920

2021
override fun InspectorInfo.inspectableProperties() {
21-
name = "span"
22-
value = span
22+
inspectorInfo()
2323
}
2424

2525
override fun equals(other: Any?): Boolean {
@@ -35,11 +35,11 @@ internal class HorizontalVerticalGridSpanElement(
3535
}
3636

3737
internal class HorizontalVerticalGridSpanNode(
38-
var span: GridItemSpanScope.() -> Int
38+
var span: (GridItemSpanScope.() -> Int)?
3939
) : Modifier.Node(), ParentDataModifierNode {
4040
override fun Density.modifyParentData(parentData: Any?): Any {
4141
val p = parentData as? HorizontalVerticalGridParentData ?: HorizontalVerticalGridParentData()
42-
if (p.span == HorizontalVerticalGridParentData.DefaultSpan) {
42+
if (p.span == null) {
4343
p.span = span
4444
}
4545
return p

0 commit comments

Comments
 (0)