From efa647bb177b1eab4cf98c2476584a9fc49a55bf Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Thu, 30 Mar 2023 22:23:39 +0300 Subject: [PATCH] [RTL] Fix fill align and trim with enabled dropcap. --- scene/resources/text_paragraph.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/scene/resources/text_paragraph.cpp b/scene/resources/text_paragraph.cpp index 729063245cf..191b71f3011 100644 --- a/scene/resources/text_paragraph.cpp +++ b/scene/resources/text_paragraph.cpp @@ -233,27 +233,27 @@ void TextParagraph::_shape_lines() { } if (alignment == HORIZONTAL_ALIGNMENT_FILL) { for (int i = 0; i < (int)lines_rid.size(); i++) { + float line_w = (i <= dropcap_lines) ? (width - h_offset) : width; if (i < visible_lines - 1 || (int)lines_rid.size() == 1) { - TS->shaped_text_fit_to_width(lines_rid[i], width, jst_flags); + TS->shaped_text_fit_to_width(lines_rid[i], line_w, jst_flags); } else if (i == (visible_lines - 1)) { - TS->shaped_text_overrun_trim_to_width(lines_rid[visible_lines - 1], width, overrun_flags); + TS->shaped_text_overrun_trim_to_width(lines_rid[visible_lines - 1], line_w, overrun_flags); } } - } else if (lines_hidden) { - TS->shaped_text_overrun_trim_to_width(lines_rid[visible_lines - 1], width, overrun_flags); + TS->shaped_text_overrun_trim_to_width(lines_rid[visible_lines - 1], (visible_lines - 1 <= dropcap_lines) ? (width - h_offset) : width, overrun_flags); } - } else { // Autowrap disabled. - for (const RID &line_rid : lines_rid) { + for (int i = 0; i < (int)lines_rid.size(); i++) { + float line_w = (i <= dropcap_lines) ? (width - h_offset) : width; if (alignment == HORIZONTAL_ALIGNMENT_FILL) { - TS->shaped_text_fit_to_width(line_rid, width, jst_flags); + TS->shaped_text_fit_to_width(lines_rid[i], line_w, jst_flags); overrun_flags.set_flag(TextServer::OVERRUN_JUSTIFICATION_AWARE); - TS->shaped_text_overrun_trim_to_width(line_rid, width, overrun_flags); - TS->shaped_text_fit_to_width(line_rid, width, jst_flags | TextServer::JUSTIFICATION_CONSTRAIN_ELLIPSIS); + TS->shaped_text_overrun_trim_to_width(lines_rid[i], line_w, overrun_flags); + TS->shaped_text_fit_to_width(lines_rid[i], line_w, jst_flags | TextServer::JUSTIFICATION_CONSTRAIN_ELLIPSIS); } else { - TS->shaped_text_overrun_trim_to_width(line_rid, width, overrun_flags); + TS->shaped_text_overrun_trim_to_width(lines_rid[i], line_w, overrun_flags); } } }