Merge pull request #110819 from KoBeWi/overrun_with_dupes

Remove overrun code duplication
This commit is contained in:
Thaddeus Crews 2025-09-23 14:51:45 -05:00
commit e6d25c0f73
No known key found for this signature in database
GPG key ID: 8C6E5FEB5FC03CCC
5 changed files with 41 additions and 97 deletions

View file

@ -256,38 +256,7 @@ void Label::_shape() const {
} }
if (para.lines_dirty) { if (para.lines_dirty) {
BitField<TextServer::TextOverrunFlag> overrun_flags = TextServer::OVERRUN_NO_TRIM; BitField<TextServer::TextOverrunFlag> overrun_flags = TextServer::get_overrun_flags_from_behavior(overrun_behavior);
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;
}
// Fill after min_size calculation. // Fill after min_size calculation.

View file

@ -123,37 +123,7 @@ void TextLine::_shape() const {
BitField<TextServer::TextOverrunFlag> overrun_flags = TextServer::OVERRUN_NO_TRIM; BitField<TextServer::TextOverrunFlag> overrun_flags = TextServer::OVERRUN_NO_TRIM;
if (overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) { if (overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) {
switch (overrun_behavior) { overrun_flags = TextServer::get_overrun_flags_from_behavior(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;
}
if (alignment == HORIZONTAL_ALIGNMENT_FILL) { if (alignment == HORIZONTAL_ALIGNMENT_FILL) {
TS->shaped_text_fit_to_width(rid, width, flags); TS->shaped_text_fit_to_width(rid, width, flags);

View file

@ -218,40 +218,7 @@ void TextParagraph::_shape_lines() const {
} }
} }
BitField<TextServer::TextOverrunFlag> overrun_flags = TextServer::OVERRUN_NO_TRIM; BitField<TextServer::TextOverrunFlag> overrun_flags = TextServer::get_overrun_flags_from_behavior(overrun_behavior);
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;
}
}
bool autowrap_enabled = brk_flags.has_flag(TextServer::BREAK_WORD_BOUND) || brk_flags.has_flag(TextServer::BREAK_GRAPHEME_BOUND); bool autowrap_enabled = brk_flags.has_flag(TextServer::BREAK_WORD_BOUND) || brk_flags.has_flag(TextServer::BREAK_GRAPHEME_BOUND);

View file

@ -2364,3 +2364,39 @@ TextServer::TextServer() {
TextServer::~TextServer() { TextServer::~TextServer() {
} }
BitField<TextServer::TextOverrunFlag> TextServer::get_overrun_flags_from_behavior(TextServer::OverrunBehavior p_behavior) {
BitField<TextOverrunFlag> 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;
}

View file

@ -246,6 +246,8 @@ protected:
#endif #endif
public: public:
static BitField<TextOverrunFlag> get_overrun_flags_from_behavior(OverrunBehavior p_behavior);
virtual bool has_feature(Feature p_feature) const = 0; virtual bool has_feature(Feature p_feature) const = 0;
virtual String get_name() const = 0; virtual String get_name() const = 0;
virtual int64_t get_features() const = 0; virtual int64_t get_features() const = 0;