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