Skip to content

Commit c2c7bf6

Browse files
committed
Merge pull request #112220 from YeldhamDev/that_text_behavior_category_seemed_so_lonely
Make possible to change the ellipsis character in `LinkButton`
2 parents ae97321 + 1a1967f commit c2c7bf6

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

doc/classes/LinkButton.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
<tutorials>
1111
</tutorials>
1212
<members>
13+
<member name="ellipsis_char" type="String" setter="set_ellipsis_char" getter="get_ellipsis_char" default="&quot;&quot;">
14+
Ellipsis character used for text clipping.
15+
</member>
1316
<member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" overrides="Control" enum="Control.FocusMode" default="3" />
1417
<member name="language" type="String" setter="set_language" getter="get_language" default="&quot;&quot;">
1518
Language code used for line-breaking and text shaping algorithms, if left empty current locale is used instead.

scene/gui/link_button.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ void LinkButton::_shape() {
4747
const String &lang = language.is_empty() ? _get_locale() : language;
4848
text_buf->add_string(xl_text, font, font_size, lang);
4949
text_buf->set_text_overrun_behavior(overrun_behavior);
50+
text_buf->set_ellipsis_char(el_char);
5051

5152
queue_accessibility_update();
5253
}
@@ -87,6 +88,29 @@ void LinkButton::set_structured_text_bidi_override(TextServer::StructuredTextPar
8788
}
8889
}
8990

91+
void LinkButton::set_ellipsis_char(const String &p_char) {
92+
String c = p_char;
93+
if (c.length() > 1) {
94+
WARN_PRINT("Ellipsis must be exactly one character long (" + itos(c.length()) + " characters given).");
95+
c = c.left(1);
96+
}
97+
98+
if (el_char == c) {
99+
return;
100+
}
101+
el_char = c;
102+
103+
if (overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) {
104+
_shape();
105+
queue_redraw();
106+
update_minimum_size();
107+
}
108+
}
109+
110+
String LinkButton::get_ellipsis_char() const {
111+
return el_char;
112+
}
113+
90114
TextServer::StructuredTextParser LinkButton::get_structured_text_bidi_override() const {
91115
return st_parser;
92116
}
@@ -292,6 +316,8 @@ void LinkButton::_bind_methods() {
292316
ClassDB::bind_method(D_METHOD("get_text"), &LinkButton::get_text);
293317
ClassDB::bind_method(D_METHOD("set_text_overrun_behavior", "overrun_behavior"), &LinkButton::set_text_overrun_behavior);
294318
ClassDB::bind_method(D_METHOD("get_text_overrun_behavior"), &LinkButton::get_text_overrun_behavior);
319+
ClassDB::bind_method(D_METHOD("set_ellipsis_char", "char"), &LinkButton::set_ellipsis_char);
320+
ClassDB::bind_method(D_METHOD("get_ellipsis_char"), &LinkButton::get_ellipsis_char);
295321
ClassDB::bind_method(D_METHOD("set_text_direction", "direction"), &LinkButton::set_text_direction);
296322
ClassDB::bind_method(D_METHOD("get_text_direction"), &LinkButton::get_text_direction);
297323
ClassDB::bind_method(D_METHOD("set_language", "language"), &LinkButton::set_language);
@@ -315,6 +341,7 @@ void LinkButton::_bind_methods() {
315341

316342
ADD_GROUP("Text Behavior", "");
317343
ADD_PROPERTY(PropertyInfo(Variant::INT, "text_overrun_behavior", PROPERTY_HINT_ENUM, "Trim Nothing,Trim Characters,Trim Words,Ellipsis (6+ Characters),Word Ellipsis (6+ Characters),Ellipsis (Always),Word Ellipsis (Always)"), "set_text_overrun_behavior", "get_text_overrun_behavior");
344+
ADD_PROPERTY(PropertyInfo(Variant::STRING, "ellipsis_char"), "set_ellipsis_char", "get_ellipsis_char");
318345

319346
ADD_GROUP("BiDi", "");
320347
ADD_PROPERTY(PropertyInfo(Variant::INT, "text_direction", PROPERTY_HINT_ENUM, "Auto,Left-to-Right,Right-to-Left,Inherited"), "set_text_direction", "get_text_direction");

scene/gui/link_button.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class LinkButton : public BaseButton {
5555
TextServer::StructuredTextParser st_parser = TextServer::STRUCTURED_TEXT_DEFAULT;
5656
Array st_args;
5757
TextServer::OverrunBehavior overrun_behavior = TextServer::OVERRUN_NO_TRIMMING;
58+
String el_char = U"";
5859

5960
struct ThemeCache {
6061
Ref<StyleBox> focus;
@@ -92,6 +93,9 @@ class LinkButton : public BaseButton {
9293
void set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior);
9394
TextServer::OverrunBehavior get_text_overrun_behavior() const;
9495

96+
void set_ellipsis_char(const String &p_char);
97+
String get_ellipsis_char() const;
98+
9599
void set_structured_text_bidi_override(TextServer::StructuredTextParser p_parser);
96100
TextServer::StructuredTextParser get_structured_text_bidi_override() const;
97101

0 commit comments

Comments
 (0)