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:
parent
13e821bba5
commit
1609197792
1 changed files with 67 additions and 20 deletions
|
|
@ -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>");
|
||||
|
|
|
|||
Loading…
Reference in a new issue