From 5eebba96ae4e4b09a42606ea3cef1e992f1fe557 Mon Sep 17 00:00:00 2001 From: LeshaInc Date: Thu, 20 May 2021 19:43:37 +0300 Subject: [PATCH] Auto focus text input --- .../ocelot/desktop/node/SetLabelDialog.scala | 1 + .../ocelot/desktop/ui/widget/TextInput.scala | 24 ++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/main/scala/ocelot/desktop/node/SetLabelDialog.scala b/src/main/scala/ocelot/desktop/node/SetLabelDialog.scala index 9500a3f..b2890e4 100644 --- a/src/main/scala/ocelot/desktop/node/SetLabelDialog.scala +++ b/src/main/scala/ocelot/desktop/node/SetLabelDialog.scala @@ -15,6 +15,7 @@ class SetLabelDialog(node: Node) extends ModalDialog { }, Padding2D(bottom = 16)) children :+= new PaddingBox(new TextInput(node.label.getOrElse("")) { + focus() override def onInput(text: String): Unit = { node.label = if (text.isEmpty) None else Some(text) } diff --git a/src/main/scala/ocelot/desktop/ui/widget/TextInput.scala b/src/main/scala/ocelot/desktop/ui/widget/TextInput.scala index 382a5d8..8e62a63 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/TextInput.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/TextInput.scala @@ -16,7 +16,7 @@ import scala.collection.mutable.ArrayBuffer class TextInput(val initialText: String = "") extends Widget with ClickHandler { def onInput(text: String): Unit = {} - private var isFocused = false + var isFocused = false private var cursorPos = 0 private var cursorOffset = 0f @@ -37,16 +37,11 @@ class TextInput(val initialText: String = "") extends Widget with ClickHandler { eventHandlers += { case MouseEvent(MouseEvent.State.Release, MouseEvent.Button.Left) => - if (isFocused && !clippedBounds.contains(UiHandler.mousePosition)) { - isFocused = false - borderAnimation.goto(UnfocusedBorderColor) - } + if (isFocused && !clippedBounds.contains(UiHandler.mousePosition)) + unfocus() case ClickEvent(MouseEvent.Button.Left, _) => - if (!isFocused) - borderAnimation.goto(FocusedBorderColor) - isFocused = true - blinkTimer = 0 + focus() case KeyEvent(KeyEvent.State.Press | KeyEvent.State.Repeat, Keyboard.KEY_LEFT, _) => events += new CursorMoveLeft @@ -78,6 +73,17 @@ class TextInput(val initialText: String = "") extends Widget with ClickHandler { override def minimumSize: Size2D = Size2D(200, 24) override def maximumSize: Size2D = Size2D(Float.PositiveInfinity, 24) + def focus(): Unit = { + borderAnimation.goto(FocusedBorderColor) + isFocused = true + blinkTimer = 0 + } + + def unfocus(): Unit = { + isFocused = false + borderAnimation.goto(UnfocusedBorderColor) + } + override def draw(g: Graphics): Unit = { if (textWidth == 0f && text.nonEmpty) textWidth = text.map(g.font.charWidth(_)).sum