2 * Simple Edje example illustrating box functions.
4 * You'll need at least one Evas engine built for it (excluding the
5 * buffer one). See stdout/stderr for output.
8 * edje_cc box.edc && gcc -o edje-box edje-box.c `pkg-config --libs --cflags evas ecore ecore-evas edje`
19 #include <Ecore_Evas.h>
30 static const char commands[] = \
32 "\ti - prepend rectangle\n"
33 "\ta - append rectangle\n"
39 _on_destroy(Ecore_Evas *ee __UNUSED__)
41 ecore_main_loop_quit();
44 /* here just to keep our example's window size and background image's
45 * size in synchrony */
47 _on_canvas_resize(Ecore_Evas *ee)
50 Evas_Object *edje_obj;
54 bg = ecore_evas_data_get(ee, "background");
55 edje_obj = ecore_evas_data_get(ee, "edje_obj");
56 ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
57 evas_object_resize(bg, w, h);
58 evas_object_resize(edje_obj, w, h);
62 _on_rect_mouse_down(void *data, Evas *e, Evas_Object *o, void *event_info)
65 Evas_Event_Mouse_Down *ev;
66 Evas_Object *edje_obj;
68 ee = (Ecore_Evas *)data;
69 ev = (Evas_Event_Mouse_Down *)event_info;
70 edje_obj = ecore_evas_data_get(ee, "edje_obj");
74 printf("Removing rect %p under the mouse pointer.\n", o);
75 edje_object_part_box_remove(edje_obj, "example/box", o);
78 else if (ev->button == 3)
83 rect = evas_object_rectangle_add(e);
84 evas_object_color_set(rect, 0, 0, 255, 255);
85 evas_object_resize(rect, RECTW + 10, RECTH);
86 evas_object_show(rect);
88 printf("Inserting rect %p before the rectangle under the mouse pointer.\n", rect);
89 r = edje_object_part_box_insert_before(edje_obj, "example/box", rect, o);
91 printf("An error ocurred when appending rect %p to the box.\n", rect);
93 evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN, _on_rect_mouse_down, NULL);
98 _on_bg_key_down(void *data, Evas *e, Evas_Object *o __UNUSED__, void *event_info)
101 Evas_Event_Key_Down *ev;
102 Evas_Object *edje_obj;
106 ee = (Ecore_Evas *)data;
107 ev = (Evas_Event_Key_Down *)event_info;
108 edje_obj = ecore_evas_data_get(ee, "edje_obj");
110 if (!strcmp(ev->keyname, "h"))
112 fprintf(stdout, commands);
115 if (!strcmp(ev->keyname, "i"))
117 rect = evas_object_rectangle_add(e);
118 evas_object_color_set(rect, 0, 0, 128, 255);
119 evas_object_resize(rect, RECTW + 30, RECTH);
120 evas_object_show(rect);
122 printf("Inserting rect %p before the rectangle under the mouse pointer.\n", rect);
123 r = edje_object_part_box_insert_at(edje_obj, "example/box", rect, 0);
125 printf("An error ocurred when appending rect %p to the box.\n", rect);
127 evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN, _on_rect_mouse_down, NULL);
129 else if (!strcmp(ev->keyname, "a"))
131 rect = evas_object_rectangle_add(e);
132 evas_object_color_set(rect, 0, 128, 0, 255);
133 evas_object_resize(rect, RECTW, RECTH);
134 evas_object_show(rect);
136 printf("Inserting rect %p before the rectangle under the mouse pointer.\n", rect);
137 r = edje_object_part_box_append(edje_obj, "example/box", rect);
139 printf("An error ocurred when appending rect %p to the box.\n", rect);
141 evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN, _on_rect_mouse_down, NULL);
143 else if (!strcmp(ev->keyname, "c"))
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();
149 printf("unhandled key: %s\n", ev->keyname);
150 fprintf(stdout, commands);
155 main(int argc __UNUSED__, char *argv[])
157 char edje_file_path[PATH_MAX];
158 const char *edje_file = "box.edj";
162 Evas_Object *edje_obj;
166 if (!ecore_evas_init())
170 goto shutdown_ecore_evas;
172 pfx = eina_prefix_new(argv[0], main,
183 /* this will give you a window with an Evas canvas under the first
184 * engine available */
185 ee = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, NULL);
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");
193 evas = ecore_evas_get(ee);
195 bg = evas_object_rectangle_add(evas);
196 evas_object_color_set(bg, 255, 255, 255, 255);
197 evas_object_resize(bg, WIDTH, HEIGHT);
198 evas_object_focus_set(bg, EINA_TRUE);
199 evas_object_show(bg);
200 ecore_evas_data_set(ee, "background", bg);
202 evas_object_event_callback_add(bg, EVAS_CALLBACK_KEY_DOWN, _on_bg_key_down, ee);
204 edje_obj = edje_object_add(evas);
206 snprintf(edje_file_path, sizeof(edje_file_path),
207 "%s/examples/%s", eina_prefix_data_get(pfx), edje_file);
208 edje_object_file_set(edje_obj, edje_file_path, "example/group");
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);
214 for (i = 0; i < NRECTS; i++)
217 Eina_Bool r = EINA_FALSE;
218 int red = (i * 10) % 256;
219 rect = evas_object_rectangle_add(evas);
220 evas_object_color_set(rect, red, 0, 0, 255);
221 evas_object_resize(rect, RECTW, RECTH);
222 r = edje_object_part_box_append(edje_obj, "example/box", rect);
224 printf("An error ocurred when appending rect #%d to the box.\n", i);
225 evas_object_show(rect);
227 evas_object_event_callback_add(
228 rect, EVAS_CALLBACK_MOUSE_DOWN, _on_rect_mouse_down, ee);
231 fprintf(stdout, commands);
235 ecore_main_loop_begin();
237 eina_prefix_free(pfx);
239 ecore_evas_shutdown();
245 eina_prefix_free(pfx);
249 ecore_evas_shutdown();