[lasem] svg_view: don't store matrix in pattern data stack.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [lasem] svg_view: don't store matrix in pattern data stack.
- Date: Sat, 28 Aug 2010 09:16:22 +0000 (UTC)
commit c8e7970b2a384a54ca3b34955c39e80c53c87c33
Author: Emmanuel Pacaud <emmanuel gnome org>
Date: Sat Aug 28 11:15:54 2010 +0200
svg_view: don't store matrix in pattern data stack.
src/lsmsvgview.c | 60 ++++++++++++++++++++++++-----------------------------
1 files changed, 27 insertions(+), 33 deletions(-)
---
diff --git a/src/lsmsvgview.c b/src/lsmsvgview.c
index 307eb8f..2da728f 100644
--- a/src/lsmsvgview.c
+++ b/src/lsmsvgview.c
@@ -58,7 +58,6 @@ struct _LsmSvgViewPatternData {
cairo_t *old_cairo;
cairo_pattern_t *pattern;
- cairo_matrix_t matrix;
LsmBox extents;
@@ -96,8 +95,6 @@ _start_pattern (LsmSvgView *view, const LsmBox *extents, double opacity)
view->pattern_data->opacity = opacity;
view->dom_view.cairo = NULL;
-
- cairo_matrix_init_identity (&view->pattern_data->matrix);
}
static void
@@ -197,21 +194,14 @@ void
lsm_svg_view_set_gradient_properties (LsmSvgView *view,
LsmSvgSpreadMethod method,
LsmSvgPatternUnits units,
- const LsmSvgMatrix *matrix)
+ const LsmSvgMatrix *gradient_matrix)
{
+ cairo_matrix_t matrix;
+
g_return_if_fail (LSM_IS_SVG_VIEW (view));
g_return_if_fail (view->pattern_data != NULL);
g_return_if_fail (view->pattern_data->pattern != NULL);
- if (matrix != NULL) {
- cairo_matrix_init (&view->pattern_data->matrix,
- matrix->a, matrix->b,
- matrix->c, matrix->d,
- matrix->e, matrix->f);
- cairo_matrix_invert (&view->pattern_data->matrix);
- } else
- cairo_matrix_init_identity (&view->pattern_data->matrix);
-
switch (method) {
case LSM_SVG_SPREAD_METHOD_REFLECT:
cairo_pattern_set_extend (view->pattern_data->pattern, CAIRO_EXTEND_REFLECT);
@@ -223,13 +213,18 @@ lsm_svg_view_set_gradient_properties (LsmSvgView *view,
cairo_pattern_set_extend (view->pattern_data->pattern, CAIRO_EXTEND_PAD);
}
+ if (gradient_matrix != NULL) {
+ cairo_matrix_init (&matrix,
+ gradient_matrix->a, gradient_matrix->b,
+ gradient_matrix->c, gradient_matrix->d,
+ gradient_matrix->e, gradient_matrix->f);
+ cairo_matrix_invert (&matrix);
+ } else
+ cairo_matrix_init_identity (&matrix);
+
if (units == LSM_SVG_PATTERN_UNITS_OBJECT_BOUNDING_BOX &&
view->pattern_data->extents.width > 0.0 &&
view->pattern_data->extents.height > 0.0) {
- cairo_matrix_t matrix;
-
- matrix = view->pattern_data->matrix;
-
cairo_matrix_scale (&matrix,
1.0 / view->pattern_data->extents.width,
1.0 / view->pattern_data->extents.height);
@@ -237,20 +232,21 @@ lsm_svg_view_set_gradient_properties (LsmSvgView *view,
-view->pattern_data->extents.x,
-view->pattern_data->extents.y);
- cairo_pattern_set_matrix (view->pattern_data->pattern, &matrix);
- } else
- cairo_pattern_set_matrix (view->pattern_data->pattern, &view->pattern_data->matrix);
+ }
+
+ cairo_pattern_set_matrix (view->pattern_data->pattern, &matrix);
}
gboolean
lsm_svg_view_create_surface_pattern (LsmSvgView *view,
const LsmBox *viewport,
LsmSvgPatternUnits units,
- const LsmSvgMatrix *matrix,
+ const LsmSvgMatrix *pattern_matrix,
LsmSvgViewSurfaceType surface_type)
{
cairo_surface_t *surface;
cairo_pattern_t *pattern;
+ cairo_matrix_t matrix;
double x1, y1, x2, y2;
double device_width, device_height;
double x_scale, y_scale;
@@ -315,19 +311,19 @@ lsm_svg_view_create_surface_pattern (LsmSvgView *view,
_set_pattern (view, pattern);
- if (matrix != NULL) {
- cairo_matrix_init (&view->pattern_data->matrix,
- matrix->a, matrix->b,
- matrix->c, matrix->d,
- matrix->e + viewport->x, matrix->f + viewport->y);
- cairo_matrix_scale (&view->pattern_data->matrix, 1.0 / x_scale, 1.0 / y_scale);
- cairo_matrix_invert (&view->pattern_data->matrix);
+ if (pattern_matrix != NULL) {
+ cairo_matrix_init (&matrix,
+ pattern_matrix->a, pattern_matrix->b,
+ pattern_matrix->c, pattern_matrix->d,
+ pattern_matrix->e + viewport->x, pattern_matrix->f + viewport->y);
+ cairo_matrix_scale (&matrix, 1.0 / x_scale, 1.0 / y_scale);
+ cairo_matrix_invert (&matrix);
} else {
- cairo_matrix_init_translate (&view->pattern_data->matrix, -viewport->x, -viewport->y);
- cairo_matrix_scale (&view->pattern_data->matrix, 1.0 / x_scale, 1.0 / y_scale);
+ cairo_matrix_init_translate (&matrix, -viewport->x, -viewport->y);
+ cairo_matrix_scale (&matrix, 1.0 / x_scale, 1.0 / y_scale);
}
- cairo_pattern_set_matrix (view->pattern_data->pattern, &view->pattern_data->matrix);
+ cairo_pattern_set_matrix (view->pattern_data->pattern, &matrix);
cairo_pattern_set_extend (view->pattern_data->pattern, CAIRO_EXTEND_REPEAT);
return TRUE;
@@ -1821,8 +1817,6 @@ lsm_svg_view_pop_mask (LsmSvgView *view)
}
}
- cairo_pattern_set_matrix (view->pattern_data->pattern,
- &view->pattern_data->matrix);
cairo_pattern_set_extend (view->pattern_data->pattern, CAIRO_EXTEND_NONE);
#if 0
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]