From 71ba2aca63af1cd4e81f798202d58ff8ba1e51fc Mon Sep 17 00:00:00 2001 From: Haoyu Qiu Date: Fri, 14 Jul 2023 13:59:16 +0800 Subject: [PATCH] Fix Button clipping when internal margins exist (cherry picked from commit 71430cdd480078e7b3e5bf748b7462429af1cce1) --- scene/gui/button.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scene/gui/button.cpp b/scene/gui/button.cpp index 5804d3250d3..dc3cdf04c90 100644 --- a/scene/gui/button.cpp +++ b/scene/gui/button.cpp @@ -327,11 +327,8 @@ void Button::_notification(int p_what) { if (align_rtl_checked == HORIZONTAL_ALIGNMENT_CENTER && icon_align_rtl_checked == HORIZONTAL_ALIGNMENT_CENTER) { icon_ofs.x = 0.0; } + int text_clip = size.width - style->get_minimum_size().width - icon_ofs.width; - text_buf->set_width((clip_text || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) ? text_clip : -1); - - int text_width = MAX(1, (clip_text || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) ? MIN(text_clip, text_buf->get_size().x) : text_buf->get_size().x); - if (_internal_margin[SIDE_LEFT] > 0) { text_clip -= _internal_margin[SIDE_LEFT] + theme_cache.h_separation; } @@ -339,6 +336,10 @@ void Button::_notification(int p_what) { text_clip -= _internal_margin[SIDE_RIGHT] + theme_cache.h_separation; } + text_buf->set_width((clip_text || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) ? text_clip : -1); + + int text_width = MAX(1, (clip_text || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) ? MIN(text_clip, text_buf->get_size().x) : text_buf->get_size().x); + Point2 text_ofs = (size - style->get_minimum_size() - icon_ofs - text_buf->get_size() - Point2(_internal_margin[SIDE_RIGHT] - _internal_margin[SIDE_LEFT], 0)) / 2.0; if (vertical_icon_alignment == VERTICAL_ALIGNMENT_TOP) {