aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/ecore/src/examples/ecore_evas_ews_example.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/ecore/src/examples/ecore_evas_ews_example.c')
-rw-r--r--libraries/ecore/src/examples/ecore_evas_ews_example.c253
1 files changed, 253 insertions, 0 deletions
diff --git a/libraries/ecore/src/examples/ecore_evas_ews_example.c b/libraries/ecore/src/examples/ecore_evas_ews_example.c
new file mode 100644
index 0000000..9be725a
--- /dev/null
+++ b/libraries/ecore/src/examples/ecore_evas_ews_example.c
@@ -0,0 +1,253 @@
1/**
2 * Ecore example illustrating the ews of ecore evas usage.
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 ecore_evas_ews_example ecore_evas_ews_example.c `pkg-config --libs --cflags ecore-evas`
9 * @endverbatim
10 */
11
12#include <Ecore.h>
13#include <Ecore_Evas.h>
14#include <unistd.h>
15#include <stdio.h>
16#include <ctype.h>
17
18static Eina_Bool
19_wm_win_add(void *data, int type, void *event_info)
20{
21 Ecore_Evas *ee = event_info;
22 printf("WM: new window=%p\n", ee);
23 return EINA_TRUE;
24}
25
26static Eina_Bool
27_wm_win_move(void *data, int type, void *event_info)
28{
29 Ecore_Evas *ee = event_info;
30 int x, y;
31 ecore_evas_geometry_get(ee, &x, &y, NULL, NULL);
32 printf("WM: window=%p moved to %d,%d\n", ee, x, y);
33 return EINA_TRUE;
34}
35
36static Eina_Bool
37_wm_win_resize(void *data, int type, void *event_info)
38{
39 Ecore_Evas *ee = event_info;
40 int w, h;
41 ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
42 printf("WM: window=%p resized to %dx%d\n", ee, w, h);
43 return EINA_TRUE;
44}
45
46static Eina_Bool
47_wm_win_show(void *data, int type, void *event_info)
48{
49 Ecore_Evas *ee = event_info;
50 printf("WM: show window=%p\n", ee);
51 return EINA_TRUE;
52}
53
54static void
55optional_ews_window_manager_setup(void)
56{
57 ecore_event_handler_add(ECORE_EVAS_EWS_EVENT_ADD, _wm_win_add, NULL);
58 ecore_event_handler_add(ECORE_EVAS_EWS_EVENT_MOVE, _wm_win_move, NULL);
59 ecore_event_handler_add(ECORE_EVAS_EWS_EVENT_RESIZE, _wm_win_resize, NULL);
60 ecore_event_handler_add(ECORE_EVAS_EWS_EVENT_SHOW, _wm_win_show, NULL);
61
62 /* one may use any known unique identifier, like an app function pointer */
63 ecore_evas_ews_manager_set(optional_ews_window_manager_setup);
64}
65
66static void
67optional_ews_setup(void)
68{
69 Evas_Object *bg;
70 Evas *e;
71
72 ecore_evas_ews_setup(0, 0, 800, 600); /* "screen" size */
73 e = ecore_evas_ews_evas_get(); /* forces "screen" to be allocated */
74
75 bg = evas_object_rectangle_add(e);
76 evas_object_color_set(bg, 128, 32, 32, 255);
77 ecore_evas_ews_background_set(bg);
78}
79
80static Eina_Bool
81_stdin_cb(void *data, Ecore_Fd_Handler *handler)
82{
83 const Eina_List *l;
84 Ecore_Evas *ee;
85 char c = getchar();
86
87 if (c == EOF)
88 {
89 ecore_main_loop_quit();
90 return EINA_FALSE;
91 }
92
93 switch (c) {
94 case 'h':
95 printf("hide all windows\n");
96 EINA_LIST_FOREACH(ecore_evas_ews_children_get(), l, ee)
97 ecore_evas_hide(ee);
98 break;
99 case 's':
100 printf("show all windows\n");
101 EINA_LIST_FOREACH(ecore_evas_ews_children_get(), l, ee)
102 ecore_evas_show(ee);
103 break;
104 case 'l':
105 printf("move all windows left\n");
106 EINA_LIST_FOREACH(ecore_evas_ews_children_get(), l, ee)
107 {
108 int x, y;
109 ecore_evas_geometry_get(ee, &x, &y, NULL, NULL);
110 ecore_evas_move(ee, x - 10, y);
111 }
112 break;
113 case 'r':
114 printf("move all windows right\n");
115 EINA_LIST_FOREACH(ecore_evas_ews_children_get(), l, ee)
116 {
117 int x, y;
118 ecore_evas_geometry_get(ee, &x, &y, NULL, NULL);
119 ecore_evas_move(ee, x + 10, y);
120 }
121 break;
122 case 't':
123 printf("move all windows top\n");
124 EINA_LIST_FOREACH(ecore_evas_ews_children_get(), l, ee)
125 {
126 int x, y;
127 ecore_evas_geometry_get(ee, &x, &y, NULL, NULL);
128 ecore_evas_move(ee, x, y - 10);
129 }
130 break;
131 case 'b':
132 printf("move all windows bottom\n");
133 EINA_LIST_FOREACH(ecore_evas_ews_children_get(), l, ee)
134 {
135 int x, y;
136 ecore_evas_geometry_get(ee, &x, &y, NULL, NULL);
137 ecore_evas_move(ee, x, y + 10);
138 }
139 break;
140 case 'S':
141 printf("make all windows smaller\n");
142 EINA_LIST_FOREACH(ecore_evas_ews_children_get(), l, ee)
143 {
144 int w, h;
145 ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
146 ecore_evas_resize(ee, w - 10, h - 10);
147 }
148 break;
149 case 'B':
150 printf("make all windows bigger\n");
151 EINA_LIST_FOREACH(ecore_evas_ews_children_get(), l, ee)
152 {
153 int w, h;
154 ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
155 ecore_evas_resize(ee, w + 10, h + 10);
156 }
157 break;
158 case 'm':
159 printf("make all windows unmaximized\n");
160 EINA_LIST_FOREACH(ecore_evas_ews_children_get(), l, ee)
161 ecore_evas_maximized_set(ee, EINA_FALSE);
162 break;
163 case 'M':
164 printf("make all windows maximized\n");
165 EINA_LIST_FOREACH(ecore_evas_ews_children_get(), l, ee)
166 ecore_evas_maximized_set(ee, EINA_TRUE);
167 break;
168 case 'i':
169 printf("make all windows uniconified\n");
170 EINA_LIST_FOREACH(ecore_evas_ews_children_get(), l, ee)
171 ecore_evas_iconified_set(ee, EINA_FALSE);
172 break;
173 case 'I':
174 printf("make all windows iconified\n");
175 EINA_LIST_FOREACH(ecore_evas_ews_children_get(), l, ee)
176 ecore_evas_iconified_set(ee, EINA_TRUE);
177 break;
178 case 'f':
179 printf("make all windows unfullscreen\n");
180 EINA_LIST_FOREACH(ecore_evas_ews_children_get(), l, ee)
181 ecore_evas_fullscreen_set(ee, EINA_FALSE);
182 break;
183 case 'F':
184 printf("make all windows fullscreen\n");
185 EINA_LIST_FOREACH(ecore_evas_ews_children_get(), l, ee)
186 ecore_evas_fullscreen_set(ee, EINA_TRUE);
187 break;
188 case 'q':
189 printf("quit\n");
190 ecore_main_loop_quit();
191 break;
192 default:
193 if (!isspace(c))
194 printf("Unknown command: %c\n", c);
195 }
196 return ECORE_CALLBACK_RENEW;
197}
198
199static void
200_on_delete(Ecore_Evas *ee)
201{
202 free(ecore_evas_data_get(ee, "key"));
203 ecore_main_loop_quit();
204}
205
206int
207main(void)
208{
209 Ecore_Evas *ee;
210 Evas *canvas;
211 Evas_Object *bg;
212
213 if (ecore_evas_init() <= 0)
214 return 1;
215
216 optional_ews_setup();
217 optional_ews_window_manager_setup();
218
219 /* everything should look similar to ecore_evas_basic_example */
220 ee = ecore_evas_ews_new(0, 0, 200, 200);
221 ecore_evas_title_set(ee, "Ecore Evas EWS Example");
222 ecore_evas_show(ee);
223
224 ecore_evas_data_set(ee, "key", strdup("hello"));
225 ecore_evas_callback_delete_request_set(ee, _on_delete);
226
227 printf("Using %s engine!\n", ecore_evas_engine_name_get(ee));
228
229 canvas = ecore_evas_get(ee);
230 if(ecore_evas_ecore_evas_get(canvas) == ee)
231 printf("Everything is sane!\n");
232
233 bg = evas_object_rectangle_add(canvas);
234 evas_object_color_set(bg, 0, 0, 255, 255);
235 evas_object_resize(bg, 200, 200);
236 evas_object_show(bg);
237 ecore_evas_object_associate(ee, bg, ECORE_EVAS_OBJECT_ASSOCIATE_BASE);
238
239 /* moving the window should move it in the screen */
240 ecore_evas_move(ee, 50, 50);
241
242 ecore_main_fd_handler_add(STDIN_FILENO,
243 ECORE_FD_READ | ECORE_FD_ERROR,
244 _stdin_cb,
245 NULL, NULL, NULL);
246
247 ecore_main_loop_begin();
248
249 ecore_evas_free(ee);
250 ecore_evas_shutdown();
251
252 return 0;
253}