diff -crB pango-1.29.3/pango/pangocoretext-fontmap.c pango-1.29.3_fixed/pango/pangocoretext-fontmap.c *** pango-1.29.3/pango/pangocoretext-fontmap.c 2011-06-16 21:17:27.000000000 +0200 --- pango-1.29.3_fixed/pango/pangocoretext-fontmap.c 2011-10-05 23:13:24.000000000 +0200 *************** *** 595,600 **** --- 595,603 ---- PangoFontDescription *desc; char *postscript_name; gpointer context_key; + gint size; + gboolean size_is_absolute; + double dpi; }; /* Fowler / Noll / Vo (FNV) Hash (http://www.isthe.com/chongo/tech/comp/fnv/) *************** *** 629,635 **** key_a->matrix.yx == key_b->matrix.yx && key_a->matrix.yy == key_b->matrix.yy && pango_font_description_equal (key_a->desc, key_b->desc) && ! strcmp (key_a->postscript_name, key_b->postscript_name) == 0) { if (key_a->context_key) return PANGO_CORE_TEXT_FONT_MAP_GET_CLASS (key_a->fontmap)->context_key_equal (key_a->fontmap, --- 632,641 ---- key_a->matrix.yx == key_b->matrix.yx && key_a->matrix.yy == key_b->matrix.yy && pango_font_description_equal (key_a->desc, key_b->desc) && ! strcmp (key_a->postscript_name, key_b->postscript_name) == 0 ! && key_a->dpi == key_b->dpi ! && key_a->size == key_b->size ! && key_a->size_is_absolute == key_b->size_is_absolute) { if (key_a->context_key) return PANGO_CORE_TEXT_FONT_MAP_GET_CLASS (key_a->fontmap)->context_key_equal (key_a->fontmap, *************** *** 657,662 **** --- 663,680 ---- key->context_key); hash ^= g_str_hash (key->postscript_name); + + hash = hash_bytes_fnv ((unsigned char*)(&key->dpi), + sizeof(double), + hash); + + hash = hash_bytes_fnv ((unsigned char*)(&key->size), + sizeof(gint), + hash); + + hash = hash_bytes_fnv ((unsigned char*)(&key->size_is_absolute), + sizeof(gboolean), + hash); return (hash ^ pango_font_description_hash (key->desc)); } *************** *** 680,685 **** --- 698,706 ---- key->matrix = old->matrix; key->desc = pango_font_description_copy (old->desc); key->postscript_name = g_strdup (old->postscript_name); + key->size = old->size; + key->size_is_absolute = old->size_is_absolute; + key->dpi = old->dpi; if (old->context_key) key->context_key = PANGO_CORE_TEXT_FONT_MAP_GET_CLASS (key->fontmap)->context_key_copy (key->fontmap, old->context_key); else *************** *** 707,712 **** --- 728,751 ---- *matrix = identity; } + extern double + pango_cairo_context_get_resolution (PangoContext *context); + + static double + pango_core_text_get_resolution (PangoCoreTextFontMap *ctfontmap, + PangoContext *context) + { + if (context) + { + return pango_cairo_context_get_resolution (context); + } + + PangoCoreTextFontMapClass *klass; + klass = PANGO_CORE_TEXT_FONT_MAP_GET_CLASS (ctfontmap); + + return klass->get_resolution(ctfontmap, context); + } + static void font_hash_key_for_context (PangoCoreTextFontMap *fcfontmap, PangoContext *context, *************** *** 715,720 **** --- 754,761 ---- key->fontmap = fcfontmap; get_context_matrix (context, &key->matrix); + key->dpi = pango_core_text_get_resolution (fcfontmap, context); + if (PANGO_CORE_TEXT_FONT_MAP_GET_CLASS (fcfontmap)->context_key_get) key->context_key = (gpointer)PANGO_CORE_TEXT_FONT_MAP_GET_CLASS (fcfontmap)->context_key_get (fcfontmap, context); else *************** *** 736,741 **** --- 777,784 ---- face = _pango_core_text_font_get_face (ctfont); key.postscript_name = (char *)_pango_core_text_face_get_postscript_name (face); key.desc = _pango_core_text_font_get_font_description (ctfont); + key.size = pango_font_description_get_size (key.desc); + key.size_is_absolute = pango_font_description_get_size_is_absolute (key.desc); key_copy = font_hash_key_copy (&key); _pango_core_text_font_set_context_key (ctfont, key_copy->context_key); *************** *** 753,758 **** --- 796,803 ---- font_hash_key_for_context (ctfontmap, context, &key); key.postscript_name = (char *)_pango_core_text_face_get_postscript_name (face); key.desc = desc; + key.size = pango_font_description_get_size (key.desc); + key.size_is_absolute = pango_font_description_get_size_is_absolute (key.desc); return g_hash_table_lookup (ctfontmap->font_hash, &key); } diff -crB pango-1.29.3/pango/pangocoretext-private.h pango-1.29.3_fixed/pango/pangocoretext-private.h *** pango-1.29.3/pango/pangocoretext-private.h 2011-06-16 21:17:27.000000000 +0200 --- pango-1.29.3_fixed/pango/pangocoretext-private.h 2011-10-05 22:53:14.000000000 +0200 *************** *** 57,62 **** --- 57,65 ---- { PangoFontMapClass parent_class; + double (*get_resolution) (PangoCoreTextFontMap *ctfontmap, + PangoContext *context); + gconstpointer (*context_key_get) (PangoCoreTextFontMap *ctfontmap, PangoContext *context); gpointer (*context_key_copy) (PangoCoreTextFontMap *ctfontmap,