diff options
author | Behdad Esfahbod <behdad@gnome.org> | 2008-12-06 01:44:03 +0000 |
---|---|---|
committer | Behdad Esfahbod <behdad@src.gnome.org> | 2008-12-06 01:44:03 +0000 |
commit | 1ec099a51c7faec59e4b639cea95d08faf886615 (patch) | |
tree | 5cbadfb1747c90ac967b44b83a753efcc4dc338e /pango/pango-impl-utils.h | |
parent | 74cc07c44afd2879418389cce57a4129b60d61e6 (diff) | |
download | pango-1ec099a51c7faec59e4b639cea95d08faf886615.tar.gz |
Bug 563356 – The input area of firefox and the blank width after text in
2008-12-05 Behdad Esfahbod <behdad@gnome.org>
Bug 563356 – The input area of firefox and the blank width after text
in gnome-menu was stretched too wide, under pango-1.22.3
* docs/tmpl/fonts.sgml:
* pango/pango-impl-utils.h:
* pango/pangocairo-atsuifont.c
(pango_cairo_atsui_font_create_metrics_for_context):
* pango/pangocairo-win32font.c
(pango_cairo_win32_font_create_metrics_for_context):
* pango/pangofc-font.c (pango_fc_font_create_metrics_for_context):
For approximate_char_width calculation take each char's width into
account. That is, do a weighted average instead of uniform average.
g_unichar_iszerowidth() chars count as 0, g_unichar_iswide() chars
count 2, and the rest count as 1. Pretty much wcwidth() behavior.
See bug report for rationale.
svn path=/trunk/; revision=2747
Diffstat (limited to 'pango/pango-impl-utils.h')
-rw-r--r-- | pango/pango-impl-utils.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/pango/pango-impl-utils.h b/pango/pango-impl-utils.h index e21988f1..a04d4241 100644 --- a/pango/pango-impl-utils.h +++ b/pango/pango-impl-utils.h @@ -23,6 +23,7 @@ #ifndef __PANGO_IMPL_UTILS_H__ #define __PANGO_IMPL_UTILS_H__ +#include <glib.h> #include <glib-object.h> #include <pango/pango.h> @@ -92,6 +93,36 @@ void _pango_shape_get_extents (gint n_chars, PangoRectangle *ink_rect, PangoRectangle *logical_rect); + +/* We define these functions static here because we don't want to add public API + * for them (if anything, it belongs to glib, but glib found it trivial enough + * not to add API for). At some point metrics calculations will be + * centralized and this mess can be minimized. Or so I hope. + */ + +static inline G_GNUC_UNUSED int +pango_unichar_width (gunichar c) +{ + return G_UNLIKELY (g_unichar_iszerowidth (c)) ? 0 : + G_UNLIKELY (g_unichar_iswide (c)) ? 2 : 1; +} + +static G_GNUC_UNUSED glong +pango_utf8_strwidth (const gchar *p) +{ + glong len = 0; + g_return_val_if_fail (p != NULL, 0); + + while (*p) + { + len += pango_unichar_width (g_utf8_get_char (p)); + p = g_utf8_next_char (p); + } + + return len; +} + + G_END_DECLS #endif /* __PANGO_IMPL_UTILS_H__ */ |