2 * Simple Edje example illustrating the very basic functions of the
5 * You'll need at least one Evas engine built for it (excluding the
6 * buffer one). See stdout/stderr for output.
9 * gcc -o edje-basic edje-basic.c `pkg-config --libs --cflags evas ecore ecore-evas edje`
23 #include <Ecore_Evas.h>
29 static const char commands[] = \
31 "\ts - change Edje's global scaling factor\n"
32 "\tr - change center rectangle's scaling factor\n"
37 _on_keydown(void *data,
38 Evas *evas __UNUSED__,
39 Evas_Object *o __UNUSED__,
42 Evas_Event_Key_Down *ev;
43 Evas_Object *edje_obj;
45 ev = (Evas_Event_Key_Down *)einfo;
46 edje_obj = (Evas_Object *)data;
48 if (strcmp(ev->keyname, "h") == 0) /* print help */
50 fprintf(stdout, commands);
53 else if (strcmp(ev->keyname, "s") == 0) /* global scaling factor */
55 double scale = edje_scale_get();
57 printf("got scale %f\n", scale);
59 if (scale != 1.0) scale = 1.0;
62 edje_scale_set(scale);
64 fprintf(stdout, "Setting global scaling factor to %f.\n", scale);
68 else if (strcmp(ev->keyname, "r") == 0) /* individual scaling factor */
70 double scale = edje_object_scale_get(edje_obj);
72 printf("got scale %f\n", scale);
74 if (!scale) scale = 1.0;
75 else if (scale == 1.0) scale = 2.0;
78 edje_object_scale_set(edje_obj, scale);
80 fprintf(stdout, "Setting center rectangle's scaling factor to %f.\n",
85 else if (!strcmp(ev->keyname, "Escape"))
86 ecore_main_loop_quit();
89 printf("unhandled key: %s\n", ev->keyname);
90 fprintf(stdout, commands);
95 _on_delete(Ecore_Evas *ee __UNUSED__)
97 ecore_main_loop_quit();
101 main(int argc __UNUSED__, char *argv[])
103 char border_img_path[PATH_MAX];
104 char edje_file_path[PATH_MAX];
105 const char *edje_file = "basic.edj";
110 Evas_Object *edje_obj;
117 if (!ecore_evas_init())
121 goto shutdown_ecore_evas;
123 pfx = eina_prefix_new(argv[0], main,
134 /* this will give you a window with an Evas canvas under the first
135 * engine available */
136 ee = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, NULL);
140 ecore_evas_callback_delete_request_set(ee, _on_delete);
141 ecore_evas_title_set(ee, "Edje Basics Example");
143 evas = ecore_evas_get(ee);
145 bg = evas_object_rectangle_add(evas);
146 evas_object_color_set(bg, 255, 255, 255, 255); /* white bg */
147 evas_object_move(bg, 0, 0); /* at canvas' origin */
148 evas_object_resize(bg, WIDTH, HEIGHT); /* covers full canvas */
149 evas_object_show(bg);
150 ecore_evas_object_associate(ee, bg, ECORE_EVAS_OBJECT_ASSOCIATE_BASE);
152 evas_object_focus_set(bg, EINA_TRUE);
154 edje_obj = edje_object_add(evas);
156 snprintf(edje_file_path, sizeof(edje_file_path),
157 "%s/examples/%s", eina_prefix_data_get(pfx), edje_file);
158 printf("%s\n", edje_file_path);
159 /* exercising Edje loading error, on purpose */
160 if (!edje_object_file_set(edje_obj, edje_file_path, "unexistant_group"))
162 int err = edje_object_load_error_get(edje_obj);
163 const char *errmsg = edje_load_error_str(err);
164 fprintf(stderr, "Could not load 'unexistant_group' from basic.edj:"
168 if (!edje_object_file_set(edje_obj, edje_file_path, "example_group"))
170 int err = edje_object_load_error_get(edje_obj);
171 const char *errmsg = edje_load_error_str(err);
172 fprintf(stderr, "Could not load 'example_group' from basic.edj: %s\n",
175 evas_object_del(edje_obj);
179 fprintf(stdout, "Loaded Edje object bound to group 'example_group' from"
180 " file basic.edj with success!\n");
182 evas_object_move(edje_obj, 20, 20);
183 evas_object_resize(edje_obj, WIDTH - 40, HEIGHT - 40);
184 evas_object_show(edje_obj);
186 evas_object_event_callback_add(bg, EVAS_CALLBACK_KEY_DOWN, _on_keydown, edje_obj);
188 snprintf(border_img_path, sizeof(border_img_path),
189 "%s/edje/examples/red.png", eina_prefix_data_get(pfx));
191 /* this is a border around the Edje object above, here just to
192 * emphasize its geometry */
193 border = evas_object_image_filled_add(evas);
194 evas_object_image_file_set(border, border_img_path, NULL);
195 evas_object_image_border_set(border, 2, 2, 2, 2);
196 evas_object_image_border_center_fill_set(border, EVAS_BORDER_FILL_NONE);
198 evas_object_resize(border, WIDTH - 40 + 4, HEIGHT - 40 + 4);
199 evas_object_move(border, 20 - 2, 20 - 2);
200 evas_object_show(border);
202 fprintf(stdout, "'example_data' data field in group 'example_group' has "
203 "the value: %s\n", edje_object_data_get(edje_obj,
206 fprintf(stdout, "Testing if 'part_one' part exists: %s\n",
207 edje_object_part_exists(edje_obj, "part_one") ? "yes!" : "no");
209 edje_object_part_geometry_get(edje_obj, "part_one", &x, &y, &w, &h);
210 fprintf(stdout, "The geometry of that part inside the Edje object's area "
211 "is: x = %d, y = %d, w = %d, h = %d\n", x, y, w, h);
213 evas_object_color_get(edje_object_part_object_get(edje_obj, "part_one"),
215 fprintf(stdout, "That part's color components are: r = %d, g = %d, b = %d,"
216 " a = %d\n", x, y, w, h);
218 edje_object_size_max_get(edje_obj, &w, &h);
219 fprintf(stdout, "The Edje object's max. size is: %d, %d\n", w, h);
221 edje_object_size_min_get(edje_obj, &w, &h);
222 fprintf(stdout, "The Edje object's min. size is: %d, %d\n", w, h);
224 edje_object_size_min_calc(edje_obj, &w, &h);
225 fprintf(stdout, "The Edje object's min. size reported by min. size"
226 " calculation is: w = %d, h = %d\n", w, h);
228 edje_object_size_min_restricted_calc(edje_obj, &w, &h, 500, 500);
229 fprintf(stdout, "The Edje object's min. size reported by *restricted* "
230 "min. size calculation is: w = %d, h = %d\n", w, h);
232 edje_object_parts_extends_calc(edje_obj, &x, &y, &w, &h);
233 fprintf(stdout, "The Edje object's \"extended\" geometry is: x = %d, "
234 "y = %d, w = %d, h = %d\n", x, y, w, h);
236 fprintf(stdout, commands);
240 ecore_main_loop_begin();
242 eina_prefix_free(pfx);
244 ecore_evas_shutdown();
250 eina_prefix_free(pfx);
254 ecore_evas_shutdown();