From 1247c9e64fe658b64d28531f241f184d0e10c4d6 Mon Sep 17 00:00:00 2001 From: 3dnikita Date: Thu, 22 Jun 2023 04:13:03 +0300 Subject: [PATCH] Fix SVG tag closing for OT font glyphs Prevent ThorVG "Failed to create SVG canvas" errors by self-closing empty SVG tags in OpenType fonts, so the glyphs are renderred correctly in Controls. Fixes #78374 --- modules/text_server_adv/thorvg_svg_in_ot.cpp | 7 ++++++- modules/text_server_fb/thorvg_svg_in_ot.cpp | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/text_server_adv/thorvg_svg_in_ot.cpp b/modules/text_server_adv/thorvg_svg_in_ot.cpp index c227f35561f..951ca155038 100644 --- a/modules/text_server_adv/thorvg_svg_in_ot.cpp +++ b/modules/text_server_adv/thorvg_svg_in_ot.cpp @@ -121,7 +121,12 @@ FT_Error tvg_svg_in_ot_preset_slot(FT_GlyphSlot p_slot, FT_Bool p_cache, FT_Poin for (int i = 0; i < parser->get_attribute_count(); i++) { xml_body += vformat(" %s=\"%s\"", parser->get_attribute_name(i), parser->get_attribute_value(i)); } - xml_body += ">"; + + if (parser->is_empty()) { + xml_body += "/>"; + } else { + xml_body += ">"; + } } else if (parser->get_node_type() == XMLParser::NODE_TEXT) { xml_body += parser->get_node_data(); } else if (parser->get_node_type() == XMLParser::NODE_ELEMENT_END) { diff --git a/modules/text_server_fb/thorvg_svg_in_ot.cpp b/modules/text_server_fb/thorvg_svg_in_ot.cpp index cd0ecd9b902..773b103c013 100644 --- a/modules/text_server_fb/thorvg_svg_in_ot.cpp +++ b/modules/text_server_fb/thorvg_svg_in_ot.cpp @@ -121,7 +121,12 @@ FT_Error tvg_svg_in_ot_preset_slot(FT_GlyphSlot p_slot, FT_Bool p_cache, FT_Poin for (int i = 0; i < parser->get_attribute_count(); i++) { xml_body += vformat(" %s=\"%s\"", parser->get_attribute_name(i), parser->get_attribute_value(i)); } - xml_body += ">"; + + if (parser->is_empty()) { + xml_body += "/>"; + } else { + xml_body += ">"; + } } else if (parser->get_node_type() == XMLParser::NODE_TEXT) { xml_body += parser->get_node_data(); } else if (parser->get_node_type() == XMLParser::NODE_ELEMENT_END) {