--- pango-1.10.1/pango/pangofc-font.c.orig 2005-10-13 21:23:29.000000000 +0800 +++ pango-1.10.1/pango/pangofc-font.c 2005-10-14 19:41:51.000000000 +0800 @@ -271,16 +271,22 @@ quantize_position (int *thickness, */ static void get_face_metrics (PangoFcFont *fcfont, - PangoFontMetrics *metrics) + PangoFontMetrics *metrics, + PangoLanguage *language) { FT_Face face = pango_fc_font_lock_face (fcfont); FcMatrix *fc_matrix; FT_Matrix ft_matrix; TT_OS2 *os2; gboolean have_transform = FALSE; + const char * lang = pango_language_to_string (language); + gboolean is_CJK_lang = FALSE; - if (FcPatternGetMatrix (fcfont->font_pattern, - FC_MATRIX, 0, &fc_matrix) == FcResultMatch) + if (lang && (!strncmp (lang, "zh", 2) || !strcmp (lang, "ja") || !strcmp (lang, "ko"))) + is_CJK_lang = TRUE; + + if (FcPatternGetMatrix (fcfont->font_pattern, + FC_MATRIX, 0, &fc_matrix) == FcResultMatch) { ft_matrix.xx = 0x10000L * fc_matrix->xx; ft_matrix.yy = 0x10000L * fc_matrix->yy; @@ -328,7 +334,10 @@ get_face_metrics (PangoFcFont *fcfo if (face->underline_thickness == 0) { metrics->underline_thickness = (PANGO_SCALE * face->size->metrics.y_ppem) / 14; - metrics->underline_position = - metrics->underline_thickness; + if (!is_CJK_lang) + metrics->underline_position = - metrics->underline_thickness; + else + metrics->underline_position = - MAX(metrics->descent, metrics->underline_thickness); } else { @@ -338,7 +347,10 @@ get_face_metrics (PangoFcFont *fcfo metrics->underline_thickness = PANGO_UNITS_26_6 (ft_thickness); ft_position = FT_MulFix (face->underline_position, face->size->metrics.y_scale); - metrics->underline_position = PANGO_UNITS_26_6 (ft_position); + if (!is_CJK_lang) + metrics->underline_position = PANGO_UNITS_26_6 (ft_position); + else + metrics->underline_position = MIN(- metrics->descent, ft_position); } os2 = FT_Get_Sfnt_Table (face, ft_sfnt_os2); @@ -406,7 +418,7 @@ pango_fc_font_create_metrics_for_context metrics = pango_font_metrics_new (); - get_face_metrics (fcfont, metrics); + get_face_metrics (fcfont, metrics, language); layout = pango_layout_new (context); pango_layout_set_font_description (layout, fcfont->description);