|
发表于 2008-12-19 23:21:45
|
显示全部楼层
上游BUG 地址:http://bugzilla.gnome.org/show_bug.cgi?id=563356
SVN TRUNK 补丁:http://svn.gnome.org/viewvc/pango?view=revision&revision=2747
3 天前标记的 1.22.4 版本中已经修复。升级理应能够解决。- --- trunk/ChangeLog 2008/11/28 17:34:57 2746
- +++ trunk/ChangeLog 2008/12/06 01:44:03 2747
- @@ -1,3 +1,21 @@
- +2008-12-05 Behdad Esfahbod <[email protected]>
- +
- + 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.
- +
- 2008-11-28 Behdad Esfahbod <[email protected]>
-
- Bug 562574 – Pangocariowin32 is leaking every cairo font it ever
- --- trunk/docs/tmpl/fonts.sgml 2008/11/28 17:34:57 2746
- +++ trunk/docs/tmpl/fonts.sgml 2008/12/06 01:44:03 2747
- @@ -441,7 +441,10 @@
- @descent: the distance from the baseline to the lowest point of the glyphs of
- the font. This is positive in practically all fonts.
- @approximate_char_width: approximate average width of the regular glyphs of
- - the font.
- + the font. Note that for this calculation, East Asian characters
- + (those passing g_unichar_iswide()) are counted as double-width.
- + This produces a more uniform value for this measure across languages
- + and results in more uniform and more expected UI sizes.
- @approximate_digit_width: approximate average width of the glyphs for digits
- of the font.
- @underline_position: position of the underline. This is normally negative.
- --- trunk/pango/pango-impl-utils.h 2008/11/28 17:34:57 2746
- +++ trunk/pango/pango-impl-utils.h 2008/12/06 01:44:03 2747
- @@ -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 @@
- 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__ */
- --- trunk/pango/pangocairo-atsuifont.c 2008/11/28 17:34:57 2746
- +++ trunk/pango/pangocairo-atsuifont.c 2008/12/06 01:44:03 2747
- @@ -24,6 +24,7 @@
-
- #import <Cocoa/Cocoa.h>
-
- +#include "pango-impl-utils.h"
- #include "pangoatsui-private.h"
- #include "pangocairo.h"
- #include "pangocairo-private.h"
- @@ -148,7 +149,7 @@
- pango_layout_set_text (layout, sample_str, -1);
- pango_layout_get_extents (layout, NULL, &extents);
-
- - metrics->approximate_char_width = extents.width / g_utf8_strlen (sample_str, -1);
- + metrics->approximate_char_width = extents.width / pango_utf8_strwidth (sample_str);
-
- pango_layout_set_text (layout, "0123456789", -1);
- metrics->approximate_digit_width = max_glyph_width (layout);
- --- trunk/pango/pangocairo-win32font.c 2008/11/28 17:34:57 2746
- +++ trunk/pango/pangocairo-win32font.c 2008/12/06 01:44:03 2747
- @@ -150,7 +150,7 @@
- pango_layout_set_text (layout, sample_str, -1);
- pango_layout_get_extents (layout, NULL, &extents);
-
- - metrics->approximate_char_width = extents.width / g_utf8_strlen (sample_str, -1);
- + metrics->approximate_char_width = extents.width / pango_utf8_strwidth (sample_str);
-
- pango_layout_set_text (layout, "0123456789", -1);
- metrics->approximate_digit_width = max_glyph_width (layout);
- --- trunk/pango/pangofc-font.c 2008/11/28 17:34:57 2746
- +++ trunk/pango/pangofc-font.c 2008/12/06 01:44:03 2747
- @@ -496,7 +496,7 @@
- pango_layout_get_extents (layout, NULL, &extents);
-
- metrics->approximate_char_width =
- - extents.width / g_utf8_strlen (sample_str, -1);
- + extents.width / pango_utf8_strwidth (sample_str);
-
- pango_layout_set_text (layout, "0123456789", -1);
- metrics->approximate_digit_width = max_glyph_width (layout);
复制代码 |
|