From 5f00e066caac10fa724ca90e430b7f7d286e42ed Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 3 Jan 2018 16:24:31 +0000 Subject: [fc] Use FcWeightFrom/ToOpenTypeDouble() if available --- configure.ac | 4 +-- pango/pangofc-fontmap.c | 71 +++++++++---------------------------------------- 2 files changed, 15 insertions(+), 60 deletions(-) diff --git a/configure.ac b/configure.ac index 62555310..32219e03 100644 --- a/configure.ac +++ b/configure.ac @@ -216,12 +216,12 @@ AM_CONDITIONAL(HAVE_HARFBUZZ, $have_harfbuzz) # have_fontconfig=false if $have_harfbuzz ; then - PKG_CHECK_MODULES(FONTCONFIG, fontconfig >= 2.10.91, have_fontconfig=true, :) + PKG_CHECK_MODULES(FONTCONFIG, fontconfig >= 2.11.91, have_fontconfig=true, :) fi if $have_fontconfig ; then pango_save_libs=$LIBS LIBS="$LIBS $FONTCONFIG_LIBS" - AC_CHECK_FUNCS(FcWeightFromOpenType) + AC_CHECK_FUNCS(FcWeightFromOpenTypeDouble) LIBS=$pango_save_libs fi diff --git a/pango/pangofc-fontmap.c b/pango/pangofc-fontmap.c index 4e7d74bb..0f3a08d0 100644 --- a/pango/pangofc-fontmap.c +++ b/pango/pangofc-fontmap.c @@ -1387,36 +1387,13 @@ pango_fc_font_map_list_families (PangoFontMap *fontmap, *families = g_memdup (priv->families, priv->n_families * sizeof (PangoFontFamily *)); } -static int +static double pango_fc_convert_weight_to_fc (PangoWeight pango_weight) { -#ifdef HAVE_FCWEIGHTFROMOPENTYPE - return FcWeightFromOpenType (pango_weight); +#ifdef HAVE_FCWEIGHTFROMOPENTYPEDOUBLE + return FcWeightFromOpenTypeDouble (pango_weight); #else - if (pango_weight <= (PANGO_WEIGHT_THIN + PANGO_WEIGHT_ULTRALIGHT) / 2) - return FC_WEIGHT_THIN; - else if (pango_weight <= (PANGO_WEIGHT_ULTRALIGHT + PANGO_WEIGHT_LIGHT) / 2) - return FC_WEIGHT_ULTRALIGHT; - else if (pango_weight <= (PANGO_WEIGHT_LIGHT + PANGO_WEIGHT_SEMILIGHT) / 2) - return FC_WEIGHT_LIGHT; - else if (pango_weight <= (PANGO_WEIGHT_SEMILIGHT + PANGO_WEIGHT_BOOK) / 2) - return FC_WEIGHT_DEMILIGHT; - else if (pango_weight <= (PANGO_WEIGHT_BOOK + PANGO_WEIGHT_NORMAL) / 2) - return FC_WEIGHT_BOOK; - else if (pango_weight <= (PANGO_WEIGHT_NORMAL + PANGO_WEIGHT_MEDIUM) / 2) - return FC_WEIGHT_NORMAL; - else if (pango_weight <= (PANGO_WEIGHT_MEDIUM + PANGO_WEIGHT_SEMIBOLD) / 2) - return FC_WEIGHT_MEDIUM; - else if (pango_weight <= (PANGO_WEIGHT_SEMIBOLD + PANGO_WEIGHT_BOLD) / 2) - return FC_WEIGHT_DEMIBOLD; - else if (pango_weight <= (PANGO_WEIGHT_BOLD + PANGO_WEIGHT_ULTRABOLD) / 2) - return FC_WEIGHT_BOLD; - else if (pango_weight <= (PANGO_WEIGHT_ULTRABOLD + PANGO_WEIGHT_HEAVY) / 2) - return FC_WEIGHT_ULTRABOLD; - else if (pango_weight <= (PANGO_WEIGHT_HEAVY + PANGO_WEIGHT_ULTRAHEAVY) / 2) - return FC_WEIGHT_BLACK; - else - return FC_WEIGHT_EXTRABLACK; + return FcWeightFromOpenType (pango_weight); #endif } @@ -1476,7 +1453,7 @@ pango_fc_make_pattern (const PangoFontDescription *description, FcPattern *pattern; const char *prgname; int slant; - int weight; + double weight; PangoGravity gravity; FcBool vertical; char **families; @@ -1505,7 +1482,7 @@ pango_fc_make_pattern (const PangoFontDescription *description, */ pattern = FcPatternBuild (NULL, PANGO_FC_VERSION, FcTypeInteger, pango_version(), - FC_WEIGHT, FcTypeInteger, weight, + FC_WEIGHT, FcTypeDouble, weight, FC_SLANT, FcTypeInteger, slant, #ifdef FC_WIDTH FC_WIDTH, FcTypeInteger, width, @@ -2169,35 +2146,12 @@ pango_fc_font_map_shutdown (PangoFcFontMap *fcfontmap) } static PangoWeight -pango_fc_convert_weight_to_pango (int fc_weight) +pango_fc_convert_weight_to_pango (double fc_weight) { -#ifdef HAVE_FCWEIGHTFROMOPENTYPE - return FcWeightToOpenType (fc_weight); +#ifdef HAVE_FCWEIGHTFROMOPENTYPEDOUBLE + return FcWeightToOpenTypeDouble (fc_weight); #else - if (fc_weight <= (FC_WEIGHT_THIN + FC_WEIGHT_EXTRALIGHT) / 2) - return PANGO_WEIGHT_THIN; - else if (fc_weight <= (FC_WEIGHT_EXTRALIGHT + FC_WEIGHT_LIGHT) / 2) - return PANGO_WEIGHT_ULTRALIGHT; - else if (fc_weight <= (FC_WEIGHT_LIGHT + FC_WEIGHT_DEMILIGHT) / 2) - return PANGO_WEIGHT_LIGHT; - else if (fc_weight <= (FC_WEIGHT_DEMILIGHT + FC_WEIGHT_BOOK) / 2) - return PANGO_WEIGHT_SEMILIGHT; - else if (fc_weight <= (FC_WEIGHT_BOOK + FC_WEIGHT_REGULAR) / 2) - return PANGO_WEIGHT_BOOK; - else if (fc_weight <= (FC_WEIGHT_REGULAR + FC_WEIGHT_MEDIUM) / 2) - return PANGO_WEIGHT_NORMAL; - else if (fc_weight <= (FC_WEIGHT_MEDIUM + FC_WEIGHT_DEMIBOLD) / 2) - return PANGO_WEIGHT_MEDIUM; - else if (fc_weight <= (FC_WEIGHT_DEMIBOLD + FC_WEIGHT_BOLD) / 2) - return PANGO_WEIGHT_SEMIBOLD; - else if (fc_weight <= (FC_WEIGHT_BOLD + FC_WEIGHT_EXTRABOLD) / 2) - return PANGO_WEIGHT_BOLD; - else if (fc_weight <= (FC_WEIGHT_EXTRABOLD + FC_WEIGHT_BLACK) / 2) - return PANGO_WEIGHT_ULTRABOLD; - else if (fc_weight <= (FC_WEIGHT_BLACK + FC_WEIGHT_EXTRABLACK) / 2) - return PANGO_WEIGHT_HEAVY; - else - return PANGO_WEIGHT_ULTRAHEAVY; + return FcWeightToOpenType (fc_weight); #endif } @@ -2276,6 +2230,7 @@ pango_fc_font_description_from_pattern (FcPattern *pattern, gboolean include_siz FcChar8 *s; int i; + double d; FcResult res; desc = pango_font_description_new (); @@ -2292,8 +2247,8 @@ pango_fc_font_description_from_pattern (FcPattern *pattern, gboolean include_siz pango_font_description_set_style (desc, style); - if (FcPatternGetInteger (pattern, FC_WEIGHT, 0, &i) == FcResultMatch) - weight = pango_fc_convert_weight_to_pango (i); + if (FcPatternGetDouble (pattern, FC_WEIGHT, 0, &d) == FcResultMatch) + weight = pango_fc_convert_weight_to_pango (d); else weight = PANGO_WEIGHT_NORMAL; -- cgit v1.2.1