diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | pango/pangocairo-render.c | 18 |
2 files changed, 16 insertions, 8 deletions
@@ -1,3 +1,9 @@ +2006-12-17 Behdad Esfahbod <behdad@gnome.org> + + * pango/pangocairo-render.c (pango_cairo_renderer_draw_glyphs): + Avoid some floating-point operations by caching the y value for the + baseline, using it for glyphs having y_offset of 0. + 2006-12-15 Frederic Crozat <fcrozat@mandriva.com> Bug 385478 – Fix tests on OPD platform diff --git a/pango/pangocairo-render.c b/pango/pangocairo-render.c index 642b6a5d..48aedf95 100644 --- a/pango/pangocairo-render.c +++ b/pango/pangocairo-render.c @@ -196,6 +196,8 @@ pango_cairo_renderer_draw_glyphs (PangoRenderer *renderer, int x_position = 0; cairo_glyph_t *cairo_glyphs; cairo_glyph_t stack_glyphs[MAX_STACK]; + double base_x = crenderer->x_offset + (double)x / PANGO_SCALE; + double base_y = crenderer->y_offset + (double)y / PANGO_SCALE; cairo_save (crenderer->cr); if (!crenderer->do_path) @@ -209,10 +211,10 @@ pango_cairo_renderer_draw_glyphs (PangoRenderer *renderer, if (gi->glyph != PANGO_GLYPH_EMPTY) { - double cx = crenderer->x_offset + - (double)(x + x_position + gi->geometry.x_offset) / PANGO_SCALE; - double cy = crenderer->y_offset + - (double)(y + gi->geometry.y_offset) / PANGO_SCALE; + double cx = base_x + (double)(x_position + gi->geometry.x_offset) / PANGO_SCALE; + double cy = gi->geometry.y_offset == 0 ? + base_y : + base_y + (double)(gi->geometry.y_offset) / PANGO_SCALE; _pango_cairo_renderer_draw_unknown_glyph (crenderer, font, gi, cx, cy); } @@ -234,10 +236,10 @@ pango_cairo_renderer_draw_glyphs (PangoRenderer *renderer, if (gi->glyph != PANGO_GLYPH_EMPTY) { - double cx = crenderer->x_offset + - (double)(x + x_position + gi->geometry.x_offset) / PANGO_SCALE; - double cy = crenderer->y_offset + - (double)(y + gi->geometry.y_offset) / PANGO_SCALE; + double cx = base_x + (double)(x_position + gi->geometry.x_offset) / PANGO_SCALE; + double cy = gi->geometry.y_offset == 0 ? + base_y : + base_y + (double)(gi->geometry.y_offset) / PANGO_SCALE; if (gi->glyph & PANGO_GLYPH_UNKNOWN_FLAG) _pango_cairo_renderer_draw_unknown_glyph (crenderer, font, gi, cx, cy); |