|
@@ -421,9 +421,24 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font>
|
|
|
|
|
|
Line &l = p_frame->lines.write[p_line];
|
|
Line &l = p_frame->lines.write[p_line];
|
|
|
|
|
|
|
|
+ uint16_t autowrap_flags = TextServer::BREAK_MANDATORY;
|
|
|
|
+ switch (autowrap_mode) {
|
|
|
|
+ case AUTOWRAP_WORD_SMART:
|
|
|
|
+ autowrap_flags = TextServer::BREAK_WORD_BOUND_ADAPTIVE | TextServer::BREAK_MANDATORY;
|
|
|
|
+ break;
|
|
|
|
+ case AUTOWRAP_WORD:
|
|
|
|
+ autowrap_flags = TextServer::BREAK_WORD_BOUND | TextServer::BREAK_MANDATORY;
|
|
|
|
+ break;
|
|
|
|
+ case AUTOWRAP_ARBITRARY:
|
|
|
|
+ autowrap_flags = TextServer::BREAK_GRAPHEME_BOUND | TextServer::BREAK_MANDATORY;
|
|
|
|
+ break;
|
|
|
|
+ case AUTOWRAP_OFF:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
// Clear cache.
|
|
// Clear cache.
|
|
l.text_buf->clear();
|
|
l.text_buf->clear();
|
|
- l.text_buf->set_flags(TextServer::BREAK_MANDATORY | TextServer::BREAK_WORD_BOUND | TextServer::JUSTIFICATION_KASHIDA | TextServer::JUSTIFICATION_WORD_BOUND | TextServer::JUSTIFICATION_TRIM_EDGE_SPACES);
|
|
|
|
|
|
+ l.text_buf->set_flags(autowrap_flags | TextServer::JUSTIFICATION_KASHIDA | TextServer::JUSTIFICATION_WORD_BOUND | TextServer::JUSTIFICATION_TRIM_EDGE_SPACES);
|
|
l.char_offset = *r_char_offset;
|
|
l.char_offset = *r_char_offset;
|
|
l.char_count = 0;
|
|
l.char_count = 0;
|
|
|
|
|
|
@@ -4077,6 +4092,19 @@ String RichTextLabel::get_language() const {
|
|
return language;
|
|
return language;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void RichTextLabel::set_autowrap_mode(RichTextLabel::AutowrapMode p_mode) {
|
|
|
|
+ if (autowrap_mode != p_mode) {
|
|
|
|
+ autowrap_mode = p_mode;
|
|
|
|
+ main->first_invalid_line = 0; //invalidate ALL
|
|
|
|
+ _validate_line_caches(main);
|
|
|
|
+ update();
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+RichTextLabel::AutowrapMode RichTextLabel::get_autowrap_mode() const {
|
|
|
|
+ return autowrap_mode;
|
|
|
|
+}
|
|
|
|
+
|
|
void RichTextLabel::set_percent_visible(float p_percent) {
|
|
void RichTextLabel::set_percent_visible(float p_percent) {
|
|
if (percent_visible != p_percent) {
|
|
if (percent_visible != p_percent) {
|
|
if (p_percent < 0 || p_percent >= 1) {
|
|
if (p_percent < 0 || p_percent >= 1) {
|
|
@@ -4188,6 +4216,9 @@ void RichTextLabel::_bind_methods() {
|
|
ClassDB::bind_method(D_METHOD("set_language", "language"), &RichTextLabel::set_language);
|
|
ClassDB::bind_method(D_METHOD("set_language", "language"), &RichTextLabel::set_language);
|
|
ClassDB::bind_method(D_METHOD("get_language"), &RichTextLabel::get_language);
|
|
ClassDB::bind_method(D_METHOD("get_language"), &RichTextLabel::get_language);
|
|
|
|
|
|
|
|
+ ClassDB::bind_method(D_METHOD("set_autowrap_mode", "autowrap_mode"), &RichTextLabel::set_autowrap_mode);
|
|
|
|
+ ClassDB::bind_method(D_METHOD("get_autowrap_mode"), &RichTextLabel::get_autowrap_mode);
|
|
|
|
+
|
|
ClassDB::bind_method(D_METHOD("set_meta_underline", "enable"), &RichTextLabel::set_meta_underline);
|
|
ClassDB::bind_method(D_METHOD("set_meta_underline", "enable"), &RichTextLabel::set_meta_underline);
|
|
ClassDB::bind_method(D_METHOD("is_meta_underlined"), &RichTextLabel::is_meta_underlined);
|
|
ClassDB::bind_method(D_METHOD("is_meta_underlined"), &RichTextLabel::is_meta_underlined);
|
|
|
|
|
|
@@ -4280,6 +4311,8 @@ void RichTextLabel::_bind_methods() {
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "text_direction", PROPERTY_HINT_ENUM, "Auto,Left-to-Right,Right-to-Left,Inherited"), "set_text_direction", "get_text_direction");
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "text_direction", PROPERTY_HINT_ENUM, "Auto,Left-to-Right,Right-to-Left,Inherited"), "set_text_direction", "get_text_direction");
|
|
ADD_PROPERTY(PropertyInfo(Variant::STRING, "language", PROPERTY_HINT_LOCALE_ID, ""), "set_language", "get_language");
|
|
ADD_PROPERTY(PropertyInfo(Variant::STRING, "language", PROPERTY_HINT_LOCALE_ID, ""), "set_language", "get_language");
|
|
|
|
|
|
|
|
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "autowrap_mode", PROPERTY_HINT_ENUM, "Off,Arbitrary,Word,Word (Smart)"), "set_autowrap_mode", "get_autowrap_mode");
|
|
|
|
+
|
|
ADD_GROUP("Structured Text", "structured_text_");
|
|
ADD_GROUP("Structured Text", "structured_text_");
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "structured_text_bidi_override", PROPERTY_HINT_ENUM, "Default,URI,File,Email,List,None,Custom"), "set_structured_text_bidi_override", "get_structured_text_bidi_override");
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "structured_text_bidi_override", PROPERTY_HINT_ENUM, "Default,URI,File,Email,List,None,Custom"), "set_structured_text_bidi_override", "get_structured_text_bidi_override");
|
|
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "structured_text_bidi_override_options"), "set_structured_text_bidi_override_options", "get_structured_text_bidi_override_options");
|
|
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "structured_text_bidi_override_options"), "set_structured_text_bidi_override_options", "get_structured_text_bidi_override_options");
|
|
@@ -4288,6 +4321,11 @@ void RichTextLabel::_bind_methods() {
|
|
ADD_SIGNAL(MethodInfo("meta_hover_started", PropertyInfo(Variant::NIL, "meta", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT)));
|
|
ADD_SIGNAL(MethodInfo("meta_hover_started", PropertyInfo(Variant::NIL, "meta", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT)));
|
|
ADD_SIGNAL(MethodInfo("meta_hover_ended", PropertyInfo(Variant::NIL, "meta", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT)));
|
|
ADD_SIGNAL(MethodInfo("meta_hover_ended", PropertyInfo(Variant::NIL, "meta", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT)));
|
|
|
|
|
|
|
|
+ BIND_ENUM_CONSTANT(AUTOWRAP_OFF);
|
|
|
|
+ BIND_ENUM_CONSTANT(AUTOWRAP_ARBITRARY);
|
|
|
|
+ BIND_ENUM_CONSTANT(AUTOWRAP_WORD);
|
|
|
|
+ BIND_ENUM_CONSTANT(AUTOWRAP_WORD_SMART);
|
|
|
|
+
|
|
BIND_ENUM_CONSTANT(LIST_NUMBERS);
|
|
BIND_ENUM_CONSTANT(LIST_NUMBERS);
|
|
BIND_ENUM_CONSTANT(LIST_LETTERS);
|
|
BIND_ENUM_CONSTANT(LIST_LETTERS);
|
|
BIND_ENUM_CONSTANT(LIST_ROMAN);
|
|
BIND_ENUM_CONSTANT(LIST_ROMAN);
|