Skip to content

Commit cb05765

Browse files
authored
Merge pull request #110 from cheonjaeung/cheon/refactor-modifiers
Collect custom modifiers to single file
2 parents 5c32075 + 1fe758e commit cb05765

10 files changed

Lines changed: 273 additions & 310 deletions

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

Lines changed: 0 additions & 46 deletions
This file was deleted.

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

Lines changed: 0 additions & 55 deletions
This file was deleted.

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

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
package com.cheonjaeung.compose.grid
2+
3+
import androidx.compose.ui.Alignment
4+
import androidx.compose.ui.Modifier
5+
import androidx.compose.ui.node.ModifierNodeElement
6+
import androidx.compose.ui.node.ParentDataModifierNode
7+
import androidx.compose.ui.platform.InspectorInfo
8+
import androidx.compose.ui.unit.Density
9+
10+
internal data class BoxGridParentData(
11+
var row: Int? = null,
12+
var column: Int? = null,
13+
var span: (BoxGridItemSpanScope.() -> BoxGridItemSpan)? = null,
14+
var alignment: Alignment? = null
15+
)
16+
17+
internal class BoxGridCellPositionElement(
18+
val row: Int? = null,
19+
val column: Int? = null,
20+
val inspectorInfo: InspectorInfo.() -> Unit
21+
) : ModifierNodeElement<BoxGridCellPositionNode>() {
22+
override fun create(): BoxGridCellPositionNode {
23+
return BoxGridCellPositionNode(row, column)
24+
}
25+
26+
override fun update(node: BoxGridCellPositionNode) {
27+
node.row = row
28+
node.column = column
29+
}
30+
31+
override fun InspectorInfo.inspectableProperties() {
32+
inspectorInfo()
33+
}
34+
35+
override fun equals(other: Any?): Boolean {
36+
if (this === other) return true
37+
if (other == null) return false
38+
if (other !is BoxGridCellPositionElement) return false
39+
return this.row == other.row && this.column == other.column
40+
}
41+
42+
override fun hashCode(): Int {
43+
var hash = row.hashCode()
44+
hash = 31 * hash + column.hashCode()
45+
return hash
46+
}
47+
}
48+
49+
internal class BoxGridCellPositionNode(
50+
var row: Int?,
51+
var column: Int?
52+
) : Modifier.Node(), ParentDataModifierNode {
53+
override fun Density.modifyParentData(parentData: Any?): Any {
54+
val p = parentData as? BoxGridParentData ?: BoxGridParentData()
55+
if (row != null) {
56+
p.row = row
57+
}
58+
if (column != null) {
59+
p.column = column
60+
}
61+
return p
62+
}
63+
}
64+
65+
internal class BoxGridSpanElement(
66+
val span: (BoxGridItemSpanScope.() -> BoxGridItemSpan)? = null,
67+
val inspectorInfo: InspectorInfo.() -> Unit
68+
) : ModifierNodeElement<BoxGridSpanNode>() {
69+
override fun create(): BoxGridSpanNode {
70+
return BoxGridSpanNode(span)
71+
}
72+
73+
override fun update(node: BoxGridSpanNode) {
74+
node.span = span
75+
}
76+
77+
override fun InspectorInfo.inspectableProperties() {
78+
inspectorInfo()
79+
}
80+
81+
override fun equals(other: Any?): Boolean {
82+
if (this === other) return true
83+
if (other == null) return false
84+
if (other !is BoxGridSpanElement) return false
85+
return this.span == other.span
86+
}
87+
88+
override fun hashCode(): Int {
89+
return span.hashCode()
90+
}
91+
}
92+
93+
internal class BoxGridSpanNode(
94+
var span: (BoxGridItemSpanScope.() -> BoxGridItemSpan)?
95+
) : Modifier.Node(), ParentDataModifierNode {
96+
override fun Density.modifyParentData(parentData: Any?): Any {
97+
val p = parentData as? BoxGridParentData ?: BoxGridParentData()
98+
if (p.span == null) {
99+
p.span = span
100+
}
101+
return p
102+
}
103+
}
104+
105+
internal class BoxGridAlignmentElement(
106+
val alignment: Alignment
107+
) : ModifierNodeElement<BoxGridAlignmentNode>() {
108+
override fun create(): BoxGridAlignmentNode {
109+
return BoxGridAlignmentNode(alignment)
110+
}
111+
112+
override fun update(node: BoxGridAlignmentNode) {
113+
node.alignment = alignment
114+
}
115+
116+
override fun InspectorInfo.inspectableProperties() {
117+
name = "align"
118+
value = alignment
119+
}
120+
121+
override fun equals(other: Any?): Boolean {
122+
if (this === other) return true
123+
if (other == null) return false
124+
if (other !is BoxGridAlignmentElement) return false
125+
return this.alignment == other.alignment
126+
}
127+
128+
override fun hashCode(): Int {
129+
return alignment.hashCode()
130+
}
131+
}
132+
133+
internal class BoxGridAlignmentNode(
134+
var alignment: Alignment
135+
) : Modifier.Node(), ParentDataModifierNode {
136+
override fun Density.modifyParentData(parentData: Any?): Any {
137+
val p = parentData as? BoxGridParentData ?: BoxGridParentData()
138+
p.alignment = alignment
139+
return p
140+
}
141+
}

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

Lines changed: 0 additions & 47 deletions
This file was deleted.

0 commit comments

Comments
 (0)