mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-14 09:56:37 -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.data.text.ChatComponent
|
||||
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.primitive.LabelNode
|
||||
import de.bixilon.minosoft.gui.rendering.hud.nodes.properties.NodeSizing
|
||||
import de.bixilon.minosoft.util.MMath
|
||||
import glm_.vec2.Vec2i
|
||||
|
||||
@ -26,9 +26,10 @@ import glm_.vec2.Vec2i
|
||||
open class TextField(
|
||||
renderWindow: RenderWindow,
|
||||
val properties: TextFieldProperties,
|
||||
) : AbsoluteLayout(renderWindow), KeyConsumer, MouseConsumer {
|
||||
sizing: NodeSizing = NodeSizing(),
|
||||
) : AbsoluteLayout(renderWindow, sizing = sizing), KeyConsumer, MouseConsumer {
|
||||
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
|
||||
|
||||
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.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.elements.input.TextField
|
||||
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.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.util.MMath
|
||||
import glm_.vec2.Vec2i
|
||||
|
||||
class ChatBoxHUDElement(hudRenderer: HUDRenderer) : HUDElement(hudRenderer), ScreenResizeCallback {
|
||||
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() {
|
||||
inputField = TextField(
|
||||
@ -40,7 +33,8 @@ class ChatBoxHUDElement(hudRenderer: HUDRenderer) : HUDElement(hudRenderer), Scr
|
||||
submitCloses = true,
|
||||
onSubmit = { hudRenderer.renderWindow.connection.sender.sendChatMessage(it) },
|
||||
onClose = { closeChat() },
|
||||
))
|
||||
),
|
||||
)
|
||||
|
||||
layout.addChild(Vec2i(0, 0), inputField)
|
||||
inputField.apply()
|
||||
@ -52,19 +46,19 @@ class ChatBoxHUDElement(hudRenderer: HUDRenderer) : HUDElement(hudRenderer), Scr
|
||||
|
||||
override fun onScreenResize(screenDimensions: Vec2i) {
|
||||
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
|
||||
inputField.textElement.setProperties.hardWrap = inputField.textElement.sizing.minSize.x
|
||||
layout.sizing.validate()
|
||||
layout.apply()
|
||||
}
|
||||
|
||||
fun openChat() {
|
||||
layout.addChild(Vec2i(0, 0), inputFieldBackground)
|
||||
hudRenderer.renderWindow.inputHandler.currentKeyConsumer = inputField
|
||||
}
|
||||
|
||||
fun closeChat() {
|
||||
layout.removeChild(inputFieldBackground)
|
||||
hudRenderer.renderWindow.inputHandler.currentKeyConsumer = null
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user