diff src/X_main.c @ 19:cf6d65398619

More animation demo
author Thinker K.F. Li <thinker@branda.to>
date Sat, 02 Aug 2008 15:38:54 +0800
parents 0f3baa488a62
children 74d3d5dc9aaa
line wrap: on
line diff
--- a/src/X_main.c	Sat Aug 02 14:45:42 2008 +0800
+++ b/src/X_main.c	Sat Aug 02 15:38:54 2008 +0800
@@ -14,24 +14,35 @@
 
 void draw_path(cairo_t *cr, int w, int h) {
     redraw_man_t rdman;
-    shape_t *path;
-    coord_t *coord;
-    paint_t *fill;
+    shape_t *path1, *path2;
+    coord_t *coord1, *coord2;
+    paint_t *fill1, *fill2;
     int i;
 
     redraw_man_init(&rdman, cr);
-    coord = rdman.root_coord;
+    coord1 = rdman_coord_new(&rdman, rdman.root_coord);
+    coord2 = rdman_coord_new(&rdman, rdman.root_coord);
 
-    fill = paint_color_new(&rdman, 1, 1, 0);
-    path = sh_path_new("M 22,89.36218 C -34,-0.63782 39,-9.637817 82,12.36218 C 125,34.36218 142,136.36218 142,136.36218 C 100.66667,125.36218 74.26756,123.42795 22,89.36218 z ");
-    rdman_paint_fill(&rdman, fill, path);
-    coord->matrix[0] = 0.8;
-    coord->matrix[1] = 0;
-    coord->matrix[2] = 20;
-    coord->matrix[4] = 0.8;
-    coord->matrix[5] = 20;
-    rdman_coord_changed(&rdman, coord);
-    rdman_add_shape(&rdman, (shape_t *)path, coord);
+    fill1 = paint_color_new(&rdman, 1, 1, 0);
+    fill2 = paint_color_new(&rdman, 0, 1, 1);
+    path1 = sh_path_new("M 22,89.36218 C -34,-0.63782 39,-9.637817 82,12.36218 C 125,34.36218 142,136.36218 142,136.36218 C 100.66667,125.36218 74.26756,123.42795 22,89.36218 z ");
+    rdman_paint_fill(&rdman, fill1, path1);
+    coord1->matrix[0] = 0.8;
+    coord1->matrix[1] = 0;
+    coord1->matrix[2] = 20;
+    coord1->matrix[4] = 0.8;
+    coord1->matrix[5] = 20;
+    path2 = sh_path_new("M 22,89.36218 C -34,-0.63782 39,-9.637817 82,12.36218 C 125,34.36218 142,136.36218 142,136.36218 C 100.66667,125.36218 74.26756,123.42795 22,89.36218 z ");
+    rdman_paint_fill(&rdman, fill2, path2);
+    coord2->matrix[0] = -0.8;
+    coord2->matrix[1] = 0;
+    coord2->matrix[2] = 220;
+    coord2->matrix[4] = 0.8;
+    coord2->matrix[5] = 20;
+    rdman_coord_changed(&rdman, coord1);
+    rdman_coord_changed(&rdman, coord2);
+    rdman_add_shape(&rdman, (shape_t *)path1, coord1);
+    rdman_add_shape(&rdman, (shape_t *)path2, coord2);
 
     rdman_redraw_all(&rdman);
 
@@ -39,25 +50,35 @@
 
     for(i = 0; i < 50; i++) {
 	usleep(20000);
-	coord->matrix[2] += 1;
-	coord->matrix[5] += 1;
-	paint_color_set(fill, 1, 1, (i/25) & 0x1);
-	rdman_coord_changed(&rdman, coord);
+	coord1->matrix[2] += 1;
+	coord1->matrix[5] += 1;
+	coord2->matrix[2] -= 1;
+	coord2->matrix[5] += 1;
+	paint_color_set(fill1, 1, 1, (i/25) & 0x1);
+	paint_color_set(fill2, (i/25) & 0x1, 1, 1);
+	rdman_paint_changed(&rdman, fill1);
+	rdman_paint_changed(&rdman, fill2);
+	rdman_coord_changed(&rdman, coord1);
+	rdman_coord_changed(&rdman, coord2);
 	rdman_redraw_changed(&rdman);
 	XFlush(display);
     }
 
     for(i = 0; i < 5; i++) {
 	usleep(500000);
-	paint_color_set(fill, 1, i % 2, 0);
-	rdman_paint_changed(&rdman, fill);
+	paint_color_set(fill1, 1, i % 2, 0);
+	paint_color_set(fill2, 0, i % 2, 1);
+	rdman_paint_changed(&rdman, fill1);
+	rdman_paint_changed(&rdman, fill2);
 	rdman_redraw_changed(&rdman);
 	XFlush(display);
     }
 
-    fill->free(fill);
+    fill1->free(fill1);
+    fill2->free(fill2);
     redraw_man_destroy(&rdman);
-    sh_path_free(path);
+    sh_path_free(path1);
+    sh_path_free(path2);
 }
 
 void drawing(cairo_surface_t *surface, int w, int h) {