From 39a80ded9e79d92b70c5903ac9d4a3ae594f2fbb Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 15 Aug 2006 21:10:56 +0000 Subject: Render the header with SOUTH gravity. 2006-08-15 Behdad Esfahbod * examples/renderdemo.c (do_output): Render the header with SOUTH gravity. * pango/pangocairo-fcfont.c (pango_cairo_fc_font_get_metrics), (pango_cairo_fc_font_glyph_extents_cache_init): Center baseline for east/west gravity in pango_font_metrics too. --- ChangeLog | 9 +++++++++ examples/renderdemo.c | 5 +++-- pango/pangocairo-fcfont.c | 24 ++++++++++++++++++------ 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1bc6cfe8..7f3d9a88 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2006-08-15 Behdad Esfahbod + + * examples/renderdemo.c (do_output): Render the header with SOUTH + gravity. + + * pango/pangocairo-fcfont.c (pango_cairo_fc_font_get_metrics), + (pango_cairo_fc_font_glyph_extents_cache_init): Center baseline + for east/west gravity in pango_font_metrics too. + 2006-08-15 Behdad Esfahbod * examples/HELLO.utf8: Remove excess LRM. diff --git a/examples/renderdemo.c b/examples/renderdemo.c index e77ddcec..2bf6ce29 100644 --- a/examples/renderdemo.c +++ b/examples/renderdemo.c @@ -277,11 +277,11 @@ do_output (PangoContext *context, pango_context_set_language (context, pango_language_from_string ("en_US")); pango_context_set_base_dir (context, opt_rtl ? PANGO_DIRECTION_RTL : PANGO_DIRECTION_LTR); - pango_context_set_base_gravity (context, opt_gravity); if (opt_header) { char *options_string = get_options_string (); + pango_context_set_base_gravity (context, PANGO_GRAVITY_SOUTH); layout = make_layout (context, options_string, 10); pango_layout_get_extents (layout, NULL, &logical_rect); @@ -305,6 +305,8 @@ do_output (PangoContext *context, g_printerr ("The backend does not support rotated text\n"); } + pango_context_set_base_gravity (context, opt_gravity); + set_transform (context, transform_cb, cb_context, cb_data, &matrix); output_body (context, @@ -619,7 +621,6 @@ parse_options (int argc, char *argv[]) GError *parse_error = NULL; GOptionContext *context; size_t len; - char *p; prog_name = g_path_get_basename (argv[0]); context = g_option_context_new ("- FILE"); diff --git a/pango/pangocairo-fcfont.c b/pango/pangocairo-fcfont.c index 1af98e11..5ca9bcb2 100644 --- a/pango/pangocairo-fcfont.c +++ b/pango/pangocairo-fcfont.c @@ -216,6 +216,7 @@ pango_cairo_fc_font_get_metrics (PangoFont *font, if (!tmp_list) { PangoContext *context; + int height; if (!fcfont->fontmap) return pango_font_metrics_new (); @@ -231,6 +232,23 @@ pango_cairo_fc_font_get_metrics (PangoFont *font, pango_cairo_context_set_font_options (context, cffont->options); info->metrics = pango_fc_font_create_metrics_for_context (fcfont, context); + /* We may actually reuse ascent/descent we got from cairo here. that's + * in cffont->font_extents. + */ + height = info->metrics->ascent + info->metrics->descent; + switch (cffont->gravity) + { + default: + case PANGO_GRAVITY_SOUTH: + break; + case PANGO_GRAVITY_NORTH: + info->metrics->ascent = info->metrics->descent; + break; + case PANGO_GRAVITY_EAST: + case PANGO_GRAVITY_WEST: + info->metrics->ascent = height / 2; + } + info->metrics->descent = height - info->metrics->ascent; g_object_unref (context); } @@ -281,12 +299,6 @@ pango_cairo_fc_font_glyph_extents_cache_init (PangoCairoFcFont *cffont) case PANGO_GRAVITY_NORTH: cffont->font_extents.y = - PANGO_UNITS (font_extents.descent); break; - /* The case of EAST/WEST is tricky. In vertical layout, ascent/descent - * are useless. I'm trying to get a patch into cairo to use - * max_x_advance*0.5 for ascent and descent for vertical fonts. That's - * at least more useful. But with or without it, doesn't harm to center - * ourselves here. - */ case PANGO_GRAVITY_EAST: case PANGO_GRAVITY_WEST: cffont->font_extents.y = - PANGO_UNITS ((font_extents.ascent + font_extents.descent) * 0.5); -- cgit v1.2.1