Fix RichTextLabel not updating on theme/theme override change until text is updated.
This commit is contained in:
parent
99e06740cf
commit
2a0b4244b7
|
@ -2188,6 +2188,30 @@ RichTextLabel::ItemFont *RichTextLabel::_find_font(Item *p_item) {
|
||||||
while (fontitem) {
|
while (fontitem) {
|
||||||
if (fontitem->type == ITEM_FONT) {
|
if (fontitem->type == ITEM_FONT) {
|
||||||
ItemFont *fi = static_cast<ItemFont *>(fontitem);
|
ItemFont *fi = static_cast<ItemFont *>(fontitem);
|
||||||
|
switch (fi->def_font) {
|
||||||
|
case NORMAL_FONT: {
|
||||||
|
fi->font = theme_cache.normal_font;
|
||||||
|
fi->font_size = theme_cache.normal_font_size;
|
||||||
|
} break;
|
||||||
|
case BOLD_FONT: {
|
||||||
|
fi->font = theme_cache.bold_font;
|
||||||
|
fi->font_size = theme_cache.bold_font_size;
|
||||||
|
} break;
|
||||||
|
case ITALICS_FONT: {
|
||||||
|
fi->font = theme_cache.italics_font;
|
||||||
|
fi->font_size = theme_cache.italics_font_size;
|
||||||
|
} break;
|
||||||
|
case BOLD_ITALICS_FONT: {
|
||||||
|
fi->font = theme_cache.bold_italics_font;
|
||||||
|
fi->font_size = theme_cache.bold_italics_font_size;
|
||||||
|
} break;
|
||||||
|
case MONO_FONT: {
|
||||||
|
fi->font = theme_cache.mono_font;
|
||||||
|
fi->font_size = theme_cache.mono_font_size;
|
||||||
|
} break;
|
||||||
|
default: {
|
||||||
|
} break;
|
||||||
|
}
|
||||||
return fi;
|
return fi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3004,6 +3028,17 @@ void RichTextLabel::push_dropcap(const String &p_string, const Ref<Font> &p_font
|
||||||
_add_item(item, false);
|
_add_item(item, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RichTextLabel::_push_def_font(DefaultFont p_font) {
|
||||||
|
_stop_thread();
|
||||||
|
MutexLock data_lock(data_mutex);
|
||||||
|
|
||||||
|
ERR_FAIL_COND(current->type == ITEM_TABLE);
|
||||||
|
ItemFont *item = memnew(ItemFont);
|
||||||
|
|
||||||
|
item->def_font = p_font;
|
||||||
|
_add_item(item, true);
|
||||||
|
}
|
||||||
|
|
||||||
void RichTextLabel::push_font(const Ref<Font> &p_font, int p_size) {
|
void RichTextLabel::push_font(const Ref<Font> &p_font, int p_size) {
|
||||||
_stop_thread();
|
_stop_thread();
|
||||||
MutexLock data_lock(data_mutex);
|
MutexLock data_lock(data_mutex);
|
||||||
|
@ -3020,31 +3055,31 @@ void RichTextLabel::push_font(const Ref<Font> &p_font, int p_size) {
|
||||||
void RichTextLabel::push_normal() {
|
void RichTextLabel::push_normal() {
|
||||||
ERR_FAIL_COND(theme_cache.normal_font.is_null());
|
ERR_FAIL_COND(theme_cache.normal_font.is_null());
|
||||||
|
|
||||||
push_font(theme_cache.normal_font, theme_cache.normal_font_size);
|
_push_def_font(NORMAL_FONT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RichTextLabel::push_bold() {
|
void RichTextLabel::push_bold() {
|
||||||
ERR_FAIL_COND(theme_cache.bold_font.is_null());
|
ERR_FAIL_COND(theme_cache.bold_font.is_null());
|
||||||
|
|
||||||
push_font(theme_cache.bold_font, theme_cache.bold_font_size);
|
_push_def_font(BOLD_FONT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RichTextLabel::push_bold_italics() {
|
void RichTextLabel::push_bold_italics() {
|
||||||
ERR_FAIL_COND(theme_cache.bold_italics_font.is_null());
|
ERR_FAIL_COND(theme_cache.bold_italics_font.is_null());
|
||||||
|
|
||||||
push_font(theme_cache.bold_italics_font, theme_cache.bold_italics_font_size);
|
_push_def_font(BOLD_ITALICS_FONT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RichTextLabel::push_italics() {
|
void RichTextLabel::push_italics() {
|
||||||
ERR_FAIL_COND(theme_cache.italics_font.is_null());
|
ERR_FAIL_COND(theme_cache.italics_font.is_null());
|
||||||
|
|
||||||
push_font(theme_cache.italics_font, theme_cache.italics_font_size);
|
_push_def_font(ITALICS_FONT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RichTextLabel::push_mono() {
|
void RichTextLabel::push_mono() {
|
||||||
ERR_FAIL_COND(theme_cache.mono_font.is_null());
|
ERR_FAIL_COND(theme_cache.mono_font.is_null());
|
||||||
|
|
||||||
push_font(theme_cache.mono_font, theme_cache.mono_font_size);
|
_push_def_font(MONO_FONT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RichTextLabel::push_font_size(int p_font_size) {
|
void RichTextLabel::push_font_size(int p_font_size) {
|
||||||
|
@ -3635,9 +3670,9 @@ void RichTextLabel::append_text(const String &p_bbcode) {
|
||||||
//use bold font
|
//use bold font
|
||||||
in_bold = true;
|
in_bold = true;
|
||||||
if (in_italics) {
|
if (in_italics) {
|
||||||
push_font(theme_cache.bold_italics_font, theme_cache.bold_italics_font_size);
|
_push_def_font(BOLD_ITALICS_FONT);
|
||||||
} else {
|
} else {
|
||||||
push_font(theme_cache.bold_font, theme_cache.bold_font_size);
|
_push_def_font(BOLD_FONT);
|
||||||
}
|
}
|
||||||
pos = brk_end + 1;
|
pos = brk_end + 1;
|
||||||
tag_stack.push_front(tag);
|
tag_stack.push_front(tag);
|
||||||
|
@ -3645,15 +3680,15 @@ void RichTextLabel::append_text(const String &p_bbcode) {
|
||||||
//use italics font
|
//use italics font
|
||||||
in_italics = true;
|
in_italics = true;
|
||||||
if (in_bold) {
|
if (in_bold) {
|
||||||
push_font(theme_cache.bold_italics_font, theme_cache.bold_italics_font_size);
|
_push_def_font(BOLD_ITALICS_FONT);
|
||||||
} else {
|
} else {
|
||||||
push_font(theme_cache.italics_font, theme_cache.italics_font_size);
|
_push_def_font(ITALICS_FONT);
|
||||||
}
|
}
|
||||||
pos = brk_end + 1;
|
pos = brk_end + 1;
|
||||||
tag_stack.push_front(tag);
|
tag_stack.push_front(tag);
|
||||||
} else if (tag == "code") {
|
} else if (tag == "code") {
|
||||||
//use monospace font
|
//use monospace font
|
||||||
push_font(theme_cache.mono_font, theme_cache.mono_font_size);
|
_push_def_font(MONO_FONT);
|
||||||
pos = brk_end + 1;
|
pos = brk_end + 1;
|
||||||
tag_stack.push_front(tag);
|
tag_stack.push_front(tag);
|
||||||
} else if (tag.begins_with("table=")) {
|
} else if (tag.begins_with("table=")) {
|
||||||
|
|
|
@ -82,6 +82,15 @@ public:
|
||||||
MENU_SELECT_ALL,
|
MENU_SELECT_ALL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum DefaultFont {
|
||||||
|
NORMAL_FONT,
|
||||||
|
BOLD_FONT,
|
||||||
|
ITALICS_FONT,
|
||||||
|
BOLD_ITALICS_FONT,
|
||||||
|
MONO_FONT,
|
||||||
|
CUSTOM_FONT,
|
||||||
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void _update_theme_item_cache() override;
|
virtual void _update_theme_item_cache() override;
|
||||||
void _notification(int p_what);
|
void _notification(int p_what);
|
||||||
|
@ -178,6 +187,7 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ItemFont : public Item {
|
struct ItemFont : public Item {
|
||||||
|
DefaultFont def_font = CUSTOM_FONT;
|
||||||
Ref<Font> font;
|
Ref<Font> font;
|
||||||
int font_size = 0;
|
int font_size = 0;
|
||||||
ItemFont() { type = ITEM_FONT; }
|
ItemFont() { type = ITEM_FONT; }
|
||||||
|
@ -560,6 +570,7 @@ public:
|
||||||
void add_newline();
|
void add_newline();
|
||||||
bool remove_line(const int p_line);
|
bool remove_line(const int p_line);
|
||||||
void push_dropcap(const String &p_string, const Ref<Font> &p_font, int p_size, const Rect2 &p_dropcap_margins = Rect2(), const Color &p_color = Color(1, 1, 1), int p_ol_size = 0, const Color &p_ol_color = Color(0, 0, 0, 0));
|
void push_dropcap(const String &p_string, const Ref<Font> &p_font, int p_size, const Rect2 &p_dropcap_margins = Rect2(), const Color &p_color = Color(1, 1, 1), int p_ol_size = 0, const Color &p_ol_color = Color(0, 0, 0, 0));
|
||||||
|
void _push_def_font(DefaultFont p_font);
|
||||||
void push_font(const Ref<Font> &p_font, int p_size = 0);
|
void push_font(const Ref<Font> &p_font, int p_size = 0);
|
||||||
void push_font_size(int p_font_size);
|
void push_font_size(int p_font_size);
|
||||||
void push_outline_size(int p_font_size);
|
void push_outline_size(int p_font_size);
|
||||||
|
|
Loading…
Reference in New Issue