@@ -37,6 +37,7 @@ void LinkButton::_shape() {
3737 int font_size = theme_cache.font_size ;
3838
3939 text_buf->clear ();
40+ text_buf->set_width (-1 );
4041 if (text_direction == Control::TEXT_DIRECTION_INHERITED) {
4142 text_buf->set_direction (is_layout_rtl () ? TextServer::DIRECTION_RTL : TextServer::DIRECTION_LTR);
4243 } else {
@@ -45,6 +46,7 @@ void LinkButton::_shape() {
4546 TS->shaped_text_set_bidi_override (text_buf->get_rid (), structured_text_parser (st_parser, st_args, xl_text));
4647 const String &lang = language.is_empty () ? _get_locale () : language;
4748 text_buf->add_string (xl_text, font, font_size, lang);
49+ text_buf->set_text_overrun_behavior (overrun_behavior);
4850
4951 queue_accessibility_update ();
5052}
@@ -64,6 +66,19 @@ String LinkButton::get_text() const {
6466 return text;
6567}
6668
69+ void LinkButton::set_text_overrun_behavior (TextServer::OverrunBehavior p_behavior) {
70+ if (overrun_behavior != p_behavior) {
71+ overrun_behavior = p_behavior;
72+ _shape ();
73+ update_minimum_size ();
74+ queue_redraw ();
75+ }
76+ }
77+
78+ TextServer::OverrunBehavior LinkButton::get_text_overrun_behavior () const {
79+ return overrun_behavior;
80+ }
81+
6782void LinkButton::set_structured_text_bidi_override (TextServer::StructuredTextParser p_parser) {
6883 if (st_parser != p_parser) {
6984 st_parser = p_parser;
@@ -148,7 +163,12 @@ void LinkButton::pressed() {
148163}
149164
150165Size2 LinkButton::get_minimum_size () const {
151- return text_buf->get_size ();
166+ Size2 minsize = text_buf->get_size ();
167+ if (overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) {
168+ minsize.width = 0 ;
169+ }
170+
171+ return minsize;
152172}
153173
154174void LinkButton::_notification (int p_what) {
@@ -178,6 +198,7 @@ void LinkButton::_notification(int p_what) {
178198 queue_redraw ();
179199 } break ;
180200
201+ case NOTIFICATION_RESIZED:
181202 case NOTIFICATION_THEME_CHANGED: {
182203 _shape ();
183204 update_minimum_size ();
@@ -228,6 +249,9 @@ void LinkButton::_notification(int p_what) {
228249 style->draw (ci, Rect2 (Point2 (), size));
229250 }
230251
252+ if (overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) {
253+ text_buf->set_width (MAX (1 .0f , size.width ));
254+ }
231255 int width = text_buf->get_line_width ();
232256
233257 Color font_outline_color = theme_cache.font_outline_color ;
@@ -262,6 +286,8 @@ void LinkButton::_notification(int p_what) {
262286void LinkButton::_bind_methods () {
263287 ClassDB::bind_method (D_METHOD (" set_text" , " text" ), &LinkButton::set_text);
264288 ClassDB::bind_method (D_METHOD (" get_text" ), &LinkButton::get_text);
289+ ClassDB::bind_method (D_METHOD (" set_text_overrun_behavior" , " overrun_behavior" ), &LinkButton::set_text_overrun_behavior);
290+ ClassDB::bind_method (D_METHOD (" get_text_overrun_behavior" ), &LinkButton::get_text_overrun_behavior);
265291 ClassDB::bind_method (D_METHOD (" set_text_direction" , " direction" ), &LinkButton::set_text_direction);
266292 ClassDB::bind_method (D_METHOD (" get_text_direction" ), &LinkButton::get_text_direction);
267293 ClassDB::bind_method (D_METHOD (" set_language" , " language" ), &LinkButton::set_language);
@@ -283,6 +309,9 @@ void LinkButton::_bind_methods() {
283309 ADD_PROPERTY (PropertyInfo (Variant::INT, " underline" , PROPERTY_HINT_ENUM, " Always,On Hover,Never" ), " set_underline_mode" , " get_underline_mode" );
284310 ADD_PROPERTY (PropertyInfo (Variant::STRING, " uri" ), " set_uri" , " get_uri" );
285311
312+ ADD_GROUP (" Text Behavior" , " " );
313+ 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" );
314+
286315 ADD_GROUP (" BiDi" , " " );
287316 ADD_PROPERTY (PropertyInfo (Variant::INT, " text_direction" , PROPERTY_HINT_ENUM, " Auto,Left-to-Right,Right-to-Left,Inherited" ), " set_text_direction" , " get_text_direction" );
288317 ADD_PROPERTY (PropertyInfo (Variant::STRING, " language" , PROPERTY_HINT_LOCALE_ID, " " ), " set_language" , " get_language" );
0 commit comments