diff --git a/scene/gui/label.cpp b/scene/gui/label.cpp index 972247e4c4c..9e33ff2963f 100644 --- a/scene/gui/label.cpp +++ b/scene/gui/label.cpp @@ -256,38 +256,7 @@ void Label::_shape() const { } if (para.lines_dirty) { - BitField overrun_flags = TextServer::OVERRUN_NO_TRIM; - switch (overrun_behavior) { - case TextServer::OVERRUN_TRIM_WORD_ELLIPSIS_FORCE: { - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - overrun_flags.set_flag(TextServer::OVERRUN_TRIM_WORD_ONLY); - overrun_flags.set_flag(TextServer::OVERRUN_ADD_ELLIPSIS); - overrun_flags.set_flag(TextServer::OVERRUN_ENFORCE_ELLIPSIS); - } break; - case TextServer::OVERRUN_TRIM_ELLIPSIS_FORCE: { - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - overrun_flags.set_flag(TextServer::OVERRUN_ADD_ELLIPSIS); - overrun_flags.set_flag(TextServer::OVERRUN_ENFORCE_ELLIPSIS); - } break; - case TextServer::OVERRUN_TRIM_WORD_ELLIPSIS: - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - overrun_flags.set_flag(TextServer::OVERRUN_TRIM_WORD_ONLY); - overrun_flags.set_flag(TextServer::OVERRUN_ADD_ELLIPSIS); - break; - case TextServer::OVERRUN_TRIM_ELLIPSIS: - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - overrun_flags.set_flag(TextServer::OVERRUN_ADD_ELLIPSIS); - break; - case TextServer::OVERRUN_TRIM_WORD: - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - overrun_flags.set_flag(TextServer::OVERRUN_TRIM_WORD_ONLY); - break; - case TextServer::OVERRUN_TRIM_CHAR: - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - break; - case TextServer::OVERRUN_NO_TRIMMING: - break; - } + BitField overrun_flags = TextServer::get_overrun_flags_from_behavior(overrun_behavior); // Fill after min_size calculation. diff --git a/scene/resources/text_line.cpp b/scene/resources/text_line.cpp index 4c6d40e8867..6f39e093f1a 100644 --- a/scene/resources/text_line.cpp +++ b/scene/resources/text_line.cpp @@ -123,37 +123,7 @@ void TextLine::_shape() const { BitField overrun_flags = TextServer::OVERRUN_NO_TRIM; if (overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) { - switch (overrun_behavior) { - case TextServer::OVERRUN_TRIM_WORD_ELLIPSIS_FORCE: { - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - overrun_flags.set_flag(TextServer::OVERRUN_TRIM_WORD_ONLY); - overrun_flags.set_flag(TextServer::OVERRUN_ADD_ELLIPSIS); - overrun_flags.set_flag(TextServer::OVERRUN_ENFORCE_ELLIPSIS); - } break; - case TextServer::OVERRUN_TRIM_ELLIPSIS_FORCE: { - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - overrun_flags.set_flag(TextServer::OVERRUN_ADD_ELLIPSIS); - overrun_flags.set_flag(TextServer::OVERRUN_ENFORCE_ELLIPSIS); - } break; - case TextServer::OVERRUN_TRIM_WORD_ELLIPSIS: - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - overrun_flags.set_flag(TextServer::OVERRUN_TRIM_WORD_ONLY); - overrun_flags.set_flag(TextServer::OVERRUN_ADD_ELLIPSIS); - break; - case TextServer::OVERRUN_TRIM_ELLIPSIS: - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - overrun_flags.set_flag(TextServer::OVERRUN_ADD_ELLIPSIS); - break; - case TextServer::OVERRUN_TRIM_WORD: - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - overrun_flags.set_flag(TextServer::OVERRUN_TRIM_WORD_ONLY); - break; - case TextServer::OVERRUN_TRIM_CHAR: - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - break; - case TextServer::OVERRUN_NO_TRIMMING: - break; - } + overrun_flags = TextServer::get_overrun_flags_from_behavior(overrun_behavior); if (alignment == HORIZONTAL_ALIGNMENT_FILL) { TS->shaped_text_fit_to_width(rid, width, flags); diff --git a/scene/resources/text_paragraph.cpp b/scene/resources/text_paragraph.cpp index 7516c0813cf..dd0c1dc90b8 100644 --- a/scene/resources/text_paragraph.cpp +++ b/scene/resources/text_paragraph.cpp @@ -218,40 +218,7 @@ void TextParagraph::_shape_lines() const { } } - BitField overrun_flags = TextServer::OVERRUN_NO_TRIM; - if (overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) { - switch (overrun_behavior) { - case TextServer::OVERRUN_TRIM_WORD_ELLIPSIS_FORCE: { - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - overrun_flags.set_flag(TextServer::OVERRUN_TRIM_WORD_ONLY); - overrun_flags.set_flag(TextServer::OVERRUN_ADD_ELLIPSIS); - overrun_flags.set_flag(TextServer::OVERRUN_ENFORCE_ELLIPSIS); - } break; - case TextServer::OVERRUN_TRIM_ELLIPSIS_FORCE: { - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - overrun_flags.set_flag(TextServer::OVERRUN_ADD_ELLIPSIS); - overrun_flags.set_flag(TextServer::OVERRUN_ENFORCE_ELLIPSIS); - } break; - case TextServer::OVERRUN_TRIM_WORD_ELLIPSIS: - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - overrun_flags.set_flag(TextServer::OVERRUN_TRIM_WORD_ONLY); - overrun_flags.set_flag(TextServer::OVERRUN_ADD_ELLIPSIS); - break; - case TextServer::OVERRUN_TRIM_ELLIPSIS: - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - overrun_flags.set_flag(TextServer::OVERRUN_ADD_ELLIPSIS); - break; - case TextServer::OVERRUN_TRIM_WORD: - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - overrun_flags.set_flag(TextServer::OVERRUN_TRIM_WORD_ONLY); - break; - case TextServer::OVERRUN_TRIM_CHAR: - overrun_flags.set_flag(TextServer::OVERRUN_TRIM); - break; - case TextServer::OVERRUN_NO_TRIMMING: - break; - } - } + BitField overrun_flags = TextServer::get_overrun_flags_from_behavior(overrun_behavior); bool autowrap_enabled = brk_flags.has_flag(TextServer::BREAK_WORD_BOUND) || brk_flags.has_flag(TextServer::BREAK_GRAPHEME_BOUND); diff --git a/servers/text_server.cpp b/servers/text_server.cpp index e7b819737a4..cb0b08c0b53 100644 --- a/servers/text_server.cpp +++ b/servers/text_server.cpp @@ -2364,3 +2364,39 @@ TextServer::TextServer() { TextServer::~TextServer() { } + +BitField TextServer::get_overrun_flags_from_behavior(TextServer::OverrunBehavior p_behavior) { + BitField overrun_flags = OVERRUN_NO_TRIM; + switch (p_behavior) { + case OVERRUN_TRIM_WORD_ELLIPSIS_FORCE: { + overrun_flags.set_flag(OVERRUN_TRIM); + overrun_flags.set_flag(OVERRUN_TRIM_WORD_ONLY); + overrun_flags.set_flag(OVERRUN_ADD_ELLIPSIS); + overrun_flags.set_flag(OVERRUN_ENFORCE_ELLIPSIS); + } break; + case OVERRUN_TRIM_ELLIPSIS_FORCE: { + overrun_flags.set_flag(OVERRUN_TRIM); + overrun_flags.set_flag(OVERRUN_ADD_ELLIPSIS); + overrun_flags.set_flag(OVERRUN_ENFORCE_ELLIPSIS); + } break; + case OVERRUN_TRIM_WORD_ELLIPSIS: + overrun_flags.set_flag(OVERRUN_TRIM); + overrun_flags.set_flag(OVERRUN_TRIM_WORD_ONLY); + overrun_flags.set_flag(OVERRUN_ADD_ELLIPSIS); + break; + case OVERRUN_TRIM_ELLIPSIS: + overrun_flags.set_flag(OVERRUN_TRIM); + overrun_flags.set_flag(OVERRUN_ADD_ELLIPSIS); + break; + case OVERRUN_TRIM_WORD: + overrun_flags.set_flag(OVERRUN_TRIM); + overrun_flags.set_flag(OVERRUN_TRIM_WORD_ONLY); + break; + case OVERRUN_TRIM_CHAR: + overrun_flags.set_flag(OVERRUN_TRIM); + break; + case OVERRUN_NO_TRIMMING: + break; + } + return overrun_flags; +} diff --git a/servers/text_server.h b/servers/text_server.h index 50d26839092..3e4d2a6525e 100644 --- a/servers/text_server.h +++ b/servers/text_server.h @@ -246,6 +246,8 @@ protected: #endif public: + static BitField get_overrun_flags_from_behavior(OverrunBehavior p_behavior); + virtual bool has_feature(Feature p_feature) const = 0; virtual String get_name() const = 0; virtual int64_t get_features() const = 0;