From 93ccf8e9e4b76e64fd5a09e31f0455cdf9bd2ff1 Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Mon, 22 Jul 2024 07:48:09 +0300 Subject: [PATCH] [RTL] Fix text size rounding with MSDF fonts. --- doc/classes/TextParagraph.xml | 2 +- scene/gui/rich_text_label.cpp | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/classes/TextParagraph.xml b/doc/classes/TextParagraph.xml index 541078ed223..c6511a2b8e9 100644 --- a/doc/classes/TextParagraph.xml +++ b/doc/classes/TextParagraph.xml @@ -175,7 +175,7 @@ - Returns size of the bounding box of the line of text. + Returns size of the bounding box of the line of text. Returned size is rounded up. diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index 5ef02bf19d7..1da3668ebed 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -828,14 +828,14 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o break; } - const Size2 line_size = l.text_buf->get_line_size(line); - if (p_ofs.y + off.y + line_size.y <= 0) { - off.y += line_size.y; + double l_height = l.text_buf->get_line_ascent(line) + l.text_buf->get_line_descent(line); + if (p_ofs.y + off.y + l_height <= 0) { + off.y += l_height; continue; } float width = l.text_buf->get_width(); - float length = line_size.x; + float length = l.text_buf->get_line_size(line).x; // Draw line. line_count++; @@ -5139,7 +5139,7 @@ void RichTextLabel::scroll_to_selection() { if (range.x <= selection.from_char && range.y >= selection.from_char) { break; } - line_offset += selection.from_frame->lines[selection.from_line].text_buf->get_line_size(i).y + theme_cache.line_separation; + line_offset += selection.from_frame->lines[selection.from_line].text_buf->get_line_ascent(i) + selection.from_frame->lines[selection.from_line].text_buf->get_line_descent(i) + theme_cache.line_separation; } // Add nested frame (e.g. table cell) offset. @@ -5191,7 +5191,7 @@ void RichTextLabel::scroll_to_line(int p_line) { if ((line_count <= p_line) && (line_count + main->lines[i].text_buf->get_line_count() >= p_line)) { float line_offset = 0.f; for (int j = 0; j < p_line - line_count; j++) { - line_offset += main->lines[i].text_buf->get_line_size(j).y + theme_cache.line_separation; + line_offset += main->lines[i].text_buf->get_line_ascent(j) + main->lines[i].text_buf->get_line_descent(j) + theme_cache.line_separation; } vscroll->set_value(main->lines[i].offset.y + line_offset); return; @@ -5211,7 +5211,7 @@ float RichTextLabel::get_line_offset(int p_line) { if ((line_count <= p_line) && (p_line <= line_count + main->lines[i].text_buf->get_line_count())) { float line_offset = 0.f; for (int j = 0; j < p_line - line_count; j++) { - line_offset += main->lines[i].text_buf->get_line_size(j).y + theme_cache.line_separation; + line_offset += main->lines[i].text_buf->get_line_ascent(j) + main->lines[i].text_buf->get_line_descent(j) + theme_cache.line_separation; } return main->lines[i].offset.y + line_offset; }