annotate examples/svg2code_ex/main.c @ 776:77b561bb7929

Implement new algorithm to calculate the origin of the SVG elemnts so that we can implement object resize without changing the position of the object. However, the image does not work here since it does not use the transformation of the group.
author wycc
date Mon, 30 Aug 2010 08:56:44 +0800
parents f9d507a3e1d9
children 71489039406b
rev   line source
117
Thinker K.F. Li <thinker@branda.to>
parents: 110
diff changeset
1 /*! \file
110
Thinker K.F. Li <thinker@branda.to>
parents: 108
diff changeset
2 *
Thinker K.F. Li <thinker@branda.to>
parents: 108
diff changeset
3 * svg2code_ex is an example that show programmers how to create a
Thinker K.F. Li <thinker@branda.to>
parents: 108
diff changeset
4 * menu with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents: 108
diff changeset
5 *
Thinker K.F. Li <thinker@branda.to>
parents: 108
diff changeset
6 */
78
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
7 #include <stdio.h>
186
530bb7728546 Move header files to $(top_srcdir)/include/ and prefixed with 'mb_'.
Thinker K.F. Li <thinker@branda.to>
parents: 130
diff changeset
8 #include <mb.h>
78
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
9 #include "svg2code_ex.h"
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
10
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
11 typedef struct _ex_rt ex_rt_t;
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
12 struct _ex_rt {
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
13 X_MB_runtime_t *rt;
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
14 svg2code_ex_t *code;
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
15 };
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
16
198
f9d507a3e1d9 Add event observer which listen to one event type only.
wycc@wycc-desktop
parents: 192
diff changeset
17 #define COORD_SHOW(group) coord_show(group);rdman_coord_changed(X_MB_rdman(ex_rt->rt), group)
f9d507a3e1d9 Add event observer which listen to one event type only.
wycc@wycc-desktop
parents: 192
diff changeset
18 #define COORD_HIDE(group) coord_hide(group);rdman_coord_changed(X_MB_rdman(ex_rt->rt), group)
f9d507a3e1d9 Add event observer which listen to one event type only.
wycc@wycc-desktop
parents: 192
diff changeset
19
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
20 static void file_button_handler(event_t *evt, void *arg) {
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
21 ex_rt_t *ex_rt = (ex_rt_t *)arg;
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
22
198
f9d507a3e1d9 Add event observer which listen to one event type only.
wycc@wycc-desktop
parents: 192
diff changeset
23 COORD_SHOW(ex_rt->code->file_menu);
f9d507a3e1d9 Add event observer which listen to one event type only.
wycc@wycc-desktop
parents: 192
diff changeset
24 /* Update changed part to UI. */
f9d507a3e1d9 Add event observer which listen to one event type only.
wycc@wycc-desktop
parents: 192
diff changeset
25 rdman_redraw_changed(X_MB_rdman(ex_rt->rt));
84
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
26 }
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
27
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
28 static void file_menu_handler(event_t *evt, void *arg) {
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
29 ex_rt_t *ex_rt = (ex_rt_t *)arg;
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
30
198
f9d507a3e1d9 Add event observer which listen to one event type only.
wycc@wycc-desktop
parents: 192
diff changeset
31 COORD_HIDE(ex_rt->code->file_menu);
f9d507a3e1d9 Add event observer which listen to one event type only.
wycc@wycc-desktop
parents: 192
diff changeset
32 /* Update changed part to UI. */
f9d507a3e1d9 Add event observer which listen to one event type only.
wycc@wycc-desktop
parents: 192
diff changeset
33 rdman_redraw_changed(X_MB_rdman(ex_rt->rt));
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
34 }
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
35
78
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
36 int main(int argc, char * const argv[]) {
122
17e97e92b76e Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents: 117
diff changeset
37 X_MB_runtime_t *rt;
17e97e92b76e Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents: 117
diff changeset
38 redraw_man_t *rdman;
78
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
39 svg2code_ex_t *svg2code;
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
40 subject_t *subject;
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
41 ex_rt_t ex_rt;
78
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
42
108
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
43 /*
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
44 * Initialize a runtime with XLib as backend.
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
45 */
122
17e97e92b76e Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents: 117
diff changeset
46 rt = X_MB_new(":0.0", 800, 600);
78
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
47
108
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
48 /*
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
49 * Instantiate objects from a SVG file.
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
50 */
122
17e97e92b76e Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents: 117
diff changeset
51 rdman = X_MB_rdman(rt);
130
3a4d6179e6a9 change mb_c_source.m4 and mb_c_header.m4 to specify parent for SVG object
Thinker K.F. Li <thinker@branda.to>
parents: 122
diff changeset
52 svg2code = svg2code_ex_new(rdman, rdman->root_coord);
78
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
53
108
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
54 /*
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
55 * Register observers to subjects of events for objects.
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
56 */
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
57 subject = coord_get_mouse_event(svg2code->file_button);
122
17e97e92b76e Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents: 117
diff changeset
58 ex_rt.rt = rt;
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
59 ex_rt.code = svg2code;
198
f9d507a3e1d9 Add event observer which listen to one event type only.
wycc@wycc-desktop
parents: 192
diff changeset
60 subject_add_event_observer(subject, EVT_MOUSE_BUT_PRESS, file_button_handler, &ex_rt);
84
42698de1f653 Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents: 83
diff changeset
61 subject = coord_get_mouse_event(svg2code->file_menu);
198
f9d507a3e1d9 Add event observer which listen to one event type only.
wycc@wycc-desktop
parents: 192
diff changeset
62 subject_add_event_observer(subject, EVT_MOUSE_BUT_PRESS, file_menu_handler, &ex_rt);
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
63
108
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
64 /*
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
65 * Start handle connections, includes one to X server.
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
66 * User start to interact with the application.
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
67 */
122
17e97e92b76e Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents: 117
diff changeset
68 X_MB_handle_connection(rt);
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
69
108
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
70 /*
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
71 * Clean
565b55508c8d More dox
Thinker K.F. Li <thinker@branda.to>
parents: 84
diff changeset
72 */
83
ea758bb3bbe2 example
Thinker K.F. Li <thinker@branda.to>
parents: 79
diff changeset
73 svg2code_ex_free(svg2code);
122
17e97e92b76e Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents: 117
diff changeset
74 X_MB_free(rt);
78
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
75
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
76 return 0;
3645e29e4986 Add runtime for Xlib.
Thinker K.F. Li <thinker@branda.to>
parents:
diff changeset
77 }