From 1392d284d167299504782355c4931c60a0166a74 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Sat, 10 Aug 2019 22:04:59 -0400 Subject: [PATCH] Fix ProgramBlockView having too narrow width --- .../shadowfacts/asmr/ui/ProgramBlockView.kt | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/net/shadowfacts/asmr/ui/ProgramBlockView.kt b/src/main/kotlin/net/shadowfacts/asmr/ui/ProgramBlockView.kt index 4543786..5e76cd8 100644 --- a/src/main/kotlin/net/shadowfacts/asmr/ui/ProgramBlockView.kt +++ b/src/main/kotlin/net/shadowfacts/asmr/ui/ProgramBlockView.kt @@ -38,6 +38,7 @@ class ProgramBlockView(val block: ProgramBlock): StackView(Axis.VERTICAL, Distri var xConstraint: Constraint? = null var yConstraint: Constraint? = null + var didCreateWidthConstraint = false override fun wasAdded() { super.wasAdded() @@ -48,7 +49,7 @@ class ProgramBlockView(val block: ProgramBlock): StackView(Axis.VERTICAL, Distri zIndex = 10.0 val titleStack = addArrangedSubview(StackView(Axis.HORIZONTAL, Distribution.CENTER)) - val title = titleStack.addArrangedSubview(Label(block.translateName())) + val title = titleStack.addArrangedSubview(Label(block.translateName(), wrappingMode = Label.WrappingMode.NO_WRAP)) if (block is ExecutableBlock) { val incomingTexture = if (block.executionFlow.prev == null) emptyConnection else executionConnection incomingExecution = titleStack.addArrangedSubview(TextureView(incomingTexture), index = 0) @@ -59,7 +60,6 @@ class ProgramBlockView(val block: ProgramBlock): StackView(Axis.VERTICAL, Distri solver.dsl { // we have to constrain the titleStack height, because it's distribution is set to CENTER, so it doesn't do it itself titleStack.heightAnchor equalTo title.heightAnchor - widthAnchor greaterThanOrEqualTo titleStack.widthAnchor if (block is ExecutableBlock) { incomingExecution!!.widthAnchor equalTo incomingExecution!!.heightAnchor @@ -114,6 +114,23 @@ class ProgramBlockView(val block: ProgramBlock): StackView(Axis.VERTICAL, Distri updateDraggingConstraints() } + override fun didLayout() { + super.didLayout() + + // we want to constrain this view's width to be the same as the widest view in the vertical stack, + // but we don't know what view that is until after all subviews have been laid-out + if (!didCreateWidthConstraint) { + didCreateWidthConstraint = true + + arrangedSubviews.maxBy { it.bounds.width }?.let { widestSubview -> + solver.dsl { + widthAnchor equalTo widestSubview.widthAnchor + } + window!!.layout() + } + } + } + override fun mouseDragged(startPoint: Point, delta: Point, mouseButton: MouseButton): Boolean { block.position += delta updateDraggingConstraints()