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