summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@gnome.org>2007-10-24 20:57:16 +0000
committerBehdad Esfahbod <behdad@src.gnome.org>2007-10-24 20:57:16 +0000
commit05002ecf14a2badd6442acf13ba6923ec0590587 (patch)
treec9dbfa5e65062996f68f17571027a7c04e5922f7
parent60bf58d2db8fe95fdce1d63f14f8b482234571f5 (diff)
downloadpango-05002ecf14a2badd6442acf13ba6923ec0590587.tar.gz
Bug 478865 – Drastically reduce number of PangoFont objects created for
2007-10-24 Behdad Esfahbod <behdad@gnome.org> Bug 478865 – Drastically reduce number of PangoFont objects created for rotating text * pango/pangofc-fontmap.c (fontset_hash_key_hash), (get_scaled_size), (pango_fc_font_map_get_patterns): Use a Pango-unit int for scaled-size instead of double. Merges even more queries... svn path=/trunk/; revision=2473
-rw-r--r--ChangeLog10
-rw-r--r--pango/pangofc-fontmap.c18
2 files changed, 18 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index dad14cb9..3589dcd6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,16 @@
Bug 478865 – Drastically reduce number of PangoFont objects created
for rotating text
+ * pango/pangofc-fontmap.c (fontset_hash_key_hash),
+ (get_scaled_size), (pango_fc_font_map_get_patterns):
+ Use a Pango-unit int for scaled-size instead of double.
+ Merges even more queries...
+
+2007-10-24 Behdad Esfahbod <behdad@gnome.org>
+
+ Bug 478865 – Drastically reduce number of PangoFont objects created
+ for rotating text
+
* pango/pangofc-fontmap.c (fontset_hash_key_equal),
(fontset_hash_key_hash), (fontset_hash_key_copy),
(get_scaled_size), (pango_fc_font_map_get_patterns):
diff --git a/pango/pangofc-fontmap.c b/pango/pangofc-fontmap.c
index 0a2a580b..e8471ec1 100644
--- a/pango/pangofc-fontmap.c
+++ b/pango/pangofc-fontmap.c
@@ -279,7 +279,7 @@ struct _FontsetHashKey {
PangoFcFontMap *fontmap;
PangoLanguage *language;
PangoFontDescription *desc;
- double scaled_size;
+ int scaled_size;
gpointer context_key;
};
@@ -337,16 +337,14 @@ fontset_hash_key_hash (const FontsetHashKey *key)
{
guint32 hash = FNV1_32_INIT;
- hash = hash_bytes_fnv ((unsigned char*)&key->scaled_size,
- sizeof(double),
- hash);
-
if (key->context_key)
hash ^= PANGO_FC_FONT_MAP_GET_CLASS (key->fontmap)->context_key_hash (key->fontmap,
key->context_key);
+ /* 1237 is just an abitrary prime */
return (hash ^
GPOINTER_TO_UINT (key->language) ^
+ (key->scaled_size * 1237) ^
pango_font_description_hash (key->desc));
}
@@ -1013,21 +1011,21 @@ pango_fc_font_map_get_resolution (PangoFcFontMap *fcfontmap,
return fcfontmap->priv->dpi;
}
-static double
+static int
get_scaled_size (PangoFcFontMap *fcfontmap,
PangoContext *context,
const PangoFontDescription *desc)
{
- int size = pango_font_description_get_size (desc);
+ double size = pango_font_description_get_size (desc);
if (!pango_font_description_get_size_is_absolute (desc))
{
double dpi = pango_fc_font_map_get_resolution (fcfontmap, context);
- size = (int)(0.5 + size * dpi / 72.);
+ size = size * dpi / 72.;
}
- return pango_matrix_get_font_scale_factor (pango_context_get_matrix (context)) * size / PANGO_SCALE;
+ return .5 + pango_matrix_get_font_scale_factor (pango_context_get_matrix (context)) * size;
}
static PangoFcPatternSet *
@@ -1065,7 +1063,7 @@ pango_fc_font_map_get_patterns (PangoFontMap *fontmap,
if (patterns == NULL)
{
pattern = pango_fc_make_pattern (desc, language,
- key.scaled_size,
+ key.scaled_size / 1024.,
pango_fc_font_map_get_resolution (fcfontmap, context));
pango_fc_default_substitute (fcfontmap, context, pattern);