summaryrefslogtreecommitdiff
path: root/src/cairo-win32-font.c
diff options
context:
space:
mode:
authorCarl Worth <cworth@cworth.org>2008-01-29 08:41:21 -0800
committerCarl Worth <cworth@cworth.org>2008-01-29 09:01:00 -0800
commite2bb36fe08546e6461fcbd40f5f3f81e5efc7686 (patch)
tree1b201450ff26420ff027074363f36fbdff213d64 /src/cairo-win32-font.c
parent849322235764f570a4a3a1217960d096d16165cf (diff)
wAdd proper error propagation to _cairo_matrix_compute_scale_factors
Before there was just an assert statement here that the determinant of the matrix was not infinite. That was bogus since a user-provided can end up here. So instead, do the correct error propagation of any CAIRO_STATUS_INVALID_MATRIX error as necessary. This eliminates the current failure of the invalid-matrix test case.
Diffstat (limited to 'src/cairo-win32-font.c')
-rw-r--r--src/cairo-win32-font.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/cairo-win32-font.c b/src/cairo-win32-font.c
index eb4d3b1e..34c27361 100644
--- a/src/cairo-win32-font.c
+++ b/src/cairo-win32-font.c
@@ -130,7 +130,7 @@ _cairo_win32_scaled_font_init_glyph_path (cairo_win32_scaled_font_t *scaled_font
#define NEARLY_ZERO(d) (fabs(d) < (1. / 65536.))
-static void
+static cairo_status_t
_compute_transform (cairo_win32_scaled_font_t *scaled_font,
cairo_matrix_t *sc)
{
@@ -175,9 +175,11 @@ _compute_transform (cairo_win32_scaled_font_t *scaled_font,
sc->xx, sc->yx, sc->xy, sc->yy, 0, 0);
if (!scaled_font->preserve_axes) {
- _cairo_matrix_compute_scale_factors (&scaled_font->logical_to_device,
- &scaled_font->x_scale, &scaled_font->y_scale,
- TRUE); /* XXX: Handle vertical text */
+ status = _cairo_matrix_compute_scale_factors (&scaled_font->logical_to_device,
+ &scaled_font->x_scale, &scaled_font->y_scale,
+ TRUE); /* XXX: Handle vertical text */
+ if (status)
+ return status;
scaled_font->logical_size = _cairo_lround (WIN32_FONT_LOGICAL_SCALE *
scaled_font->y_scale);
@@ -192,6 +194,8 @@ _compute_transform (cairo_win32_scaled_font_t *scaled_font,
status = cairo_matrix_invert (&scaled_font->device_to_logical);
if (status)
cairo_matrix_init_identity (&scaled_font->device_to_logical);
+
+ return CAIRO_STATUS_SUCCESS;
}
static cairo_bool_t
@@ -312,7 +316,9 @@ _win32_scaled_font_create (LOGFONTW *logfont,
f->delete_scaled_hfont = !f->scaled_hfont;
cairo_matrix_multiply (&scale, font_matrix, ctm);
- _compute_transform (f, &scale);
+ status = _compute_transform (f, &scale);
+ if (status)
+ goto FAIL;
status = _cairo_scaled_font_init (&f->base, font_face,
font_matrix, ctm, options,
@@ -872,9 +878,7 @@ _cairo_win32_scaled_font_set_metrics (cairo_win32_scaled_font_t *scaled_font)
}
}
- _cairo_scaled_font_set_metrics (&scaled_font->base, &extents);
-
- return CAIRO_STATUS_SUCCESS;
+ return _cairo_scaled_font_set_metrics (&scaled_font->base, &extents);
}
static cairo_status_t