diff --git a/ChangeLog b/ChangeLog index 4bc578e65..d9288813f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2005-09-01 Keith Packard + + reviewed by: otaylor deserves credit for noticing a problem + + * src/cairo-ft-font.c: (_cairo_ft_scaled_font_create): + Oops. Call _cairo_scaled_font_set_metrics to set user-space + metrics for scaled fonts. + 2005-09-01 Bertram Felgenhauer * src/cairo-scaled-font.c (_cairo_scaled_font_text_to_glyphs): diff --git a/src/cairo-ft-font.c b/src/cairo-ft-font.c index fb883eec9..a150881f0 100644 --- a/src/cairo-ft-font.c +++ b/src/cairo-ft-font.c @@ -1398,6 +1398,7 @@ _cairo_ft_scaled_font_create (cairo_ft_unscaled_font_t *unscaled, cairo_ft_scaled_font_t *scaled_font = NULL; FT_Face face; FT_Size_Metrics *metrics; + cairo_font_extents_t fs_metrics; face = _cairo_ft_unscaled_font_lock_face (unscaled); if (!face) @@ -1444,24 +1445,25 @@ _cairo_ft_scaled_font_create (cairo_ft_unscaled_font_t *unscaled, else y_factor = 1 / unscaled->y_scale; - scaled_font->base.extents.ascent = DOUBLE_FROM_26_6(metrics->ascender) * y_factor; - scaled_font->base.extents.descent = DOUBLE_FROM_26_6(- metrics->descender) * y_factor; - scaled_font->base.extents.height = DOUBLE_FROM_26_6(metrics->height) * y_factor; - scaled_font->base.extents.max_x_advance = DOUBLE_FROM_26_6(metrics->max_advance) * x_factor; + fs_metrics.ascent = DOUBLE_FROM_26_6(metrics->ascender) * y_factor; + fs_metrics.descent = DOUBLE_FROM_26_6(- metrics->descender) * y_factor; + fs_metrics.height = DOUBLE_FROM_26_6(metrics->height) * y_factor; + fs_metrics.max_x_advance = DOUBLE_FROM_26_6(metrics->max_advance) * x_factor; } else { double scale = face->units_per_EM; - scaled_font->base.extents.ascent = face->ascender / scale; - scaled_font->base.extents.descent = - face->descender / scale; - scaled_font->base.extents.height = face->height / scale; - scaled_font->base.extents.max_x_advance = face->max_advance_width / scale; + fs_metrics.ascent = face->ascender / scale; + fs_metrics.descent = - face->descender / scale; + fs_metrics.height = face->height / scale; + fs_metrics.max_x_advance = face->max_advance_width / scale; } /* FIXME: this doesn't do vertical layout atm. */ - scaled_font->base.extents.max_y_advance = 0.0; - + fs_metrics.max_y_advance = 0.0; + _cairo_scaled_font_set_metrics (&scaled_font->base, &fs_metrics); + return &scaled_font->base; }