mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 16:03:29 +00:00
Merge pull request #110819 from KoBeWi/overrun_with_dupes
Remove overrun code duplication
This commit is contained in:
commit
e6d25c0f73
5 changed files with 41 additions and 97 deletions
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue