Enforce zero width spaces and joiners with missing font. Do not warn about missing non-visual characters.

This commit is contained in:
Pāvels Nadtočajevs 2025-10-07 09:26:50 +03:00
parent 60b7b8b16e
commit fda161f976
No known key found for this signature in database
GPG key ID: 8413210218EF35D2
2 changed files with 7 additions and 2 deletions

View file

@ -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)); 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; p_sd->width += gl.advance;
@ -6877,7 +6882,7 @@ void TextServerAdvanced::_shape_run(ShapedTextDataAdvanced *p_sd, int64_t p_star
#endif #endif
gl.index = glyph_info[i].codepoint; 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) { if (zero_w) {
gl.index = 0; gl.index = 0;
gl.advance = 0.0; gl.advance = 0.0;

View file

@ -649,7 +649,7 @@ PackedStringArray Label::get_configuration_warnings() const {
const Glyph *glyph = TS->shaped_text_get_glyphs(para.text_rid); const Glyph *glyph = TS->shaped_text_get_glyphs(para.text_rid);
int64_t glyph_count = TS->shaped_text_get_glyph_count(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++) { 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.")); warnings.push_back(RTR("The current font does not support rendering one or more characters used in this Label's text."));
break; break;
} }