From 3e333df62356050d026d72a6063fad542ed50322 Mon Sep 17 00:00:00 2001 From: voylin <0voylin0@gmail.com> Date: Tue, 7 Jan 2025 11:33:43 +0900 Subject: [PATCH] fix get_visible_lint_count in RichTextLabel --- scene/gui/rich_text_label.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index ad850b574c3..8f0add25eac 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -820,6 +820,7 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o } int line_count = 0; + bool has_visible_chars = false; // Bottom margin for text clipping. float v_limit = theme_cache.normal_style->get_margin(SIDE_BOTTOM); Size2 ctrl_size = get_size(); @@ -843,8 +844,6 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o float length = l.text_buf->get_line_size(line).x; // Draw line. - line_count++; - if (rtl) { off.x = p_width - l.offset.x - width; if (!lrtl && p_frame == main) { // Skip Scrollbar. @@ -1290,6 +1289,7 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o bool skip = (trim_chars && l.char_offset + glyphs[i].end > visible_characters) || (trim_glyphs_ltr && (processed_glyphs_step >= visible_glyphs)) || (trim_glyphs_rtl && (processed_glyphs_step < total_glyphs - visible_glyphs)); if (!skip) { if (txt_visible) { + has_visible_chars = true; if (step == DRAW_STEP_TEXT) { if (frid != RID()) { TS->font_draw_glyph(frid, ci, glyphs[i].font_size, fx_offset + char_off, gl, font_color); @@ -1410,6 +1410,10 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o r_processed_glyphs = processed_glyphs_step; off.y += TS->shaped_text_get_descent(rid); + if (has_visible_chars) { + line_count++; + has_visible_chars = false; + } } return line_count;