diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp index cfe21c18b79..b0e10c20422 100644 --- a/modules/text_server_adv/text_server_adv.cpp +++ b/modules/text_server_adv/text_server_adv.cpp @@ -6734,6 +6734,11 @@ void TextServerAdvanced::_shape_run(ShapedTextDataAdvanced *p_sd, int64_t p_star p_sd->descent = MAX(p_sd->descent, Math::round(get_hex_code_box_size(fs, gl.index).x * 0.5)); } } + bool zero_w = (p_sd->preserve_control) ? (p_sd->text[i] == 0x200B || p_sd->text[i] == 0xFEFF) : ((p_sd->text[i] >= 0x200B && p_sd->text[i] <= 0x200D) || p_sd->text[i] == 0x2060 || p_sd->text[i] == 0xFEFF); + if (zero_w) { + gl.index = 0; + gl.advance = 0.0; + } p_sd->width += gl.advance; @@ -6877,7 +6882,7 @@ void TextServerAdvanced::_shape_run(ShapedTextDataAdvanced *p_sd, int64_t p_star #endif gl.index = glyph_info[i].codepoint; - bool zero_w = (p_sd->preserve_control) ? (p_sd->text[glyph_info[i].cluster] == 0x200B || p_sd->text[glyph_info[i].cluster] == 0xFEF) : (p_sd->text[glyph_info[i].cluster] >= 0x200B && p_sd->text[glyph_info[i].cluster] <= 0x200D) || p_sd->text[glyph_info[i].cluster] == 0x2060 || p_sd->text[glyph_info[i].cluster] == 0xFEFF; + bool zero_w = (p_sd->preserve_control) ? (p_sd->text[glyph_info[i].cluster] == 0x200B || p_sd->text[glyph_info[i].cluster] == 0xFEFF) : ((p_sd->text[glyph_info[i].cluster] >= 0x200B && p_sd->text[glyph_info[i].cluster] <= 0x200D) || p_sd->text[glyph_info[i].cluster] == 0x2060 || p_sd->text[glyph_info[i].cluster] == 0xFEFF); if (zero_w) { gl.index = 0; gl.advance = 0.0; diff --git a/scene/gui/label.cpp b/scene/gui/label.cpp index d508e6d57df..902a0836033 100644 --- a/scene/gui/label.cpp +++ b/scene/gui/label.cpp @@ -649,7 +649,7 @@ PackedStringArray Label::get_configuration_warnings() const { const Glyph *glyph = TS->shaped_text_get_glyphs(para.text_rid); int64_t glyph_count = TS->shaped_text_get_glyph_count(para.text_rid); for (int64_t i = 0; i < glyph_count; i++) { - if (glyph[i].font_rid == RID()) { + if (glyph[i].font_rid == RID() && glyph[i].index != 0) { warnings.push_back(RTR("The current font does not support rendering one or more characters used in this Label's text.")); break; }