aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/edje/src/examples/edje-box.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--libraries/edje/src/examples/edje-box.c185
1 files changed, 123 insertions, 62 deletions
diff --git a/libraries/edje/src/examples/edje-box.c b/libraries/edje/src/examples/edje-box.c
index 7fffba3..2b0cbda 100644
--- a/libraries/edje/src/examples/edje-box.c
+++ b/libraries/edje/src/examples/edje-box.c
@@ -10,10 +10,9 @@
10 */ 10 */
11 11
12#ifdef HAVE_CONFIG_H 12#ifdef HAVE_CONFIG_H
13#include "config.h" 13# include "config.h"
14#else 14#else
15#define PACKAGE_EXAMPLES_DIR "." 15# define __UNUSED__
16#define __UNUSED__
17#endif 16#endif
18 17
19#include <Ecore.h> 18#include <Ecore.h>
@@ -28,13 +27,13 @@
28 27
29#define NRECTS 20 28#define NRECTS 20
30 29
31static const char *edje_file_path = PACKAGE_EXAMPLES_DIR "/box.edj"; 30static const char commands[] = \
32 31 "commands are:\n"
33struct _App { 32 "\ti - prepend rectangle\n"
34 Ecore_Evas *ee; 33 "\ta - append rectangle\n"
35 Evas_Object *edje; 34 "\tc - remove\n"
36 Evas_Object *bg; 35 "\tEsc - exit\n"
37}; 36 "\th - print help\n";
38 37
39static void 38static void
40_on_destroy(Ecore_Evas *ee __UNUSED__) 39_on_destroy(Ecore_Evas *ee __UNUSED__)
@@ -45,32 +44,41 @@ _on_destroy(Ecore_Evas *ee __UNUSED__)
45/* here just to keep our example's window size and background image's 44/* here just to keep our example's window size and background image's
46 * size in synchrony */ 45 * size in synchrony */
47static void 46static void
48_canvas_resize_cb(Ecore_Evas *ee) 47_on_canvas_resize(Ecore_Evas *ee)
49{ 48{
50 int w, h; 49 Evas_Object *bg;
51 struct _App *app = ecore_evas_data_get(ee, "app"); 50 Evas_Object *edje_obj;
51 int w;
52 int h;
52 53
54 bg = ecore_evas_data_get(ee, "background");
55 edje_obj = ecore_evas_data_get(ee, "edje_obj");
53 ecore_evas_geometry_get(ee, NULL, NULL, &w, &h); 56 ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
54 evas_object_resize(app->bg, w, h); 57 evas_object_resize(bg, w, h);
55 evas_object_resize(app->edje, w, h); 58 evas_object_resize(edje_obj, w, h);
56} 59}
57 60
58static void 61static void
59_rect_mouse_down(void *data, Evas *e, Evas_Object *o, void *event_info) 62_on_rect_mouse_down(void *data, Evas *e, Evas_Object *o, void *event_info)
60{ 63{
61 struct _App *app = data; 64 Ecore_Evas *ee;
62 Evas_Event_Mouse_Down *ev = event_info; 65 Evas_Event_Mouse_Down *ev;
66 Evas_Object *edje_obj;
67
68 ee = (Ecore_Evas *)data;
69 ev = (Evas_Event_Mouse_Down *)event_info;
70 edje_obj = ecore_evas_data_get(ee, "edje_obj");
63 71
64 if (ev->button == 1) 72 if (ev->button == 1)
65 { 73 {
66 printf("Removing rect %p under the mouse pointer.\n", o); 74 printf("Removing rect %p under the mouse pointer.\n", o);
67 edje_object_part_box_remove(app->edje, "example/box", o); 75 edje_object_part_box_remove(edje_obj, "example/box", o);
68 evas_object_del(o); 76 evas_object_del(o);
69 } 77 }
70 else if (ev->button == 3) 78 else if (ev->button == 3)
71 { 79 {
72 Evas_Object *rect; 80 Evas_Object *rect;
73 Eina_Bool r; 81 Eina_Bool r;
74 82
75 rect = evas_object_rectangle_add(e); 83 rect = evas_object_rectangle_add(e);
76 evas_object_color_set(rect, 0, 0, 255, 255); 84 evas_object_color_set(rect, 0, 0, 255, 255);
@@ -78,23 +86,32 @@ _rect_mouse_down(void *data, Evas *e, Evas_Object *o, void *event_info)
78 evas_object_show(rect); 86 evas_object_show(rect);
79 87
80 printf("Inserting rect %p before the rectangle under the mouse pointer.\n", rect); 88 printf("Inserting rect %p before the rectangle under the mouse pointer.\n", rect);
81 r = edje_object_part_box_insert_before(app->edje, "example/box", rect, o); 89 r = edje_object_part_box_insert_before(edje_obj, "example/box", rect, o);
82 if (!r) 90 if (!r)
83 printf("An error ocurred when appending rect %p to the box.\n", rect); 91 printf("An error ocurred when appending rect %p to the box.\n", rect);
84 92
85 evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN, _rect_mouse_down, app); 93 evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN, _on_rect_mouse_down, NULL);
86 } 94 }
87} 95}
88 96
89static void 97static void
90_bg_key_down(void *data, Evas *e, Evas_Object *o __UNUSED__, void *event_info) 98_on_bg_key_down(void *data, Evas *e, Evas_Object *o __UNUSED__, void *event_info)
91{ 99{
92 struct _App *app = data; 100 Ecore_Evas *ee;
93 Evas_Event_Key_Down *ev = event_info; 101 Evas_Event_Key_Down *ev;
94 Evas_Object *rect; 102 Evas_Object *edje_obj;
95 Eina_Bool r; 103 Evas_Object *rect;
104 Eina_Bool r;
96 105
106 ee = (Ecore_Evas *)data;
107 ev = (Evas_Event_Key_Down *)event_info;
108 edje_obj = ecore_evas_data_get(ee, "edje_obj");
97 109
110 if (!strcmp(ev->keyname, "h"))
111 {
112 fprintf(stdout, commands);
113 return;
114 }
98 if (!strcmp(ev->keyname, "i")) 115 if (!strcmp(ev->keyname, "i"))
99 { 116 {
100 rect = evas_object_rectangle_add(e); 117 rect = evas_object_rectangle_add(e);
@@ -103,11 +120,11 @@ _bg_key_down(void *data, Evas *e, Evas_Object *o __UNUSED__, void *event_info)
103 evas_object_show(rect); 120 evas_object_show(rect);
104 121
105 printf("Inserting rect %p before the rectangle under the mouse pointer.\n", rect); 122 printf("Inserting rect %p before the rectangle under the mouse pointer.\n", rect);
106 r = edje_object_part_box_insert_at(app->edje, "example/box", rect, 0); 123 r = edje_object_part_box_insert_at(edje_obj, "example/box", rect, 0);
107 if (!r) 124 if (!r)
108 printf("An error ocurred when appending rect %p to the box.\n", rect); 125 printf("An error ocurred when appending rect %p to the box.\n", rect);
109 126
110 evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN, _rect_mouse_down, app); 127 evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN, _on_rect_mouse_down, NULL);
111 } 128 }
112 else if (!strcmp(ev->keyname, "a")) 129 else if (!strcmp(ev->keyname, "a"))
113 { 130 {
@@ -117,53 +134,82 @@ _bg_key_down(void *data, Evas *e, Evas_Object *o __UNUSED__, void *event_info)
117 evas_object_show(rect); 134 evas_object_show(rect);
118 135
119 printf("Inserting rect %p before the rectangle under the mouse pointer.\n", rect); 136 printf("Inserting rect %p before the rectangle under the mouse pointer.\n", rect);
120 r = edje_object_part_box_append(app->edje, "example/box", rect); 137 r = edje_object_part_box_append(edje_obj, "example/box", rect);
121 if (!r) 138 if (!r)
122 printf("An error ocurred when appending rect %p to the box.\n", rect); 139 printf("An error ocurred when appending rect %p to the box.\n", rect);
123 140
124 evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN, _rect_mouse_down, app); 141 evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN, _on_rect_mouse_down, NULL);
125 } 142 }
126 else if (!strcmp(ev->keyname, "c")) 143 else if (!strcmp(ev->keyname, "c"))
127 edje_object_part_box_remove_all(app->edje, "example/box", EINA_TRUE); 144 edje_object_part_box_remove_all(edje_obj, "example/box", EINA_TRUE);
145 else if (!strcmp(ev->keyname, "Escape"))
146 ecore_main_loop_quit();
147 else
148 {
149 printf("unhandled key: %s\n", ev->keyname);
150 fprintf(stdout, commands);
151 }
128} 152}
129 153
130int 154int
131main(void) 155main(int argc __UNUSED__, char *argv[])
132{ 156{
133 Evas *evas; 157 char edje_file_path[PATH_MAX];
134 struct _App app; 158 const char *edje_file = "box.edj";
135 int i; 159 Ecore_Evas *ee;
136 160 Evas *evas;
137 ecore_evas_init(); 161 Evas_Object *bg;
138 edje_init(); 162 Evas_Object *edje_obj;
163 Eina_Prefix *pfx;
164 int i;
165
166 if (!ecore_evas_init())
167 return EXIT_FAILURE;
168
169 if (!edje_init())
170 goto shutdown_ecore_evas;
171
172 pfx = eina_prefix_new(argv[0], main,
173 "EDJE_EXAMPLES",
174 "edje/examples",
175 edje_file,
176 PACKAGE_BIN_DIR,
177 PACKAGE_LIB_DIR,
178 PACKAGE_DATA_DIR,
179 PACKAGE_DATA_DIR);
180 if (!pfx)
181 goto shutdown_edje;
139 182
140 /* this will give you a window with an Evas canvas under the first 183 /* this will give you a window with an Evas canvas under the first
141 * engine available */ 184 * engine available */
142 app.ee = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, NULL); 185 ee = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, NULL);
143 186 if (!ee)
144 ecore_evas_callback_destroy_set(app.ee, _on_destroy); 187 goto free_prefix;
145 ecore_evas_callback_resize_set(app.ee, _canvas_resize_cb);
146 ecore_evas_title_set(app.ee, "Edje Box Example");
147 ecore_evas_show(app.ee);
148 188
149 ecore_evas_data_set(app.ee, "app", &app); 189 ecore_evas_callback_destroy_set(ee, _on_destroy);
190 ecore_evas_callback_resize_set(ee, _on_canvas_resize);
191 ecore_evas_title_set(ee, "Edje Box Example");
150 192
151 evas = ecore_evas_get(app.ee); 193 evas = ecore_evas_get(ee);
152 194
153 app.bg = evas_object_rectangle_add(evas); 195 bg = evas_object_rectangle_add(evas);
154 evas_object_color_set(app.bg, 255, 255, 255, 255); 196 evas_object_color_set(bg, 255, 255, 255, 255);
155 evas_object_resize(app.bg, WIDTH, HEIGHT); 197 evas_object_resize(bg, WIDTH, HEIGHT);
156 evas_object_focus_set(app.bg, EINA_TRUE); 198 evas_object_focus_set(bg, EINA_TRUE);
157 evas_object_show(app.bg); 199 evas_object_show(bg);
200 ecore_evas_data_set(ee, "background", bg);
158 201
159 evas_object_event_callback_add(app.bg, EVAS_CALLBACK_KEY_DOWN, _bg_key_down, &app); 202 evas_object_event_callback_add(bg, EVAS_CALLBACK_KEY_DOWN, _on_bg_key_down, ee);
160 203
161 app.edje = edje_object_add(evas); 204 edje_obj = edje_object_add(evas);
162 205
163 edje_object_file_set(app.edje, edje_file_path, "example/group"); 206 snprintf(edje_file_path, sizeof(edje_file_path),
164 evas_object_move(app.edje, 0, 0); 207 "%s/examples/%s", eina_prefix_data_get(pfx), edje_file);
165 evas_object_resize(app.edje, WIDTH, HEIGHT); 208 edje_object_file_set(edje_obj, edje_file_path, "example/group");
166 evas_object_show(app.edje); 209 evas_object_move(edje_obj, 0, 0);
210 evas_object_resize(edje_obj, WIDTH, HEIGHT);
211 evas_object_show(edje_obj);
212 ecore_evas_data_set(ee, "edje_obj", edje_obj);
167 213
168 for (i = 0; i < NRECTS; i++) 214 for (i = 0; i < NRECTS; i++)
169 { 215 {
@@ -173,19 +219,34 @@ main(void)
173 rect = evas_object_rectangle_add(evas); 219 rect = evas_object_rectangle_add(evas);
174 evas_object_color_set(rect, red, 0, 0, 255); 220 evas_object_color_set(rect, red, 0, 0, 255);
175 evas_object_resize(rect, RECTW, RECTH); 221 evas_object_resize(rect, RECTW, RECTH);
176 r = edje_object_part_box_append(app.edje, "example/box", rect); 222 r = edje_object_part_box_append(edje_obj, "example/box", rect);
177 if (!r) 223 if (!r)
178 printf("An error ocurred when appending rect #%d to the box.\n", i); 224 printf("An error ocurred when appending rect #%d to the box.\n", i);
179 evas_object_show(rect); 225 evas_object_show(rect);
180 226
181 evas_object_event_callback_add( 227 evas_object_event_callback_add(
182 rect, EVAS_CALLBACK_MOUSE_DOWN, _rect_mouse_down, &app); 228 rect, EVAS_CALLBACK_MOUSE_DOWN, _on_rect_mouse_down, ee);
183 } 229 }
184 230
231 fprintf(stdout, commands);
232
233 ecore_evas_show(ee);
234
185 ecore_main_loop_begin(); 235 ecore_main_loop_begin();
186 236
187 ecore_evas_free(app.ee); 237 eina_prefix_free(pfx);
238 ecore_evas_free(ee);
188 ecore_evas_shutdown(); 239 ecore_evas_shutdown();
189 edje_shutdown(); 240 edje_shutdown();
190 return 0; 241
242 return EXIT_SUCCESS;
243
244 free_prefix:
245 eina_prefix_free(pfx);
246 shutdown_edje:
247 edje_shutdown();
248 shutdown_ecore_evas:
249 ecore_evas_shutdown();
250
251 return EXIT_FAILURE;
191} 252}