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