aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/edje/src/examples/edje-signals-messages.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/edje/src/examples/edje-signals-messages.c')
-rw-r--r--libraries/edje/src/examples/edje-signals-messages.c230
1 files changed, 230 insertions, 0 deletions
diff --git a/libraries/edje/src/examples/edje-signals-messages.c b/libraries/edje/src/examples/edje-signals-messages.c
new file mode 100644
index 0000000..2345738
--- /dev/null
+++ b/libraries/edje/src/examples/edje-signals-messages.c
@@ -0,0 +1,230 @@
1/**
2 * Simple Edje example illustrating the Edje signals and messages
3 *
4 * You'll need at least one Evas engine built for it (excluding the
5 * buffer one). See stdout/stderr for output.
6 *
7 * @verbatim
8 * gcc -o edje-signals-messages edje-signals-messages.c `pkg-config --libs --cflags evas ecore ecore-evas edje`
9 * @endverbatim
10 */
11
12#ifdef HAVE_CONFIG_H
13#include "config.h"
14#else
15#define PACKAGE_EXAMPLES_DIR "."
16#define __UNUSED__
17#endif
18
19#include <Ecore.h>
20#include <Ecore_Evas.h>
21#include <Edje.h>
22#include <stdio.h>
23
24#define WIDTH (300)
25#define HEIGHT (300)
26
27#define MSG_COLOR 1
28#define MSG_TEXT 2
29
30static const char *border_img_path = PACKAGE_EXAMPLES_DIR "/red.png";
31static const char *edje_file_path = \
32 PACKAGE_EXAMPLES_DIR "/signals-messages.edj";
33
34static Ecore_Evas *ee;
35static Evas_Object *edje_obj;
36static Eina_Bool right_rect_show = EINA_TRUE;
37
38static const char *commands = \
39 "commands are:\n"
40 "\tt - toggle right rectangle's visibility\n"
41 "\th - print help\n";
42
43static void
44_on_keydown(void *data __UNUSED__,
45 Evas *evas __UNUSED__,
46 Evas_Object *o __UNUSED__,
47 void *einfo)
48{
49 Evas_Event_Key_Down *ev = einfo;
50
51 if (strcmp(ev->keyname, "h") == 0) /* print help */
52 {
53 fprintf(stdout, commands);
54 return;
55 }
56
57 if (strcmp(ev->keyname, "t") == 0) /* toggle right rectangle's visibility */
58 {
59 char buf[1024];
60
61 right_rect_show = !right_rect_show;
62 snprintf(buf, sizeof(buf), "part_right,%s",
63 right_rect_show ? "show" : "hide");
64
65 printf("emitting %s\n", buf);
66
67 edje_object_signal_emit(edje_obj, buf, "");
68
69 return;
70 }
71}
72
73static void
74_on_delete(Ecore_Evas *ee __UNUSED__)
75{
76 ecore_main_loop_quit();
77}
78
79/* print signals coming from theme */
80static void
81_sig_print(const char *emission,
82 const char *source)
83{
84 fprintf(stdout, "Signal %s coming from part %s!\n", emission, source);
85}
86
87static void
88_mouse_wheel_cb(void *data __UNUSED__,
89 Evas_Object *obj __UNUSED__,
90 const char *emission,
91 const char *source)
92{
93 _sig_print(emission, source);
94}
95
96/* mouse over signals */
97static void
98_mouse_over_cb(void *data __UNUSED__,
99 Evas_Object *obj __UNUSED__,
100 const char *emission,
101 const char *source)
102{
103 int i;
104
105 _sig_print(emission, source);
106
107 Edje_Message_Int_Set *msg = malloc(sizeof(*msg) + 3 * sizeof(int));
108 msg->count = 4;
109 for (i = 0; i < 4; i++)
110 msg->val[i] = rand() % 256;
111
112 edje_object_message_send(edje_obj, EDJE_MESSAGE_INT_SET, MSG_COLOR, msg);
113
114 free(msg);
115}
116
117/* print out received message string */
118static void
119_message_handle(void *data __UNUSED__,
120 Evas_Object *obj __UNUSED__,
121 Edje_Message_Type type,
122 int id,
123 void *msg)
124{
125 Edje_Message_String *m;
126
127 if (type != EDJE_MESSAGE_STRING) return;
128 if (id != MSG_TEXT) return;
129
130 m = msg;
131
132 fprintf(stdout, "String message received: %s\n", m->str);
133}
134
135int
136main(void)
137{
138 Evas_Object *border, *bg;
139 Evas *evas;
140
141 srand(time(NULL));
142
143 if (!ecore_evas_init())
144 return EXIT_FAILURE;
145
146 if (!edje_init())
147 return EXIT_FAILURE;
148
149 /* this will give you a window with an Evas canvas under the first
150 * engine available */
151 ee = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, NULL);
152 if (!ee)
153 goto error;
154
155 ecore_evas_callback_delete_request_set(ee, _on_delete);
156 ecore_evas_title_set(ee, "Edje Basics Example");
157 ecore_evas_show(ee);
158
159 evas = ecore_evas_get(ee);
160
161 bg = evas_object_rectangle_add(evas);
162 evas_object_color_set(bg, 255, 255, 255, 255); /* white bg */
163 evas_object_move(bg, 0, 0); /* at canvas' origin */
164 evas_object_resize(bg, WIDTH, HEIGHT); /* covers full canvas */
165 evas_object_show(bg);
166 ecore_evas_object_associate(ee, bg, ECORE_EVAS_OBJECT_ASSOCIATE_BASE);
167
168 evas_object_focus_set(bg, EINA_TRUE);
169 evas_object_event_callback_add(
170 bg, EVAS_CALLBACK_KEY_DOWN, _on_keydown, NULL);
171
172 edje_obj = edje_object_add(evas);
173
174 if (!edje_object_file_set(edje_obj, edje_file_path, "example_group"))
175 {
176 int err = edje_object_load_error_get(edje_obj);
177 const char *errmsg = edje_load_error_str(err);
178 fprintf(stderr, "Could not load 'example_group' from "
179 "signals-messages.edj: %s\n", errmsg);
180
181 evas_object_del(edje_obj);
182 goto error_edj;
183 }
184
185 edje_object_signal_callback_add(edje_obj, "mouse,wheel,*", "part_left",
186 _mouse_wheel_cb, NULL);
187
188 edje_object_signal_callback_add(edje_obj, "mouse,over", "part_right",
189 _mouse_over_cb, NULL);
190
191 edje_object_message_handler_set(edje_obj, _message_handle, NULL);
192
193 evas_object_move(edje_obj, 20, 20);
194 evas_object_resize(edje_obj, WIDTH - 40, HEIGHT - 40);
195 evas_object_show(edje_obj);
196
197 /* this is a border around the Edje object above, here just to
198 * emphasize its geometry */
199 border = evas_object_image_filled_add(evas);
200 evas_object_image_file_set(border, border_img_path, NULL);
201 evas_object_image_border_set(border, 2, 2, 2, 2);
202 evas_object_image_border_center_fill_set(border, EVAS_BORDER_FILL_NONE);
203
204 evas_object_resize(border, WIDTH - 40 + 4, HEIGHT - 40 + 4);
205 evas_object_move(border, 20 - 2, 20 - 2);
206 evas_object_repeat_events_set(border, EINA_TRUE);
207 evas_object_show(border);
208
209 fprintf(stdout, commands);
210 ecore_main_loop_begin();
211
212 ecore_evas_free(ee);
213 ecore_evas_shutdown();
214 edje_shutdown();
215 return 0;
216
217error:
218 fprintf(stderr, "You got to have at least one Evas engine built"
219 " and linked up to ecore-evas for this example to run"
220 " properly.\n");
221 ecore_evas_shutdown();
222 return -1;
223
224error_edj:
225 fprintf(stderr, "Failed to load signals-messages.edj!\n");
226
227 ecore_evas_shutdown();
228 return -2;
229}
230