[pango/pango-1-44: 25/31] Fix pango_font_describe for Emoji fonts




commit af62cc0ff88c36a2647eb2fd6d7ad146c41fb304
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Jan 24 11:15:01 2021 -0500

    Fix pango_font_describe for Emoji fonts
    
    We are using the size from the FcPattern. For scalable
    bitmap fonts, this has been scaled to match the requested
    pixel size. To make a font description that can be turned
    back into a FcPattern and roundtrip successfully, we need
    to undo that scaling. Thankfully, fontconfig leaves the
    pixelsizefixupfactor in the pattern, so it is easy to do.
    
    Fixes: #530
    
    (cherry-picked from commit bc973fdb)

 pango/pangofc-fontmap.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)
---
diff --git a/pango/pangofc-fontmap.c b/pango/pangofc-fontmap.c
index 86c6b619..cbe9f07e 100644
--- a/pango/pangofc-fontmap.c
+++ b/pango/pangofc-fontmap.c
@@ -2318,7 +2318,24 @@ pango_fc_font_description_from_pattern (FcPattern *pattern, gboolean include_siz
   pango_font_description_set_variant (desc, PANGO_VARIANT_NORMAL);
 
   if (include_size && FcPatternGetDouble (pattern, FC_SIZE, 0, &size) == FcResultMatch)
-    pango_font_description_set_size (desc, size * PANGO_SCALE);
+    {
+      FcMatrix *fc_matrix;
+      double scale_factor = 1;
+
+      if (FcPatternGetMatrix (pattern, FC_MATRIX, 0, &fc_matrix) == FcResultMatch)
+        {
+          PangoMatrix mat = PANGO_MATRIX_INIT;
+
+          mat.xx = fc_matrix->xx;
+          mat.xy = fc_matrix->xy;
+          mat.yx = fc_matrix->yx;
+          mat.yy = fc_matrix->yy;
+
+          scale_factor = pango_matrix_get_font_scale_factor (&mat);
+        }
+
+      pango_font_description_set_size (desc, scale_factor * size * PANGO_SCALE);
+    }
 
   /* gravity is a bit different.  we don't want to set it if it was not set on
    * the pattern */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]