1 #include <config.h>
2 #include <string.h>
3 #include <gtk/gtk.h>
4 #include <goocanvas.h>
5 
6 
7 static GooCanvasItem *ellipse1, *ellipse2, *rect1, *rect2, *rect3, *rect4;
8 
9 
10 static void
start_animation_clicked(GtkWidget * button,gpointer data)11 start_animation_clicked (GtkWidget *button, gpointer data)
12 {
13   /* Absolute. */
14   goo_canvas_item_set_simple_transform (ellipse1, 100, 100, 1, 0);
15   goo_canvas_item_animate (ellipse1, 500, 100, 2, 720, TRUE, 2000, 40,
16 			   GOO_CANVAS_ANIMATE_BOUNCE);
17 
18   goo_canvas_item_set_simple_transform (rect1, 100, 200, 1, 0);
19   goo_canvas_item_animate (rect1, 100, 200, 1, 350, TRUE, 40 * 36, 40,
20 			   GOO_CANVAS_ANIMATE_RESTART);
21 
22   goo_canvas_item_set_simple_transform (rect3, 200, 200, 1, 0);
23   goo_canvas_item_animate (rect3, 200, 200, 3, 0, TRUE, 400, 40,
24 			   GOO_CANVAS_ANIMATE_BOUNCE);
25 
26   /* Relative. */
27   goo_canvas_item_set_simple_transform (ellipse2, 100, 400, 1, 0);
28   goo_canvas_item_animate (ellipse2, 400, 0, 2, 720, FALSE, 2000, 40,
29 			   GOO_CANVAS_ANIMATE_BOUNCE);
30 
31   goo_canvas_item_set_simple_transform (rect2, 100, 500, 1, 0);
32   goo_canvas_item_animate (rect2, 0, 0, 1, 350, FALSE, 40 * 36, 40,
33 			   GOO_CANVAS_ANIMATE_RESTART);
34 
35   goo_canvas_item_set_simple_transform (rect4, 200, 500, 1, 0);
36   goo_canvas_item_animate (rect4, 0, 0, 3, 0, FALSE, 400, 40,
37 			   GOO_CANVAS_ANIMATE_BOUNCE);
38 }
39 
40 
41 static void
stop_animation_clicked(GtkWidget * button,gpointer data)42 stop_animation_clicked (GtkWidget *button, gpointer data)
43 {
44   goo_canvas_item_stop_animation (ellipse1);
45   goo_canvas_item_stop_animation (ellipse2);
46   goo_canvas_item_stop_animation (rect1);
47   goo_canvas_item_stop_animation (rect2);
48   goo_canvas_item_stop_animation (rect3);
49   goo_canvas_item_stop_animation (rect4);
50 }
51 
52 
53 static void
on_animation_finished(GooCanvasItem * item,gboolean stopped,gpointer data)54 on_animation_finished (GooCanvasItem *item,
55 		       gboolean       stopped,
56 		       gpointer       data)
57 {
58   g_print ("Animation finished stopped: %i\n", stopped);
59 
60 #if 0
61   /* Test starting another animation. */
62   goo_canvas_item_animate (ellipse1, 500, 200, 2, 720, TRUE, 2000, 40,
63 			   GOO_CANVAS_ANIMATE_BOUNCE);
64 #endif
65 }
66 
67 
68 static void
setup_canvas(GtkWidget * canvas)69 setup_canvas (GtkWidget *canvas)
70 {
71   GooCanvasItem *root;
72 
73   root = goo_canvas_get_root_item (GOO_CANVAS (canvas));
74 
75   /* Absolute. */
76   ellipse1 = goo_canvas_ellipse_new (root, 0, 0, 25, 15,
77 				     "fill-color", "blue",
78 				     NULL);
79   goo_canvas_item_translate (ellipse1, 100, 100);
80   g_signal_connect (ellipse1, "animation_finished",
81 		    G_CALLBACK (on_animation_finished), NULL);
82 
83   rect1 = goo_canvas_rect_new (root, -10, -10, 20, 20,
84 			       "fill-color", "blue",
85 			       NULL);
86   goo_canvas_item_translate (rect1, 100, 200);
87 
88   rect3 = goo_canvas_rect_new (root, -10, -10, 20, 20,
89 			       "fill-color", "blue",
90 			       NULL);
91   goo_canvas_item_translate (rect3, 200, 200);
92 
93   /* Relative. */
94   ellipse2 = goo_canvas_ellipse_new (root, 0, 0, 25, 15,
95 				     "fill-color", "red",
96 				     NULL);
97   goo_canvas_item_translate (ellipse2, 100, 400);
98 
99   rect2 = goo_canvas_rect_new (root, -10, -10, 20, 20,
100 			       "fill-color", "red",
101 			       NULL);
102   goo_canvas_item_translate (rect2, 100, 500);
103 
104   rect4 = goo_canvas_rect_new (root, -10, -10, 20, 20,
105 			       "fill-color", "red",
106 			       NULL);
107   goo_canvas_item_translate (rect4, 200, 500);
108 }
109 
110 
111 GtkWidget *
create_animation_page(void)112 create_animation_page (void)
113 {
114   GtkWidget *vbox, *hbox, *w, *scrolled_win, *canvas;
115 
116   vbox = gtk_vbox_new (FALSE, 4);
117   gtk_container_set_border_width (GTK_CONTAINER (vbox), 4);
118   gtk_widget_show (vbox);
119 
120   hbox = gtk_hbox_new (FALSE, 4);
121   gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
122   gtk_widget_show (hbox);
123 
124   w = gtk_button_new_with_label("Start Animation");
125   gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0);
126   gtk_widget_show (w);
127   g_signal_connect (w, "clicked", G_CALLBACK (start_animation_clicked),
128 		    NULL);
129 
130   w = gtk_button_new_with_label("Stop Animation");
131   gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0);
132   gtk_widget_show (w);
133   g_signal_connect (w, "clicked", G_CALLBACK (stop_animation_clicked),
134 		    NULL);
135 
136 
137   scrolled_win = gtk_scrolled_window_new (NULL, NULL);
138   gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_win),
139 				       GTK_SHADOW_IN);
140   gtk_widget_show (scrolled_win);
141   gtk_container_add (GTK_CONTAINER (vbox), scrolled_win);
142 
143   canvas = goo_canvas_new ();
144   gtk_widget_set_size_request (canvas, 600, 450);
145   goo_canvas_set_bounds (GOO_CANVAS (canvas), 0, 0, 1000, 1000);
146   gtk_widget_show (canvas);
147   gtk_container_add (GTK_CONTAINER (scrolled_win), canvas);
148 
149   setup_canvas (canvas);
150 
151   return vbox;
152 }
153