GimpFontFactory:Fix bold/italic custom xml config

Previously buttons in the style editor meant just "faux" bold/italic,
which is different from the behaviour of 2.10, where real bold/italic
was used if available.

Unfortunately this might break in some cases if fontconfig doesn't return the correct face,
but at least it's consistent with 2.10.
This commit is contained in:
Idriss Fekir 2025-02-28 12:07:04 +01:00
parent 13e821bba5
commit 1609197792

View file

@ -792,6 +792,8 @@ gimp_font_factory_load_names (GimpFontFactory *factory,
PangoFontDescription *pfd;
GString *xml;
GString *xml_bold_variant;
GString *xml_italic_variant;
GString *xml_bold_italic_variant;
gchar *family = NULL;
gchar *style = NULL;
gchar *psname = NULL;
@ -885,7 +887,9 @@ gimp_font_factory_load_names (GimpFontFactory *factory,
xml = g_string_new ("<match>");
/*We can't use faux bold (sometimes real bold) unless it is specified in fontconfig*/
xml_bold_variant = g_string_new ("<?xml version=\"1.0\"?>\n<match>");
xml_bold_variant = g_string_new ("<?xml version=\"1.0\"?>\n<match>");
xml_italic_variant = g_string_new ("<?xml version=\"1.0\"?>\n<match>");
xml_bold_italic_variant = g_string_new ("<?xml version=\"1.0\"?>\n<match>");
g_string_append_printf (xml,
"<test name=\"family\"><string>%s</string></test>",
@ -893,17 +897,25 @@ gimp_font_factory_load_names (GimpFontFactory *factory,
g_string_append_printf (xml_bold_variant,
"<test name=\"family\"><string>%s</string></test>",
newname);
g_string_append_printf (xml_italic_variant,
"<test name=\"family\"><string>%s</string></test>",
newname);
g_string_append_printf (xml_bold_italic_variant,
"<test name=\"family\"><string>%s</string></test>",
newname);
g_string_append (xml_bold_variant,
"<test name=\"weight\" compare=\"eq\"><const>bold</const></test>");
g_string_append (xml_italic_variant,
"<test name=\"slant\" compare=\"eq\"><const>italic</const></test>");
g_string_append (xml_bold_italic_variant,
"<test name=\"weight\" compare=\"eq\"><const>bold</const></test>");
g_string_append (xml_bold_italic_variant,
"<test name=\"slant\" compare=\"eq\"><const>italic</const></test>");
escaped_fullname = g_markup_escape_text (fullname, -1);
g_string_append_printf (xml,
"<edit name=\"fullname\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
escaped_fullname);
g_string_append_printf (xml_bold_variant,
"<edit name=\"fullname\" mode=\"prepend\" binding=\"strong\"><string>%s</string></edit>",
escaped_fullname);
g_free (escaped_fullname);
family = g_markup_escape_text (family, -1);
g_string_append_printf (xml,
@ -912,15 +924,29 @@ gimp_font_factory_load_names (GimpFontFactory *factory,
g_string_append_printf (xml_bold_variant,
"<edit name=\"family\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
family);
g_string_append_printf (xml_italic_variant,
"<edit name=\"family\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
family);
g_string_append_printf (xml_bold_italic_variant,
"<edit name=\"family\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
family);
g_string_append_printf (xml_bold_variant,
"<edit name=\"family\" mode=\"prepend\" binding=\"strong\"><string>%s</string></edit>",
escaped_fullname);
g_string_append_printf (xml_italic_variant,
"<edit name=\"family\" mode=\"prepend\" binding=\"strong\"><string>%s</string></edit>",
escaped_fullname);
g_string_append_printf (xml_bold_italic_variant,
"<edit name=\"family\" mode=\"prepend\" binding=\"strong\"><string>%s</string></edit>",
escaped_fullname);
g_free (escaped_fullname);
g_free (family);
escaped_file = g_markup_escape_text (file, -1);
g_string_append_printf (xml,
"<edit name=\"file\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
escaped_file);
g_string_append_printf (xml_bold_variant,
"<edit name=\"file\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
escaped_file);
g_free (escaped_file);
if (psname != NULL && g_utf8_validate (psname, -1, NULL))
@ -929,9 +955,6 @@ gimp_font_factory_load_names (GimpFontFactory *factory,
g_string_append_printf (xml,
"<edit name=\"postscriptname\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
psname);
g_string_append_printf (xml_bold_variant,
"<edit name=\"postscriptname\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
psname);
g_free (psname);
}
@ -941,18 +964,21 @@ gimp_font_factory_load_names (GimpFontFactory *factory,
g_string_append_printf (xml,
"<edit name=\"style\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
style);
g_string_append_printf (xml_bold_variant,
"<edit name=\"style\" mode=\"assign\" binding=\"strong\"><string>%s</string></edit>",
style);
g_free (style);
}
g_string_append (xml_bold_variant, "<edit name=\"weight\" mode=\"assign\" binding=\"strong\"><const>bold</const></edit>");
g_string_append (xml_bold_italic_variant, "<edit name=\"weight\" mode=\"assign\" binding=\"strong\"><const>bold</const></edit>");
if (weight != -1)
g_string_append_printf (xml,
"<edit name=\"weight\" mode=\"prepend\" binding=\"strong\"><int>%i</int></edit>",
weight);
{
g_string_append_printf (xml,
"<edit name=\"weight\" mode=\"prepend\" binding=\"strong\"><int>%i</int></edit>",
weight);
g_string_append_printf (xml_italic_variant,
"<edit name=\"weight\" mode=\"prepend\" binding=\"strong\"><int>%i</int></edit>",
weight);
}
if (width != -1)
{
@ -962,8 +988,17 @@ gimp_font_factory_load_names (GimpFontFactory *factory,
g_string_append_printf (xml_bold_variant,
"<edit name=\"width\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
width);
g_string_append_printf (xml_italic_variant,
"<edit name=\"width\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
width);
g_string_append_printf (xml_bold_italic_variant,
"<edit name=\"width\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
width);
}
g_string_append (xml_italic_variant, "<edit name=\"slant\" mode=\"assign\" binding=\"strong\"><const>italic</const></edit>");
g_string_append (xml_bold_italic_variant, "<edit name=\"slant\" mode=\"assign\" binding=\"strong\"><const>italic</const></edit>");
if (slant != -1)
{
g_string_append_printf (xml,
@ -982,6 +1017,12 @@ gimp_font_factory_load_names (GimpFontFactory *factory,
g_string_append_printf (xml_bold_variant,
"<edit name=\"fontversion\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
fontversion);
g_string_append_printf (xml_italic_variant,
"<edit name=\"fontversion\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
fontversion);
g_string_append_printf (xml_bold_italic_variant,
"<edit name=\"fontversion\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
fontversion);
}
if (index != -1)
@ -989,15 +1030,16 @@ gimp_font_factory_load_names (GimpFontFactory *factory,
g_string_append_printf (xml,
"<edit name=\"index\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
index);
g_string_append_printf (xml_bold_variant,
"<edit name=\"index\" mode=\"assign\" binding=\"strong\"><int>%i</int></edit>",
index);
}
g_string_append (xml, "</match>\n");
g_string_append (xml_bold_variant, "</match>\n");
g_string_append (xml_italic_variant, "</match>\n");
g_string_append (xml_bold_italic_variant, "</match>\n");
FcConfigParseAndLoadFromMemory (FcConfigGetCurrent (), (const FcChar8 *) xml_bold_italic_variant->str, FcTrue);
FcConfigParseAndLoadFromMemory (FcConfigGetCurrent (), (const FcChar8 *) xml_italic_variant->str, FcTrue);
FcConfigParseAndLoadFromMemory (FcConfigGetCurrent (), (const FcChar8 *) xml_bold_variant->str, FcTrue);
FcConfigParseAndLoadFromMemory (FcConfigGetCurrent (), (const FcChar8 *) xml->str, FcTrue);
@ -1009,6 +1051,9 @@ gimp_font_factory_load_names (GimpFontFactory *factory,
gimp_font_factory_add_font (container, context, pfd, fullname, (const gchar *) file, font_info);
g_string_append (global_xml, xml->str);
g_string_append (global_xml, xml_bold_variant->str);
g_string_append (global_xml, xml_italic_variant->str);
g_string_append (global_xml, xml_bold_italic_variant->str);
pango_font_description_free (pattern_pfd);
g_free (pattern_pfd_desc);
@ -1016,6 +1061,8 @@ gimp_font_factory_load_names (GimpFontFactory *factory,
g_free (newname);
g_string_free (xml, TRUE);
g_string_free (xml_bold_variant, TRUE);
g_string_free (xml_italic_variant, TRUE);
g_string_free (xml_bold_italic_variant, TRUE);
}
g_string_append (global_xml, "</fontconfig>");