[lasem] svg_view: fix crash when rendering bug614018.svg.



commit 47454e53237ca49c40b4c1b03f0ba603f434ccaf
Author: Emmanuel Pacaud <emmanuel gnome org>
Date:   Wed Aug 11 22:47:54 2010 +0200

    svg_view: fix crash when rendering bug614018.svg.

 src/lsmsvgmaskelement.c     |   15 ++-
 src/lsmsvgpatternelement.c  |   17 ++-
 src/lsmsvgview.c            |   13 +-
 src/lsmsvgview.h            |    4 +-
 test/svg/misc/bug614018.png |  Bin 0 -> 25331 bytes
 test/svg/misc/bug614018.svg |  355 +++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 385 insertions(+), 19 deletions(-)
---
diff --git a/src/lsmsvgmaskelement.c b/src/lsmsvgmaskelement.c
index fe2ba84..6b50de9 100644
--- a/src/lsmsvgmaskelement.c
+++ b/src/lsmsvgmaskelement.c
@@ -92,14 +92,19 @@ lsm_svg_mask_element_render (LsmSvgElement *self, LsmSvgView *view)
 		return;
 	}
 
+	if (!lsm_svg_view_create_surface_pattern (view, &viewport,
+						  mask->units.value,
+						  mask->content_units.value, NULL,
+						  LSM_SVG_VIEW_SURFACE_TYPE_IMAGE)) {
+		lsm_debug ("render", "[LsmSvgMaskElement::render] Intermediate surface creation failed");
+		lsm_svg_view_pop_style (view);
+		lsm_svg_style_unref (style);
+		return;
+	}
+
 	lsm_debug ("render", "[LsmSvgMaskElement::render] Create mask x = %g, y = %g, w = %g, h = %g",
 		   viewport.x, viewport.y, viewport.width, viewport.height);
 
-	lsm_svg_view_create_surface_pattern (view, &viewport,
-					     mask->units.value,
-					     mask->content_units.value, NULL,
-					     LSM_SVG_VIEW_SURFACE_TYPE_IMAGE);
-
 	is_object_bounding_box = (mask->content_units.value == LSM_SVG_PATTERN_UNITS_OBJECT_BOUNDING_BOX);
 
 	if (is_object_bounding_box) {
diff --git a/src/lsmsvgpatternelement.c b/src/lsmsvgpatternelement.c
index c473148..8c17e34 100644
--- a/src/lsmsvgpatternelement.c
+++ b/src/lsmsvgpatternelement.c
@@ -96,15 +96,20 @@ lsm_svg_pattern_element_render (LsmSvgElement *self, LsmSvgView *view)
 		return;
 	}
 
+	if (!lsm_svg_view_create_surface_pattern (view, &image_box,
+						  pattern->units.value,
+						  pattern->content_units.value,
+						  &pattern->transform.matrix,
+						  LSM_SVG_VIEW_SURFACE_TYPE_AUTO)) {
+		lsm_debug ("render", "[LsmSvgPatternElement::render] Intermediate surface creation failed");
+		lsm_svg_view_pop_style (view);
+		lsm_svg_style_unref (style);
+		return;
+	}
+
 	lsm_debug ("render", "[LsmSvgPatternElement::render] Create pattern x = %g, y = %g, w = %g, h = %g",
 		   viewport.x, viewport.y, viewport.width, viewport.height);
 
-	lsm_svg_view_create_surface_pattern (view, &image_box,
-					     pattern->units.value,
-					     pattern->content_units.value,
-					     &pattern->transform.matrix,
-					     LSM_SVG_VIEW_SURFACE_TYPE_AUTO);
-
 	is_object_bounding_box = (pattern->content_units.value == LSM_SVG_PATTERN_UNITS_OBJECT_BOUNDING_BOX);
 
 	if (is_object_bounding_box) {
diff --git a/src/lsmsvgview.c b/src/lsmsvgview.c
index 15b40b3..4508f6e 100644
--- a/src/lsmsvgview.c
+++ b/src/lsmsvgview.c
@@ -213,7 +213,7 @@ lsm_svg_view_set_gradient_properties (LsmSvgView *view,
 		cairo_matrix_init_identity (&view->pattern_data->matrix);
 }
 
-void
+gboolean
 lsm_svg_view_create_surface_pattern (LsmSvgView *view,
 				     const LsmBox *viewport,
 				     LsmSvgPatternUnits units,
@@ -225,10 +225,10 @@ lsm_svg_view_create_surface_pattern (LsmSvgView *view,
 	cairo_pattern_t *pattern;
 	double width, height, x, y;
 
-	g_return_if_fail (LSM_IS_SVG_VIEW (view));
-	g_return_if_fail (viewport != NULL);
-	g_return_if_fail (view->pattern_data != NULL);
-	g_return_if_fail (view->dom_view.cairo == NULL);
+	g_return_val_if_fail (LSM_IS_SVG_VIEW (view), FALSE);
+	g_return_val_if_fail (viewport != NULL, FALSE);
+	g_return_val_if_fail (view->pattern_data != NULL, FALSE);
+	g_return_val_if_fail (view->dom_view.cairo == NULL, FALSE);
 
 	x = viewport->x;
 	y = viewport->y;
@@ -239,7 +239,7 @@ lsm_svg_view_create_surface_pattern (LsmSvgView *view,
 		   width, height, x, y);
 
 	if (height < 1 || width < 1)
-		return;
+		return FALSE;
 
 	switch (surface_type) {
 		case LSM_SVG_VIEW_SURFACE_TYPE_AUTO:
@@ -273,6 +273,7 @@ lsm_svg_view_create_surface_pattern (LsmSvgView *view,
 	} else
 		cairo_matrix_init_translate (&view->pattern_data->matrix, -x, -y);
 
+	return TRUE;
 }
 
 typedef struct {
diff --git a/src/lsmsvgview.h b/src/lsmsvgview.h
index 9d6a1fe..62227c4 100644
--- a/src/lsmsvgview.h
+++ b/src/lsmsvgview.h
@@ -101,11 +101,11 @@ void 		lsm_svg_view_set_gradient_properties	(LsmSvgView *view,
 							 LsmSvgPatternUnits units,
 							 const LsmSvgMatrix *matrix);
 
-void		lsm_svg_view_create_surface_pattern	(LsmSvgView *view, const LsmBox *viewport,
+gboolean	lsm_svg_view_create_surface_pattern	(LsmSvgView *view, const LsmBox *viewport,
 							 LsmSvgPatternUnits units,
 							 LsmSvgPatternUnits content_units,
 							 const LsmSvgMatrix *matrix,
-							 LsmSvgViewSurfaceType surface_type);
+							 LsmSvgViewSurfaceType surface_type) G_GNUC_WARN_UNUSED_RESULT;
 
 void 		lsm_svg_view_show_rectangle 	(LsmSvgView *view, double x, double y,
 						                   double width, double height,
diff --git a/test/svg/misc/bug614018.png b/test/svg/misc/bug614018.png
new file mode 100644
index 0000000..d4d205f
Binary files /dev/null and b/test/svg/misc/bug614018.png differ
diff --git a/test/svg/misc/bug614018.svg b/test/svg/misc/bug614018.svg
new file mode 100644
index 0000000..912e622
--- /dev/null
+++ b/test/svg/misc/bug614018.svg
@@ -0,0 +1,355 @@
+<?xml version="1.0" standalone="no"?>
+
+<!--
+    Copyright (C) 2008 Papavasileiou Dimitris                             
+                                                                     
+    This program is free software: you can redistribute it and/or modify 
+    it under the terms of the GNU General Public License as published by 
+    the Free Software Foundation, either version 3 of the License, or    
+    (at your option) any later version.                                  
+    
+    This program is distributed in the hope that it will be useful,      
+    but WITHOUT ANY WARRANTY; without even the implied warranty of       
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        
+    GNU General Public License for more details.                         
+                                                                     
+    You should have received a copy of the GNU General Public License    
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
+	    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+
+  <svg viewBox="-1.620000 -0.910000 3.240000 1.820000"
+       xmlns="http://www.w3.org/2000/svg"; version="1.1" 
+       xmlns:xlink="http://www.w3.org/1999/xlink";>
+
+    <defs>
+      <pattern id="stripe" patternUnits="userSpaceOnUse"
+               x="-0.0286"
+	       y="-0.0286"
+	       width="0.0572"
+	       height="0.0572"
+	       viewBox="0 0 1 1" >
+            
+        <rect x="0" y="0.3" width="1" height="0.4" fill="white" />
+      </pattern> 
+
+      <g id="side">
+	<path d="M -1.378
+	           -0.75
+		 L -0.06
+	           -0.75
+		 L -0.07
+	           -0.71
+		 L -1.36
+	           -0.71
+		 z"
+	      stroke="rgb(50, 50, 50)" stroke-width="0.003"
+  	      fill="rgb(110, 139,  61)" />
+      </g>
+
+      <g id="top">
+	<path d="M -1.46
+	           -0.668
+		 L -1.42
+	           -0.648
+		 L -1.42
+	           0.648
+		 L -1.46
+	           0.668
+		 z"
+	      stroke="rgb(50, 50, 50)" stroke-width="0.003"
+  	      fill="rgb(110, 139,  61)" />
+      </g>
+      
+      <g id="pocket">
+	<path fill="rgb(30, 30, 30)" stroke="black" stroke-width="0.003"
+	      d="M -0.06 0 A 0.065 0.07 0 1 1 0.06 0"/>
+	<path fill="black" d="M -0.06 0 A 0.06 0.08 0 0 1 0.06 0"/>
+	<path fill="black" d="M -0.061 0 A 0.10 0.10 0 0 0 0.061 0"/>
+      </g>
+
+      <g id="diamond" transform="translate(0 -0.0141) rotate(45)">
+	<rect width="0.02" height="0.02" fill="white" stroke="none"/>
+      </g>
+
+      <g id="ball">
+	<circle r="0.0286" stroke-width="0.003"/>
+      </g>
+    </defs>
+
+    <g id="table">
+      <!-- The frame. -->
+
+      <rect x="-1.61"
+	    y="-0.9"
+	    rx="0.09"
+            width="3.22"
+	    height="1.8"
+	    fill="rgb(40, 30, 17)" 
+  	    stroke="rgb(110, 90, 60)" stroke-width="0.015"/>
+
+      <!-- The cloth. -->
+
+      <rect x="-1.46"
+	    y="-0.75"
+	    width="2.92"
+            height="1.5"
+	    stroke="rgb(84, 139, 84)" stroke-width="0.008"
+	    fill="rgb(107, 142, 35)" />
+
+      <!-- The cushions. -->
+
+      <use xlink:href="#side"/>
+      <use transform="scale(-1, 1)" xlink:href="#side"/>
+      <use transform="scale(-1, -1)" xlink:href="#side"/>
+      <use transform="scale(1, -1)" xlink:href="#side"/>
+      <use xlink:href="#top"/>
+      <use transform="scale(-1, 1)" xlink:href="#top"/>
+
+      <!-- The spots. -->
+
+      <circle cx="-0.71" cy="0"
+	      r="0.01"
+	      stroke="none"
+	      fill="rgb(50, 70, 50)"/>
+
+      <circle cx="0.71" cy="0"
+	      r="0.01"
+	      stroke="none"
+	      fill="rgb(50, 70, 50)"/>
+
+      <!-- The pockets. -->
+
+      <use transform="translate(0 -0.75)"
+	   xlink:href="#pocket"/>
+
+      <use transform="translate(0 0.75)
+		      rotate(180)" xlink:href="#pocket"/>
+
+      <use transform="translate(1.42
+		                -0.71)
+		      rotate(45)" xlink:href="#pocket"/>
+
+      <use transform="translate(1.42
+		                0.71)
+		      rotate(135)" xlink:href="#pocket"/>
+
+      <use transform="translate(-1.42
+		                -0.71)
+		      rotate(-45)" xlink:href="#pocket"/>
+
+      <use transform="translate(-1.42
+		                0.71)
+		      rotate(-135)" xlink:href="#pocket"/>
+
+      	 <use x="-1.065000" y="0.820000" xlink:href="#diamond"/>
+	 <use x="-1.065000" y="-0.820000" xlink:href="#diamond"/>
+	              	 <use x="-0.710000" y="0.820000" xlink:href="#diamond"/>
+	 <use x="-0.710000" y="-0.820000" xlink:href="#diamond"/>
+	              	 <use x="-0.355000" y="0.820000" xlink:href="#diamond"/>
+	 <use x="-0.355000" y="-0.820000" xlink:href="#diamond"/>
+	              	 <use x="0.355000" y="0.820000" xlink:href="#diamond"/>
+	 <use x="0.355000" y="-0.820000" xlink:href="#diamond"/>
+	              	 <use x="0.710000" y="0.820000" xlink:href="#diamond"/>
+	 <use x="0.710000" y="-0.820000" xlink:href="#diamond"/>
+	              	 <use x="1.065000" y="0.820000" xlink:href="#diamond"/>
+	 <use x="1.065000" y="-0.820000" xlink:href="#diamond"/>
+	              	 <use x="1.530000" y="-0.355000" xlink:href="#diamond"/>
+	 <use x="-1.530000" y="-0.355000" xlink:href="#diamond"/>
+	           	 <use x="1.530000" y="0.000000" xlink:href="#diamond"/>
+	 <use x="-1.530000" y="0.000000" xlink:href="#diamond"/>
+	           	 <use x="1.530000" y="0.355000" xlink:href="#diamond"/>
+	 <use x="-1.530000" y="0.355000" xlink:href="#diamond"/>
+	            	 <circle cx="0.058979" cy="-0.067725" r="0.01" stroke="none"
+		 fill="rgb(255, 255, 255)"/> 	 <circle cx="0.058979" cy="-0.067725" r="0.028600" fill="none"
+		 stroke="rgb(255, 255, 255)" stroke-width="0.003"/>
+         <path fill="none" stroke="rgb(255, 255, 255)" stroke-width="0.005"
+	       d="M 0.059 -0.068
+		  L 0.059 -0.068
+		  L 0.059 -0.068"/>
+
+ 	 <circle cx="0.831806" cy="-0.142947" r="0.01" stroke="none"
+		 fill="rgb(255, 124, 0)"/> 	 <circle cx="0.831806" cy="-0.142947" r="0.028600" fill="none"
+		 stroke="rgb(255, 124, 0)" stroke-width="0.003"/>
+         <path fill="none" stroke="rgb(255, 124, 0)" stroke-width="0.005"
+	       d="M 0.832 -0.143
+		  L 0.832 -0.143
+		  L 0.832 -0.143"/>
+
+ 	 <circle cx="-1.183625" cy="-0.190027" r="0.01" stroke="none"
+		 fill="rgb(6, 22, 157)"/> 	 <circle cx="-1.183625" cy="-0.190027" r="0.028600" fill="none"
+		 stroke="rgb(6, 22, 157)" stroke-width="0.003"/>
+         <path fill="none" stroke="rgb(6, 22, 157)" stroke-width="0.005"
+	       d="M -1.184 -0.190
+		  L -1.184 -0.190
+		  L -1.184 -0.190"/>
+
+ 	 <circle cx="0.108950" cy="0.107066" r="0.01" stroke="none"
+		 fill="rgb(255, 0, 0)"/> 	 <circle cx="0.108950" cy="0.107066" r="0.028600" fill="none"
+		 stroke="rgb(255, 0, 0)" stroke-width="0.003"/>
+         <path fill="none" stroke="rgb(255, 0, 0)" stroke-width="0.005"
+	       d="M 0.109 0.107
+		  L 0.109 0.107
+		  L 0.109 0.107"/>
+
+ 	 <circle cx="-0.527822" cy="-0.266026" r="0.01" stroke="none"
+		 fill="rgb(0, 0, 34)"/> 	 <circle cx="-0.527822" cy="-0.266026" r="0.028600" fill="none"
+		 stroke="rgb(0, 0, 34)" stroke-width="0.003"/>
+         <path fill="none" stroke="rgb(0, 0, 34)" stroke-width="0.005"
+	       d="M -0.528 -0.266
+		  L -0.528 -0.266
+		  L -0.528 -0.266"/>
+
+ 	 <circle cx="0.201618" cy="0.140210" r="0.01" stroke="none"
+		 fill="rgb(255, 48, 0)"/> 	 <circle cx="0.201618" cy="0.140210" r="0.028600" fill="none"
+		 stroke="rgb(255, 48, 0)" stroke-width="0.003"/>
+         <path fill="none" stroke="rgb(255, 48, 0)" stroke-width="0.005"
+	       d="M 0.202 0.140
+		  L 0.202 0.140
+		  L 0.202 0.140"/>
+
+ 	 <circle cx="-1.366404" cy="-0.445032" r="0.01" stroke="none"
+		 fill="rgb(0, 61, 9)"/> 	 <circle cx="-1.366404" cy="-0.445032" r="0.028600" fill="none"
+		 stroke="rgb(0, 61, 9)" stroke-width="0.003"/>
+         <path fill="none" stroke="rgb(0, 61, 9)" stroke-width="0.005"
+	       d="M -1.366 -0.445
+		  L -1.366 -0.445
+		  L -1.366 -0.445"/>
+
+ 	 <circle cx="-0.472246" cy="0.681671" r="0.01" stroke="none"
+		 fill="rgb(54, 0, 0)"/> 	 <circle cx="-0.472246" cy="0.681671" r="0.028600" fill="none"
+		 stroke="rgb(54, 0, 0)" stroke-width="0.003"/>
+         <path fill="none" stroke="rgb(54, 0, 0)" stroke-width="0.005"
+	       d="M -0.472 0.682
+		  L -0.472 0.682
+		  L -0.472 0.682"/>
+
+ 	 <circle cx="-1.211370" cy="-0.477456" r="0.01" stroke="none"
+		 fill="rgb(0, 0, 0)"/> 	 <circle cx="-1.211370" cy="-0.477456" r="0.028600" fill="none"
+		 stroke="rgb(0, 0, 0)" stroke-width="0.003"/>
+         <path fill="none" stroke="rgb(0, 0, 0)" stroke-width="0.005"
+	       d="M -1.211 -0.477
+		  L -1.211 -0.477
+		  L -1.211 -0.478"/>
+
+ 	 <circle cx="-1.420060" cy="-0.675371" r="0.01" stroke="none"
+		 fill="rgb(255, 124, 0)"/> 	 <circle cx="-1.420060" cy="-0.675371" r="0.028600" fill="none"
+		 stroke="rgb(255, 124, 0)" stroke-width="0.003"/>
+         <path fill="none" stroke="rgb(255, 124, 0)" stroke-width="0.005"
+	       d="M -1.420 -0.675
+		  L -1.420 -0.675
+		  L -1.420 -0.676"/>
+
+ 	 <circle cx="-1.130869" cy="-0.287088" r="0.01" stroke="none"
+		 fill="rgb(6, 22, 157)"/> 	 <circle cx="-1.130869" cy="-0.287088" r="0.028600" fill="none"
+		 stroke="rgb(6, 22, 157)" stroke-width="0.003"/>
+         <path fill="none" stroke="rgb(6, 22, 157)" stroke-width="0.005"
+	       d="M -1.131 -0.287
+		  L -1.131 -0.287
+		  L -1.131 -0.287"/>
+
+ 	 <circle cx="1.442492" cy="0.400212" r="0.01" stroke="none"
+		 fill="rgb(255, 0, 0)"/> 	 <circle cx="1.442492" cy="0.400212" r="0.028600" fill="none"
+		 stroke="rgb(255, 0, 0)" stroke-width="0.003"/>
+         <path fill="none" stroke="rgb(255, 0, 0)" stroke-width="0.005"
+	       d="M 1.442 0.400
+		  L 1.442 0.400
+		  L 1.442 0.400"/>
+
+ 	 <circle cx="0.874867" cy="0.588390" r="0.01" stroke="none"
+		 fill="rgb(0, 0, 34)"/> 	 <circle cx="0.874867" cy="0.588390" r="0.028600" fill="none"
+		 stroke="rgb(0, 0, 34)" stroke-width="0.003"/>
+         <path fill="none" stroke="rgb(0, 0, 34)" stroke-width="0.005"
+	       d="M 0.875 0.588
+		  L 0.875 0.588
+		  L 0.875 0.588"/>
+
+ 	 <circle cx="1.273824" cy="0.159112" r="0.01" stroke="none"
+		 fill="rgb(255, 48, 0)"/> 	 <circle cx="1.273824" cy="0.159112" r="0.028600" fill="none"
+		 stroke="rgb(255, 48, 0)" stroke-width="0.003"/>
+         <path fill="none" stroke="rgb(255, 48, 0)" stroke-width="0.005"
+	       d="M 1.274 0.159
+		  L 1.274 0.159
+		  L 1.274 0.159"/>
+
+ 	 <circle cx="0.341479" cy="-0.601032" r="0.01" stroke="none"
+		 fill="rgb(0, 61, 9)"/> 	 <circle cx="0.341479" cy="-0.601032" r="0.028600" fill="none"
+		 stroke="rgb(0, 61, 9)" stroke-width="0.003"/>
+         <path fill="none" stroke="rgb(0, 61, 9)" stroke-width="0.005"
+	       d="M 0.341 -0.601
+		  L 0.341 -0.601
+		  L 0.342 -0.601"/>
+
+ 	 <circle cx="0.214091" cy="-0.519331" r="0.01" stroke="none"
+		 fill="rgb(54, 0, 0)"/> 	 <circle cx="0.214091" cy="-0.519331" r="0.028600" fill="none"
+		 stroke="rgb(54, 0, 0)" stroke-width="0.003"/>
+         <path fill="none" stroke="rgb(54, 0, 0)" stroke-width="0.005"
+	       d="M 0.214 -0.519
+		  L 0.214 -0.519
+		  L 0.214 -0.519"/>
+
+ 
+         <g transform="translate(0.058888, -0.067729)"> 
+	   <use fill="rgb(255, 255, 255)" stroke="rgb(10, 10, 10)"
+                xlink:href="#ball"/>         </g> 
+         <g transform="translate(0.831894, -0.142925)"> 
+	   <use fill="rgb(255, 124, 0)" stroke="rgb(10, 10, 10)"
+                xlink:href="#ball"/>         </g> 
+         <g transform="translate(-1.183534, -0.190030)"> 
+	   <use fill="rgb(6, 22, 157)" stroke="rgb(10, 10, 10)"
+                xlink:href="#ball"/>         </g> 
+         <g transform="translate(0.109041, 0.107067)"> 
+	   <use fill="rgb(255, 0, 0)" stroke="rgb(10, 10, 10)"
+                xlink:href="#ball"/>         </g> 
+         <g transform="translate(-0.527764, -0.266095)"> 
+	   <use fill="rgb(0, 0, 34)" stroke="rgb(10, 10, 10)"
+                xlink:href="#ball"/>         </g> 
+         <g transform="translate(0.201682, 0.140275)"> 
+	   <use fill="rgb(255, 48, 0)" stroke="rgb(10, 10, 10)"
+                xlink:href="#ball"/>         </g> 
+         <g transform="translate(-1.366393, -0.445122)"> 
+	   <use fill="rgb(0, 61, 9)" stroke="rgb(10, 10, 10)"
+                xlink:href="#ball"/>         </g> 
+         <g transform="translate(-0.472162, 0.681705)"> 
+	   <use fill="rgb(54, 0, 0)" stroke="rgb(10, 10, 10)"
+                xlink:href="#ball"/>         </g> 
+         <g transform="translate(-1.211327, -0.477535)"> 
+	   <use fill="rgb(0, 0, 0)" stroke="rgb(10, 10, 10)"
+                xlink:href="#ball"/> 
+	   <use transform="rotate(30)"
+	        fill="url(#stripe)" xlink:href="#ball"/>         </g> 
+         <g transform="translate(-1.420173, -0.675545)"> 
+	   <use fill="rgb(255, 124, 0)" stroke="rgb(10, 10, 10)"
+                xlink:href="#ball"/> 
+	   <use transform="rotate(86)"
+	        fill="url(#stripe)" xlink:href="#ball"/>         </g> 
+         <g transform="translate(-1.130782, -0.287114)"> 
+	   <use fill="rgb(6, 22, 157)" stroke="rgb(10, 10, 10)"
+                xlink:href="#ball"/> 
+	   <use transform="rotate(137)"
+	        fill="url(#stripe)" xlink:href="#ball"/>         </g> 
+         <g transform="translate(1.442492, 0.400212)">         </g> 
+         <g transform="translate(0.874932, 0.588453)"> 
+	   <use fill="rgb(0, 0, 34)" stroke="rgb(10, 10, 10)"
+                xlink:href="#ball"/> 
+	   <use transform="rotate(140)"
+	        fill="url(#stripe)" xlink:href="#ball"/>         </g> 
+         <g transform="translate(1.273907, 0.159075)"> 
+	   <use fill="rgb(255, 48, 0)" stroke="rgb(10, 10, 10)"
+                xlink:href="#ball"/> 
+	   <use transform="rotate(1)"
+	        fill="url(#stripe)" xlink:href="#ball"/>         </g> 
+         <g transform="translate(0.341568, -0.601015)"> 
+	   <use fill="rgb(0, 61, 9)" stroke="rgb(10, 10, 10)"
+                xlink:href="#ball"/> 
+	   <use transform="rotate(104)"
+	        fill="url(#stripe)" xlink:href="#ball"/>         </g> 
+         <g transform="translate(0.214180, -0.519311)"> 
+	   <use fill="rgb(54, 0, 0)" stroke="rgb(10, 10, 10)"
+                xlink:href="#ball"/> 
+	   <use transform="rotate(133)"
+	        fill="url(#stripe)" xlink:href="#ball"/>         </g>
+  </g>
+</svg>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]