mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 07:53:26 +00:00
Remove overrun code duplication
This commit is contained in:
parent
3d91a48298
commit
a57fef9558
5 changed files with 41 additions and 97 deletions
|
@ -256,38 +256,7 @@ void Label::_shape() const {
|
|||
}
|
||||
|
||||
if (para.lines_dirty) {
|
||||
BitField<TextServer::TextOverrunFlag> 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<TextServer::TextOverrunFlag> overrun_flags = TextServer::get_overrun_flags_from_behavior(overrun_behavior);
|
||||
|
||||
// Fill after min_size calculation.
|
||||
|
||||
|
|
|
@ -123,37 +123,7 @@ void TextLine::_shape() const {
|
|||
|
||||
BitField<TextServer::TextOverrunFlag> 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);
|
||||
|
|
|
@ -218,40 +218,7 @@ void TextParagraph::_shape_lines() const {
|
|||
}
|
||||
}
|
||||
|
||||
BitField<TextServer::TextOverrunFlag> 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<TextServer::TextOverrunFlag> 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);
|
||||
|
||||
|
|
|
@ -2364,3 +2364,39 @@ 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
|
||||
|
||||
public:
|
||||
static BitField<TextOverrunFlag> 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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue