mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-14 01:48:04 -04:00
chat box: set background dynamically
This commit is contained in:
parent
c23a4a9970
commit
8e4ffe5962
@ -16,9 +16,9 @@ package de.bixilon.minosoft.gui.rendering.hud.elements.input
|
|||||||
import de.bixilon.minosoft.config.key.KeyCodes
|
import de.bixilon.minosoft.config.key.KeyCodes
|
||||||
import de.bixilon.minosoft.data.text.ChatComponent
|
import de.bixilon.minosoft.data.text.ChatComponent
|
||||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||||
import de.bixilon.minosoft.gui.rendering.font.text.TextSetProperties
|
|
||||||
import de.bixilon.minosoft.gui.rendering.hud.nodes.layout.AbsoluteLayout
|
import de.bixilon.minosoft.gui.rendering.hud.nodes.layout.AbsoluteLayout
|
||||||
import de.bixilon.minosoft.gui.rendering.hud.nodes.primitive.LabelNode
|
import de.bixilon.minosoft.gui.rendering.hud.nodes.primitive.LabelNode
|
||||||
|
import de.bixilon.minosoft.gui.rendering.hud.nodes.properties.NodeSizing
|
||||||
import de.bixilon.minosoft.util.MMath
|
import de.bixilon.minosoft.util.MMath
|
||||||
import glm_.vec2.Vec2i
|
import glm_.vec2.Vec2i
|
||||||
|
|
||||||
@ -26,9 +26,10 @@ import glm_.vec2.Vec2i
|
|||||||
open class TextField(
|
open class TextField(
|
||||||
renderWindow: RenderWindow,
|
renderWindow: RenderWindow,
|
||||||
val properties: TextFieldProperties,
|
val properties: TextFieldProperties,
|
||||||
) : AbsoluteLayout(renderWindow), KeyConsumer, MouseConsumer {
|
sizing: NodeSizing = NodeSizing(),
|
||||||
|
) : AbsoluteLayout(renderWindow, sizing = sizing), KeyConsumer, MouseConsumer {
|
||||||
private var textBuilder: StringBuilder = StringBuilder(properties.defaultText)
|
private var textBuilder: StringBuilder = StringBuilder(properties.defaultText)
|
||||||
val textElement = LabelNode(renderWindow, sizing = sizing.copy(), setProperties = TextSetProperties(hardWrap = 100), text = ChatComponent.of(text), background = false)
|
val textElement = LabelNode(renderWindow, sizing = sizing.copy(), text = ChatComponent.of(text))
|
||||||
private var position = text.length
|
private var position = text.length
|
||||||
|
|
||||||
var text: String
|
var text: String
|
||||||
|
@ -15,22 +15,15 @@ package de.bixilon.minosoft.gui.rendering.hud.nodes.chat
|
|||||||
|
|
||||||
|
|
||||||
import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames
|
import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames
|
||||||
import de.bixilon.minosoft.gui.rendering.RenderConstants
|
|
||||||
import de.bixilon.minosoft.gui.rendering.font.Font
|
|
||||||
import de.bixilon.minosoft.gui.rendering.hud.HUDRenderer
|
import de.bixilon.minosoft.gui.rendering.hud.HUDRenderer
|
||||||
import de.bixilon.minosoft.gui.rendering.hud.elements.input.TextField
|
import de.bixilon.minosoft.gui.rendering.hud.elements.input.TextField
|
||||||
import de.bixilon.minosoft.gui.rendering.hud.elements.input.TextFieldProperties
|
import de.bixilon.minosoft.gui.rendering.hud.elements.input.TextFieldProperties
|
||||||
import de.bixilon.minosoft.gui.rendering.hud.nodes.HUDElement
|
import de.bixilon.minosoft.gui.rendering.hud.nodes.HUDElement
|
||||||
import de.bixilon.minosoft.gui.rendering.hud.nodes.primitive.ImageNode
|
|
||||||
import de.bixilon.minosoft.gui.rendering.hud.nodes.properties.NodeSizing
|
|
||||||
import de.bixilon.minosoft.gui.rendering.hud.nodes.properties.Spacing
|
|
||||||
import de.bixilon.minosoft.gui.rendering.util.abstractions.ScreenResizeCallback
|
import de.bixilon.minosoft.gui.rendering.util.abstractions.ScreenResizeCallback
|
||||||
import de.bixilon.minosoft.util.MMath
|
|
||||||
import glm_.vec2.Vec2i
|
import glm_.vec2.Vec2i
|
||||||
|
|
||||||
class ChatBoxHUDElement(hudRenderer: HUDRenderer) : HUDElement(hudRenderer), ScreenResizeCallback {
|
class ChatBoxHUDElement(hudRenderer: HUDRenderer) : HUDElement(hudRenderer), ScreenResizeCallback {
|
||||||
private lateinit var inputField: TextField
|
private lateinit var inputField: TextField
|
||||||
private var inputFieldBackground = ImageNode(hudRenderer.renderWindow, sizing = NodeSizing(margin = Spacing(left = 1, right = 1)), textureLike = hudRenderer.renderWindow.WHITE_TEXTURE, z = 0, tintColor = RenderConstants.TEXT_BACKGROUND_COLOR)
|
|
||||||
|
|
||||||
override fun init() {
|
override fun init() {
|
||||||
inputField = TextField(
|
inputField = TextField(
|
||||||
@ -40,7 +33,8 @@ class ChatBoxHUDElement(hudRenderer: HUDRenderer) : HUDElement(hudRenderer), Scr
|
|||||||
submitCloses = true,
|
submitCloses = true,
|
||||||
onSubmit = { hudRenderer.renderWindow.connection.sender.sendChatMessage(it) },
|
onSubmit = { hudRenderer.renderWindow.connection.sender.sendChatMessage(it) },
|
||||||
onClose = { closeChat() },
|
onClose = { closeChat() },
|
||||||
))
|
),
|
||||||
|
)
|
||||||
|
|
||||||
layout.addChild(Vec2i(0, 0), inputField)
|
layout.addChild(Vec2i(0, 0), inputField)
|
||||||
inputField.apply()
|
inputField.apply()
|
||||||
@ -52,19 +46,19 @@ class ChatBoxHUDElement(hudRenderer: HUDRenderer) : HUDElement(hudRenderer), Scr
|
|||||||
|
|
||||||
override fun onScreenResize(screenDimensions: Vec2i) {
|
override fun onScreenResize(screenDimensions: Vec2i) {
|
||||||
layout.sizing.minSize.x = screenDimensions.x
|
layout.sizing.minSize.x = screenDimensions.x
|
||||||
inputFieldBackground.sizing.forceSize = Vec2i(screenDimensions.x - 2, MMath.clamp(inputField.textElement.getProperties.lines, 1, Int.MAX_VALUE) * (Font.CHAR_HEIGHT + RenderConstants.TEXT_LINE_PADDING)) // 2 pixels for margin
|
inputField.sizing.minSize.x = screenDimensions.x
|
||||||
|
inputField.sizing.maxSize.x = screenDimensions.x
|
||||||
layout.sizing.maxSize.x = screenDimensions.x
|
layout.sizing.maxSize.x = screenDimensions.x
|
||||||
|
inputField.textElement.setProperties.hardWrap = inputField.textElement.sizing.minSize.x
|
||||||
layout.sizing.validate()
|
layout.sizing.validate()
|
||||||
layout.apply()
|
layout.apply()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun openChat() {
|
fun openChat() {
|
||||||
layout.addChild(Vec2i(0, 0), inputFieldBackground)
|
|
||||||
hudRenderer.renderWindow.inputHandler.currentKeyConsumer = inputField
|
hudRenderer.renderWindow.inputHandler.currentKeyConsumer = inputField
|
||||||
}
|
}
|
||||||
|
|
||||||
fun closeChat() {
|
fun closeChat() {
|
||||||
layout.removeChild(inputFieldBackground)
|
|
||||||
hudRenderer.renderWindow.inputHandler.currentKeyConsumer = null
|
hudRenderer.renderWindow.inputHandler.currentKeyConsumer = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user