Align text vertically when not multilining

This commit is contained in:
DBotThePony 2023-03-07 21:04:25 +07:00
parent 986be8fa1a
commit c91124d25c
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -27,6 +27,7 @@ import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel
import ru.dbotthepony.mc.otm.core.addAll
import ru.dbotthepony.mc.otm.core.math.RGBAColor
import ru.dbotthepony.mc.otm.milliTime
import kotlin.math.roundToInt
open class TextInputPanel<out S : Screen>(
screen: S,
@ -1049,6 +1050,8 @@ open class TextInputPanel<out S : Screen>(
if (!backgroundColor.isFullyTransparent)
drawRect(stack, 0f, 0f, width, height, backgroundColor)
var topPadding = dockPadding.top
if (multiLine) {
val heightInLines = ((height - dockPadding.top - dockPadding.bottom) / (font.lineHeight + rowSpacing)).toInt()
@ -1061,6 +1064,8 @@ open class TextInputPanel<out S : Screen>(
}
} else {
scrollLines = 0
topPadding += ((height - dockPadding.top - dockPadding.bottom - font.lineHeight).coerceAtLeast(0f) / 2f).roundToInt()
}
val selectedLine = this[cursorLine]
@ -1078,7 +1083,7 @@ open class TextInputPanel<out S : Screen>(
stack.pushPose()
stack.translate(-scrollPixels, 0f, 0f)
var y = dockPadding.top
var y = topPadding
for (i in scrollLines until lines.size) {
val line = lines[i]
@ -1146,7 +1151,7 @@ open class TextInputPanel<out S : Screen>(
text = "_",
align = TextAlign.TOP_LEFT,
x = dockPadding.left + (if (activeLine == null) 0f else font.width(activeLine).toFloat()),
y = dockPadding.top + (cursorLine - scrollLines) * (font.lineHeight + rowSpacing),
y = topPadding + (cursorLine - scrollLines) * (font.lineHeight + rowSpacing),
color = cursorColor
)
} else {
@ -1156,7 +1161,7 @@ open class TextInputPanel<out S : Screen>(
text = "|",
align = TextAlign.TOP_LEFT,
x = dockPadding.left + font.width(activeLine.substring(0, cursorRow)).toFloat() - 1f,
y = dockPadding.top + (cursorLine - scrollLines) * (font.lineHeight + rowSpacing),
y = topPadding + (cursorLine - scrollLines) * (font.lineHeight + rowSpacing),
color = cursorColor
)
}
@ -1171,7 +1176,7 @@ open class TextInputPanel<out S : Screen>(
text = cursorLine.toString(),
align = TextAlign.TOP_RIGHT,
x = width,
y = dockPadding.top,
y = topPadding,
color = cursorColor
)
@ -1181,7 +1186,7 @@ open class TextInputPanel<out S : Screen>(
text = cursorRow.toString(),
align = TextAlign.TOP_RIGHT,
x = width - dockPadding.right,
y = dockPadding.top + font.lineHeight + rowSpacing,
y = topPadding + font.lineHeight + rowSpacing,
color = cursorColor
)
@ -1191,7 +1196,7 @@ open class TextInputPanel<out S : Screen>(
text = lines.size.toString(),
align = TextAlign.TOP_RIGHT,
x = width - dockPadding.right,
y = dockPadding.top + font.lineHeight * 2f + rowSpacing * 2f,
y = topPadding + font.lineHeight * 2f + rowSpacing * 2f,
color = cursorColor
)
}