Add overrun behavior to the Button.
This commit is contained in:
parent
e414e091be
commit
906e9b6ac5
|
@ -92,6 +92,9 @@
|
|||
<member name="text_direction" type="int" setter="set_text_direction" getter="get_text_direction" enum="Control.TextDirection" default="0">
|
||||
Base text writing direction.
|
||||
</member>
|
||||
<member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextParagraph.OverrunBehavior" default="0">
|
||||
Sets the clipping behavior when the text exceeds the node's bounding rectangle. See [enum TextParagraph.OverrunBehavior] for a description of all modes.
|
||||
</member>
|
||||
</members>
|
||||
<theme_items>
|
||||
<theme_item name="font_color" data_type="color" type="Color" default="Color(0.875, 0.875, 0.875, 1)">
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
|
||||
Size2 Button::get_minimum_size() const {
|
||||
Size2 minsize = text_buf->get_size();
|
||||
if (clip_text) {
|
||||
if (clip_text || overrun_behavior != TextParagraph::OVERRUN_NO_TRIMMING) {
|
||||
minsize.width = 0;
|
||||
}
|
||||
|
||||
|
@ -292,9 +292,9 @@ void Button::_notification(int p_what) {
|
|||
icon_ofs.x = 0.0;
|
||||
}
|
||||
int text_clip = size.width - style->get_minimum_size().width - icon_ofs.width;
|
||||
text_buf->set_width(clip_text ? text_clip : -1);
|
||||
text_buf->set_width((clip_text || overrun_behavior != TextParagraph::OVERRUN_NO_TRIMMING) ? text_clip : -1);
|
||||
|
||||
int text_width = MAX(1, clip_text ? MIN(text_clip, text_buf->get_size().x) : text_buf->get_size().x);
|
||||
int text_width = MAX(1, (clip_text || overrun_behavior != TextParagraph::OVERRUN_NO_TRIMMING) ? MIN(text_clip, text_buf->get_size().x) : text_buf->get_size().x);
|
||||
|
||||
if (_internal_margin[SIDE_LEFT] > 0) {
|
||||
text_clip -= _internal_margin[SIDE_LEFT] + get_theme_constant(SNAME("h_separation"));
|
||||
|
@ -364,6 +364,21 @@ void Button::_shape() {
|
|||
text_buf->set_direction((TextServer::Direction)text_direction);
|
||||
}
|
||||
text_buf->add_string(xl_text, font, font_size, opentype_features, (!language.is_empty()) ? language : TranslationServer::get_singleton()->get_tool_locale());
|
||||
text_buf->set_text_overrun_behavior(overrun_behavior);
|
||||
}
|
||||
|
||||
void Button::set_text_overrun_behavior(TextParagraph::OverrunBehavior p_behavior) {
|
||||
if (overrun_behavior != p_behavior) {
|
||||
overrun_behavior = p_behavior;
|
||||
_shape();
|
||||
|
||||
update();
|
||||
update_minimum_size();
|
||||
}
|
||||
}
|
||||
|
||||
TextParagraph::OverrunBehavior Button::get_text_overrun_behavior() const {
|
||||
return overrun_behavior;
|
||||
}
|
||||
|
||||
void Button::set_text(const String &p_text) {
|
||||
|
@ -550,6 +565,8 @@ void Button::_get_property_list(List<PropertyInfo> *p_list) const {
|
|||
void Button::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_text", "text"), &Button::set_text);
|
||||
ClassDB::bind_method(D_METHOD("get_text"), &Button::get_text);
|
||||
ClassDB::bind_method(D_METHOD("set_text_overrun_behavior", "overrun_behavior"), &Button::set_text_overrun_behavior);
|
||||
ClassDB::bind_method(D_METHOD("get_text_overrun_behavior"), &Button::get_text_overrun_behavior);
|
||||
ClassDB::bind_method(D_METHOD("set_text_direction", "direction"), &Button::set_text_direction);
|
||||
ClassDB::bind_method(D_METHOD("get_text_direction"), &Button::get_text_direction);
|
||||
ClassDB::bind_method(D_METHOD("set_opentype_feature", "tag", "value"), &Button::set_opentype_feature);
|
||||
|
@ -577,6 +594,7 @@ void Button::_bind_methods() {
|
|||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "flat"), "set_flat", "is_flat");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "clip_text"), "set_clip_text", "get_clip_text");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "alignment", PROPERTY_HINT_ENUM, "Left,Center,Right"), "set_text_alignment", "get_text_alignment");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "text_overrun_behavior", PROPERTY_HINT_ENUM, "Trim Nothing,Trim Characters,Trim Words,Ellipsis,Word Ellipsis"), "set_text_overrun_behavior", "get_text_overrun_behavior");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "icon_alignment", PROPERTY_HINT_ENUM, "Left,Center,Right"), "set_icon_alignment", "get_icon_alignment");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "expand_icon"), "set_expand_icon", "is_expand_icon");
|
||||
}
|
||||
|
|
|
@ -46,6 +46,7 @@ private:
|
|||
Dictionary opentype_features;
|
||||
String language;
|
||||
TextDirection text_direction = TEXT_DIRECTION_AUTO;
|
||||
TextParagraph::OverrunBehavior overrun_behavior = TextParagraph::OVERRUN_NO_TRIMMING;
|
||||
|
||||
Ref<Texture2D> icon;
|
||||
bool expand_icon = false;
|
||||
|
@ -71,6 +72,9 @@ public:
|
|||
void set_text(const String &p_text);
|
||||
String get_text() const;
|
||||
|
||||
void set_text_overrun_behavior(TextParagraph::OverrunBehavior p_behavior);
|
||||
TextParagraph::OverrunBehavior get_text_overrun_behavior() const;
|
||||
|
||||
void set_text_direction(TextDirection p_text_direction);
|
||||
TextDirection get_text_direction() const;
|
||||
|
||||
|
|
Loading…
Reference in New Issue