fix multiline textbox wrappping

This commit is contained in:
MihailRis 2026-04-29 21:53:54 +03:00
parent 2db80051fd
commit 99c66c61bb
2 changed files with 14 additions and 9 deletions

View file

@ -48,17 +48,18 @@ void LabelCache::update(std::wstring_view text, bool multiline, bool wrap) {
}
if (multiline) {
size_t len = 0;
for (size_t i = 0; i < text.length(); i++, len++) {
size_t lineStart = 0;
for (size_t i = 0; i < text.length(); i++) {
if (text[i] == L'\n') {
lines.push_back(LineScheme {i+1, false});
len = 0;
} else if (i > 0 && i+1 < text.length() && wrap && text[i+1] != L'\n') {
size_t width = metrics.calcWidth(text, i-len-1, i-(i-len)+2);
lines.push_back(LineScheme {i + 1, false});
lineStart = i + 1;
} else if (i + 1 < text.length() && wrap && text[i + 1] != L'\n') {
size_t width =
metrics.calcWidth(text, lineStart, i - lineStart + 2);
if (width >= wrapWidth) {
// starting a fake line
lines.push_back(LineScheme {i+1, true});
len = 0;
lines.push_back(LineScheme {i + 1, true});
lineStart = i + 1;
}
}
}

View file

@ -646,7 +646,11 @@ void TextBox::reposition() {
void TextBox::refresh() {
Container::refresh();
label->setSize(
size - glm::vec2(padding.z + padding.x, padding.w + padding.y)
size - glm::vec2(
padding.z + padding.x +
LINE_NUMBERS_PANE_WIDTH * showLineNumbers + textOffset,
padding.w + padding.y
)
);
label->setPos(glm::vec2(
padding.x + LINE_NUMBERS_PANE_WIDTH * showLineNumbers + textInitX -