From 42edbcd748f304c1c340394a5671a667b00cb9d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pa=CC=84vels=20Nadtoc=CC=8Cajevs?= <7645683+bruvzg@users.noreply.github.com> Date: Wed, 26 Mar 2025 20:49:37 +0200 Subject: [PATCH] [RTL] Fix size/alignment of tables with padded cells. --- scene/gui/rich_text_label.cpp | 10 ++++++++++ scene/gui/rich_text_label.h | 1 + 2 files changed, 11 insertions(+) diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index 19d59e53c99..d3648c9faf0 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -685,6 +685,7 @@ void RichTextLabel::_set_table_size(ItemTable *p_table, int p_available_width) { } else { p_table->total_width += p_table->columns[i].width; } + p_table->columns[i].width_with_padding = p_table->columns[i].width; } // Resize to max_width if needed and distribute the remaining space. @@ -702,6 +703,7 @@ void RichTextLabel::_set_table_size(ItemTable *p_table, int p_available_width) { p_table->columns[i].width = p_table->columns[i].max_width; p_table->total_width -= dif; total_ratio -= p_table->columns[i].expand_ratio; + p_table->columns[i].width_with_padding = p_table->columns[i].width; } } // Grow. @@ -715,6 +717,7 @@ void RichTextLabel::_set_table_size(ItemTable *p_table, int p_available_width) { int incr = MIN(dif, slice); p_table->columns[i].width += incr; p_table->total_width += incr; + p_table->columns[i].width_with_padding = p_table->columns[i].width; } } } @@ -745,6 +748,7 @@ void RichTextLabel::_set_table_size(ItemTable *p_table, int p_available_width) { frame->lines[i].text_buf->set_width(p_table->columns[column].width); p_table->columns[column].width = MAX(p_table->columns[column].width, ceil(frame->lines[i].text_buf->get_size().x)); + p_table->columns[column].width_with_padding = MAX(p_table->columns[column].width_with_padding, ceil(frame->lines[i].text_buf->get_size().x + frame->padding.position.x + frame->padding.size.x)); frame->lines[i].offset.y = prev_h; @@ -780,6 +784,12 @@ void RichTextLabel::_set_table_size(ItemTable *p_table, int p_available_width) { } idx++; } + + // Recalculate total width. + p_table->total_width = 0; + for (int i = 0; i < col_count; i++) { + p_table->total_width += p_table->columns[i].width_with_padding + theme_cache.table_h_separation; + } } int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_ofs, int p_width, float p_vsep, const Color &p_base_color, int p_outline_size, const Color &p_outline_color, const Color &p_font_shadow_color, int p_shadow_outline_size, const Point2 &p_shadow_ofs, int &r_processed_glyphs) { diff --git a/scene/gui/rich_text_label.h b/scene/gui/rich_text_label.h index 013ee15c03f..dd1cedcd8bb 100644 --- a/scene/gui/rich_text_label.h +++ b/scene/gui/rich_text_label.h @@ -347,6 +347,7 @@ private: int min_width = 0; int max_width = 0; int width = 0; + int width_with_padding = 0; }; LocalVector columns;