Add StackView spacing
This commit is contained in:
parent
c5280143b0
commit
e92bcd81cb
|
@ -20,7 +20,7 @@ class TestCacaoScreen: CacaoScreen() {
|
|||
|
||||
init {
|
||||
addWindow(Window().apply {
|
||||
val stack = addView(StackView(Axis.VERTICAL, StackView.Distribution.CENTER).apply {
|
||||
val stack = addView(StackView(Axis.VERTICAL, StackView.Distribution.CENTER, spacing = 4.0).apply {
|
||||
backgroundColor = Color.WHITE
|
||||
})
|
||||
val red = stack.addArrangedSubview(TextureView(Texture(Identifier("textures/block/birch_log_top.png"), 0, 0, 16, 16)).apply {
|
||||
|
|
|
@ -42,13 +42,13 @@ class DialogView(
|
|||
override fun wasAdded() {
|
||||
background = addSubview(NinePatchView(NinePatchTexture.PANEL_BG).apply { zIndex = -1.0 })
|
||||
|
||||
hStack = addSubview(StackView(Axis.HORIZONTAL, StackView.Distribution.LEADING))
|
||||
hStack = addSubview(StackView(Axis.HORIZONTAL, StackView.Distribution.LEADING, spacing = 8.0))
|
||||
|
||||
if (iconTexture != null) {
|
||||
iconView = hStack.addArrangedSubview(TextureView(iconTexture))
|
||||
}
|
||||
|
||||
vStack = hStack.addArrangedSubview(StackView(Axis.VERTICAL))
|
||||
vStack = hStack.addArrangedSubview(StackView(Axis.VERTICAL, spacing = 4.0))
|
||||
|
||||
vStack.addArrangedSubview(Label(ChatFormat.BOLD.toString() + title, shadow = false).apply {
|
||||
textColor = Color(0x404040)
|
||||
|
@ -79,7 +79,7 @@ class DialogView(
|
|||
centerXAnchor equalTo window.centerXAnchor
|
||||
centerYAnchor equalTo window.centerYAnchor
|
||||
|
||||
widthAnchor greaterThanOrEqualTo 150
|
||||
widthAnchor greaterThanOrEqualTo 175
|
||||
|
||||
background.leftAnchor equalTo leftAnchor - 8
|
||||
background.rightAnchor equalTo rightAnchor + 8
|
||||
|
|
|
@ -19,7 +19,11 @@ import java.util.*
|
|||
* @param distribution The mode by which this stack lays out its children along the axis perpendicular to the
|
||||
* primary [axis].
|
||||
*/
|
||||
class StackView(val axis: Axis, val distribution: Distribution = Distribution.FILL): View() {
|
||||
class StackView(
|
||||
val axis: Axis,
|
||||
val distribution: Distribution = Distribution.FILL,
|
||||
val spacing: Double = 0.0
|
||||
): View() {
|
||||
|
||||
// the internal mutable, list of arranged subviews
|
||||
private val _arrangedSubviews = LinkedList<View>()
|
||||
|
@ -75,10 +79,10 @@ class StackView(val axis: Axis, val distribution: Distribution = Distribution.FI
|
|||
val previous = arrangedSubviews.getOrNull(index - 1)
|
||||
val next = arrangedSubviews.getOrNull(index + 1)
|
||||
if (next != null) {
|
||||
arrangedSubviewConnections.add(index, anchor(TRAILING, view) equalTo anchor(LEADING, next))
|
||||
arrangedSubviewConnections.add(index, anchor(TRAILING, view) equalTo (anchor(LEADING, next) + spacing))
|
||||
}
|
||||
if (previous != null) {
|
||||
arrangedSubviewConnections.add(index - 1, anchor(TRAILING, previous) equalTo anchor(LEADING, view))
|
||||
arrangedSubviewConnections.add(index - 1, anchor(TRAILING, previous) equalTo (anchor(LEADING, view) - spacing))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -191,4 +191,57 @@ class StackViewLayoutTests {
|
|||
assertEquals(100.0, three.rightAnchor.value)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testVerticalLayoutWithSpacing() {
|
||||
val stack = window.addView(StackView(Axis.VERTICAL, spacing = 10.0))
|
||||
val one = stack.addArrangedSubview(View().apply {
|
||||
intrinsicContentSize = Size(50.0, 50.0)
|
||||
})
|
||||
val two = stack.addArrangedSubview(View().apply {
|
||||
intrinsicContentSize = Size(75.0, 75.0)
|
||||
})
|
||||
val three = stack.addArrangedSubview(View().apply {
|
||||
intrinsicContentSize = Size(50.0, 50.0)
|
||||
})
|
||||
window.solver.dsl {
|
||||
stack.topAnchor equalTo 0
|
||||
}
|
||||
window.layout()
|
||||
|
||||
assertEquals(0.0, abs(one.topAnchor.value)) // sometimes -0.0, which fails the assertion but is actually ok
|
||||
assertEquals(50.0, one.bottomAnchor.value)
|
||||
assertEquals(60.0, two.topAnchor.value)
|
||||
assertEquals(135.0, two.bottomAnchor.value)
|
||||
assertEquals(145.0, three.topAnchor.value)
|
||||
assertEquals(195.0, three.bottomAnchor.value)
|
||||
|
||||
assertEquals(195.0, stack.heightAnchor.value)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testHorizontalLayoutWithSpacing() {
|
||||
val stack = window.addView(StackView(Axis.HORIZONTAL, spacing = 10.0))
|
||||
val one = stack.addArrangedSubview(View().apply {
|
||||
intrinsicContentSize = Size(50.0, 50.0)
|
||||
})
|
||||
val two = stack.addArrangedSubview(View().apply {
|
||||
intrinsicContentSize = Size(75.0, 75.0)
|
||||
})
|
||||
val three = stack.addArrangedSubview(View().apply {
|
||||
intrinsicContentSize = Size(50.0, 50.0)
|
||||
})
|
||||
window.solver.dsl {
|
||||
stack.leftAnchor equalTo 0
|
||||
}
|
||||
window.layout()
|
||||
|
||||
assertEquals(0.0, abs(one.leftAnchor.value)) // sometimes -0.0, which fails the assertion but is actually ok
|
||||
assertEquals(50.0, one.rightAnchor.value)
|
||||
assertEquals(60.0, two.leftAnchor.value)
|
||||
assertEquals(135.0, two.rightAnchor.value)
|
||||
assertEquals(145.0, three.leftAnchor.value)
|
||||
assertEquals(195.0, three.rightAnchor.value)
|
||||
|
||||
assertEquals(195.0, stack.widthAnchor.value)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue