summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDom Lachowicz <doml@src.gnome.org>2004-05-15 13:04:46 +0000
committerDom Lachowicz <doml@src.gnome.org>2004-05-15 13:04:46 +0000
commit71ae961e7cf8a3152973d2e305c09b4eac79a802 (patch)
tree3537e9ace3d7e88de7aa7add7a90b4185a873596
parentb4223e3d71d75aff09a5ada8b95c8cd37974fdfd (diff)
downloadlibrsvg-71ae961e7cf8a3152973d2e305c09b4eac79a802.tar.gz
backport a bugfix
-rw-r--r--ChangeLog4
-rw-r--r--rsvg.c39
2 files changed, 34 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 247f968d..ba8fef35 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2004-05-15 Caleb Moore <c.moore@student.unsw.edu.au>
+
+ * rsvg.c: fixed a bug causing defaults to be messed up when a radial gradient is based on a linear gradient and vice versa
+
== librsvg 2.6.5 ==
* configure.in: Bump version
diff --git a/rsvg.c b/rsvg.c
index 2544db14..4a18fed9 100644
--- a/rsvg.c
+++ b/rsvg.c
@@ -502,10 +502,20 @@ rsvg_start_linear_gradient (RsvgHandle *ctx, const xmlChar **atts)
/* gradient inherits parent/cloned information unless it's explicity gotten */
grad->obj_bbox = (cloned && !got_bbox) ? grad->obj_bbox : obj_bbox;
- grad->x1 = (cloned && !got_x1) ? grad->x1 : x1;
- grad->y1 = (cloned && !got_y1) ? grad->y1 : y1;
- grad->x2 = (cloned && !got_x2) ? grad->x2 : x2;
- grad->y2 = (cloned && !got_y2) ? grad->y1 : y2;
+ if (!shallow_cloned)
+ {
+ grad->x1 = (cloned && !got_x1) ? grad->x1 : x1;
+ grad->y1 = (cloned && !got_y1) ? grad->y1 : y1;
+ grad->x2 = (cloned && !got_x2) ? grad->x2 : x2;
+ grad->y2 = (cloned && !got_y2) ? grad->y1 : y2;
+ }
+ else
+ {
+ grad->x1 = x1;
+ grad->y1 = y1;
+ grad->x2 = x2;
+ grad->y2 = y2;
+ }
grad->spread = (cloned && !got_spread) ? grad->spread : spread;
}
@@ -646,11 +656,22 @@ rsvg_start_radial_gradient (RsvgHandle *ctx, const xmlChar **atts, const char *
/* gradient inherits parent/cloned information unless it's explicity gotten */
grad->obj_bbox = (cloned && !got_bbox) ? grad->obj_bbox : obj_bbox;
- grad->cx = (cloned && !got_cx) ? grad->cx : cx;
- grad->cy = (cloned && !got_cy) ? grad->cy : cy;
- grad->r = (cloned && !got_r) ? grad->r : r;
- grad->fx = (cloned && !got_fx) ? grad->fx : fx;
- grad->fy = (cloned && !got_fy) ? grad->fy : fy;
+ if (!shallow_cloned)
+ {
+ grad->cx = (cloned && !got_cx) ? grad->cx : cx;
+ grad->cy = (cloned && !got_cy) ? grad->cy : cy;
+ grad->r = (cloned && !got_r) ? grad->r : r;
+ grad->fx = (cloned && !got_fx) ? grad->fx : fx;
+ grad->fy = (cloned && !got_fy) ? grad->fy : fy;
+ }
+ else
+ {
+ grad->cx = cx;
+ grad->cy = cy;
+ grad->r = r;
+ grad->fx = fx;
+ grad->fy = fy;
+ }
grad->spread = (cloned && !got_spread) ? grad->spread : spread;
}