diff options
author | John Ralls <jralls@ceridwen.us> | 2017-08-15 09:21:26 +0200 |
---|---|---|
committer | John Ralls <jralls@ceridwen.us> | 2017-08-15 09:26:36 +0200 |
commit | 8ab2cc198469b4a46b1536c4f5c5d3396a6444b4 (patch) | |
tree | e98ab683e7fb7afbf39fac6796bde905f14ca38a /pango/pangocoretext-fontmap.c | |
parent | 599ffcf042bbca6f87edff0e241958523145294d (diff) | |
download | pango-8ab2cc198469b4a46b1536c4f5c5d3396a6444b4.tar.gz |
CoreText: Remove absolute size and scaling to screen resolution.
Cairo's CGFont backend already handles scaling fonts to the display
resolution, so scaling to the screen screen resolution in Pango's
CoreText backend generates double-sized text on a Retina display.
The layout test depended on providing a (bogus) resolution of 96DPI and
scaling the font to it in order to obtain the "expected" layout
results. This is replaced by adjusting the font size in test-layout.c
if Pango is compiled for CoreText.
https://bugzilla.gnome.org/show_bug.cgi?id=782393
Diffstat (limited to 'pango/pangocoretext-fontmap.c')
-rw-r--r-- | pango/pangocoretext-fontmap.c | 69 |
1 files changed, 26 insertions, 43 deletions
diff --git a/pango/pangocoretext-fontmap.c b/pango/pangocoretext-fontmap.c index 6cd9fe9f..4d101847 100644 --- a/pango/pangocoretext-fontmap.c +++ b/pango/pangocoretext-fontmap.c @@ -827,12 +827,6 @@ get_scaled_size (PangoCoreTextFontMap *fontmap, { double size = pango_font_description_get_size (desc); - if (!pango_font_description_get_size_is_absolute (desc)) - { - double dpi = pango_core_text_font_map_get_resolution (fontmap, context); - size = size * dpi / 72.; - } - return .5 + pango_matrix_get_font_scale_factor (pango_context_get_matrix (context)) * size; } @@ -846,7 +840,7 @@ struct _PangoCoreTextFontsetKey PangoLanguage *language; PangoFontDescription *desc; PangoMatrix matrix; - int pixelsize; + int pointsize; double resolution; PangoGravity gravity; gpointer context_key; @@ -865,7 +859,7 @@ pango_core_text_fontset_key_init (PangoCoreTextFontsetKey *key, key->fontmap = fontmap; get_context_matrix (context, &key->matrix); key->language = language; - key->pixelsize = get_scaled_size (fontmap, context, desc); + key->pointsize = get_scaled_size (fontmap, context, desc); key->resolution = pango_core_text_font_map_get_resolution (fontmap, context); key->gravity = pango_context_get_gravity (context); key->desc = pango_font_description_copy_static (desc); @@ -885,7 +879,7 @@ pango_core_text_fontset_key_copy (const PangoCoreTextFontsetKey *old) key->fontmap = old->fontmap; key->matrix = old->matrix; key->language = old->language; - key->pixelsize = old->pixelsize; + key->pointsize = old->pointsize; key->resolution = old->resolution; key->gravity = old->gravity; key->desc = pango_font_description_copy (old->desc); @@ -929,7 +923,7 @@ pango_core_text_fontset_key_equal (const PangoCoreTextFontsetKey *key_a, const PangoCoreTextFontsetKey *key_b) { if (key_a->language == key_b->language && - key_a->pixelsize == key_b->pixelsize && + key_a->pointsize == key_b->pointsize && key_a->resolution == key_b->resolution && key_a->gravity == key_b->gravity && pango_font_description_equal (key_a->desc, key_b->desc) && @@ -979,7 +973,7 @@ struct _PangoCoreTextFontKey CTFontDescriptorRef ctfontdescriptor; PangoMatrix matrix; PangoGravity gravity; - int pixelsize; + int pointsize; double resolution; gboolean synthetic_italic; gpointer context_key; @@ -995,7 +989,7 @@ pango_core_text_font_key_init (PangoCoreTextFontKey *key, key->fontmap = ctfontmap; key->ctfontdescriptor = ctdescriptor; key->matrix = *pango_core_text_fontset_key_get_matrix (fontset_key); - key->pixelsize = fontset_key->pixelsize; + key->pointsize = fontset_key->pointsize; key->resolution = fontset_key->resolution; key->synthetic_italic = synthetic_italic; key->gravity = pango_core_text_fontset_key_get_gravity (fontset_key); @@ -1011,7 +1005,7 @@ pango_core_text_font_key_copy (const PangoCoreTextFontKey *old) key->ctfontdescriptor = old->ctfontdescriptor; CFRetain (key->ctfontdescriptor); key->matrix = old->matrix; - key->pixelsize = old->pixelsize; + key->pointsize = old->pointsize; key->resolution = old->resolution; key->synthetic_italic = old->synthetic_italic; key->gravity = old->gravity; @@ -1057,7 +1051,7 @@ pango_core_text_font_key_equal (const PangoCoreTextFontKey *key_a, if (CFEqual (key_a->ctfontdescriptor, key_b->ctfontdescriptor) && memcmp (&key_a->matrix, &key_b->matrix, 4 * sizeof (double)) == 0 && key_a->gravity == key_b->gravity && - key_a->pixelsize == key_b->pixelsize && + key_a->pointsize == key_b->pointsize && key_a->resolution == key_b->resolution && key_a->synthetic_italic == key_b->synthetic_italic) { @@ -1073,9 +1067,9 @@ pango_core_text_font_key_equal (const PangoCoreTextFontKey *key_a, } int -pango_core_text_font_key_get_absolute_size (const PangoCoreTextFontKey *key) +pango_core_text_font_key_get_size (const PangoCoreTextFontKey *key) { - return key->pixelsize; + return key->pointsize; } double @@ -1162,32 +1156,34 @@ pango_core_text_font_map_new_font (PangoCoreTextFontMap *fontmap, static gboolean find_best_match (PangoCoreTextFamily *font_family, const PangoFontDescription *description, - PangoFontDescription **best_description, PangoCoreTextFace **best_face) { PangoFontDescription *new_desc; + PangoFontDescription *best_description = NULL; int i; - *best_description = NULL; *best_face = NULL; for (i = 0; i < font_family->n_faces; i++) { new_desc = pango_font_face_describe (font_family->faces[i]); - if (pango_font_description_better_match (description, *best_description, new_desc)) + if (pango_font_description_better_match (description, best_description, + new_desc)) { - pango_font_description_free (*best_description); - *best_description = new_desc; + pango_font_description_free (best_description); + best_description = new_desc; *best_face = (PangoCoreTextFace *)font_family->faces[i]; } else pango_font_description_free (new_desc); } - if (*best_description) - return TRUE; - + if (best_description) + { + pango_font_description_free (best_description); + return TRUE; + } return FALSE; } @@ -1557,33 +1553,20 @@ pango_core_text_fontset_new (PangoCoreTextFontsetKey *key, if (font_family) { - PangoFontDescription *best_description; PangoCoreTextFace *best_face; - gint size; - gboolean is_absolute; /* Force a listing of the available faces */ pango_font_family_list_faces ((PangoFontFamily *)font_family, NULL, NULL); - if (!find_best_match (font_family, description, &best_description, &best_face)) + if (!find_best_match (font_family, description, &best_face)) return NULL; - size = pango_font_description_get_size (description); - if (size < 0) - return NULL; - - is_absolute = pango_font_description_get_size_is_absolute (description); - if (is_absolute) - pango_font_description_set_absolute_size (best_description, size); - else - pango_font_description_set_size (best_description, size); + best_font = + pango_core_text_font_map_new_font (key->fontmap, + key, + best_face->ctfontdescriptor, + best_face->synthetic_italic); - best_font = pango_core_text_font_map_new_font (key->fontmap, - key, - best_face->ctfontdescriptor, - best_face->synthetic_italic); - - pango_font_description_free (best_description); } else return NULL; |