aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/ecore/src/lib/ecore_evas/ecore_evas_buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/ecore/src/lib/ecore_evas/ecore_evas_buffer.c')
-rw-r--r--libraries/ecore/src/lib/ecore_evas/ecore_evas_buffer.c164
1 files changed, 77 insertions, 87 deletions
diff --git a/libraries/ecore/src/lib/ecore_evas/ecore_evas_buffer.c b/libraries/ecore/src/lib/ecore_evas/ecore_evas_buffer.c
index a3e49d6..3f82efb 100644
--- a/libraries/ecore/src/lib/ecore_evas/ecore_evas_buffer.c
+++ b/libraries/ecore/src/lib/ecore_evas/ecore_evas_buffer.c
@@ -3,6 +3,7 @@
3#endif 3#endif
4 4
5// NOTE: if you fix this, consider fixing ecore_evas_ews.c as it is similar! 5// NOTE: if you fix this, consider fixing ecore_evas_ews.c as it is similar!
6#include <stdlib.h>
6 7
7#include <Ecore.h> 8#include <Ecore.h>
8#include "ecore_private.h" 9#include "ecore_private.h"
@@ -93,6 +94,12 @@ _ecore_evas_resize(Ecore_Evas *ee, int w, int h)
93 if (ee->func.fn_resize) ee->func.fn_resize(ee); 94 if (ee->func.fn_resize) ee->func.fn_resize(ee);
94} 95}
95 96
97static void
98_ecore_evas_move_resize(Ecore_Evas *ee, int x __UNUSED__, int y __UNUSED__, int w, int h)
99{
100 _ecore_evas_resize(ee, w, h);
101}
102
96int 103int
97_ecore_evas_buffer_shutdown(void) 104_ecore_evas_buffer_shutdown(void)
98{ 105{
@@ -168,6 +175,14 @@ _ecore_evas_buffer_coord_translate(Ecore_Evas *ee, Evas_Coord *x, Evas_Coord *y)
168 if (fw < 1) fw = 1; 175 if (fw < 1) fw = 1;
169 if (fh < 1) fh = 1; 176 if (fh < 1) fh = 1;
170 177
178 if (evas_object_map_get(ee->engine.buffer.image) &&
179 evas_object_map_enable_get(ee->engine.buffer.image))
180 {
181 fx = 0; fy = 0;
182 fw = ee->w; fh = ee->h;
183 ww = ee->w; hh = ee->h;
184 }
185
171 if ((fx == 0) && (fy == 0) && (fw == ww) && (fh == hh)) 186 if ((fx == 0) && (fy == 0) && (fw == ww) && (fh == hh))
172 { 187 {
173 *x = (ee->w * (*x - xx)) / fw; 188 *x = (ee->w * (*x - xx)) / fw;
@@ -188,51 +203,80 @@ _ecore_evas_buffer_coord_translate(Ecore_Evas *ee, Evas_Coord *x, Evas_Coord *y)
188} 203}
189 204
190static void 205static void
191_ecore_evas_buffer_cb_mouse_in(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) 206_ecore_evas_buffer_transfer_modifiers_locks(Evas *e, Evas *e2)
207{
208 const char *mods[] =
209 { "Shift", "Control", "Alt", "Meta", "Hyper", "Super", NULL };
210 const char *locks[] =
211 { "Scroll_Lock", "Num_Lock", "Caps_Lock", NULL };
212 int i;
213
214 for (i = 0; mods[i]; i++)
215 {
216 if (evas_key_modifier_is_set(evas_key_modifier_get(e), mods[i]))
217 evas_key_modifier_on(e2, mods[i]);
218 else
219 evas_key_modifier_off(e2, mods[i]);
220 }
221 for (i = 0; locks[i]; i++)
222 {
223 if (evas_key_lock_is_set(evas_key_lock_get(e), locks[i]))
224 evas_key_lock_on(e2, locks[i]);
225 else
226 evas_key_lock_off(e2, locks[i]);
227 }
228}
229
230static void
231_ecore_evas_buffer_cb_mouse_in(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
192{ 232{
193 Ecore_Evas *ee; 233 Ecore_Evas *ee;
194 Evas_Event_Mouse_In *ev; 234 Evas_Event_Mouse_In *ev;
195 235
196 ee = data; 236 ee = data;
197 ev = event_info; 237 ev = event_info;
238 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
198 evas_event_feed_mouse_in(ee->evas, ev->timestamp, NULL); 239 evas_event_feed_mouse_in(ee->evas, ev->timestamp, NULL);
199} 240}
200 241
201static void 242static void
202_ecore_evas_buffer_cb_mouse_out(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) 243_ecore_evas_buffer_cb_mouse_out(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
203{ 244{
204 Ecore_Evas *ee; 245 Ecore_Evas *ee;
205 Evas_Event_Mouse_Out *ev; 246 Evas_Event_Mouse_Out *ev;
206 247
207 ee = data; 248 ee = data;
208 ev = event_info; 249 ev = event_info;
250 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
209 evas_event_feed_mouse_out(ee->evas, ev->timestamp, NULL); 251 evas_event_feed_mouse_out(ee->evas, ev->timestamp, NULL);
210} 252}
211 253
212static void 254static void
213_ecore_evas_buffer_cb_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) 255_ecore_evas_buffer_cb_mouse_down(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
214{ 256{
215 Ecore_Evas *ee; 257 Ecore_Evas *ee;
216 Evas_Event_Mouse_Down *ev; 258 Evas_Event_Mouse_Down *ev;
217 259
218 ee = data; 260 ee = data;
219 ev = event_info; 261 ev = event_info;
262 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
220 evas_event_feed_mouse_down(ee->evas, ev->button, ev->flags, ev->timestamp, NULL); 263 evas_event_feed_mouse_down(ee->evas, ev->button, ev->flags, ev->timestamp, NULL);
221} 264}
222 265
223static void 266static void
224_ecore_evas_buffer_cb_mouse_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) 267_ecore_evas_buffer_cb_mouse_up(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
225{ 268{
226 Ecore_Evas *ee; 269 Ecore_Evas *ee;
227 Evas_Event_Mouse_Up *ev; 270 Evas_Event_Mouse_Up *ev;
228 271
229 ee = data; 272 ee = data;
230 ev = event_info; 273 ev = event_info;
274 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
231 evas_event_feed_mouse_up(ee->evas, ev->button, ev->flags, ev->timestamp, NULL); 275 evas_event_feed_mouse_up(ee->evas, ev->button, ev->flags, ev->timestamp, NULL);
232} 276}
233 277
234static void 278static void
235_ecore_evas_buffer_cb_mouse_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) 279_ecore_evas_buffer_cb_mouse_move(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
236{ 280{
237 Ecore_Evas *ee; 281 Ecore_Evas *ee;
238 Evas_Event_Mouse_Move *ev; 282 Evas_Event_Mouse_Move *ev;
@@ -243,22 +287,24 @@ _ecore_evas_buffer_cb_mouse_move(void *data, Evas *e __UNUSED__, Evas_Object *ob
243 x = ev->cur.canvas.x; 287 x = ev->cur.canvas.x;
244 y = ev->cur.canvas.y; 288 y = ev->cur.canvas.y;
245 _ecore_evas_buffer_coord_translate(ee, &x, &y); 289 _ecore_evas_buffer_coord_translate(ee, &x, &y);
290 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
246 _ecore_evas_mouse_move_process(ee, x, y, ev->timestamp); 291 _ecore_evas_mouse_move_process(ee, x, y, ev->timestamp);
247} 292}
248 293
249static void 294static void
250_ecore_evas_buffer_cb_mouse_wheel(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) 295_ecore_evas_buffer_cb_mouse_wheel(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
251{ 296{
252 Ecore_Evas *ee; 297 Ecore_Evas *ee;
253 Evas_Event_Mouse_Wheel *ev; 298 Evas_Event_Mouse_Wheel *ev;
254 299
255 ee = data; 300 ee = data;
256 ev = event_info; 301 ev = event_info;
302 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
257 evas_event_feed_mouse_wheel(ee->evas, ev->direction, ev->z, ev->timestamp, NULL); 303 evas_event_feed_mouse_wheel(ee->evas, ev->direction, ev->z, ev->timestamp, NULL);
258} 304}
259 305
260static void 306static void
261_ecore_evas_buffer_cb_multi_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) 307_ecore_evas_buffer_cb_multi_down(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
262{ 308{
263 Ecore_Evas *ee; 309 Ecore_Evas *ee;
264 Evas_Event_Multi_Down *ev; 310 Evas_Event_Multi_Down *ev;
@@ -274,11 +320,12 @@ _ecore_evas_buffer_cb_multi_down(void *data, Evas *e __UNUSED__, Evas_Object *ob
274 _ecore_evas_buffer_coord_translate(ee, &x, &y); 320 _ecore_evas_buffer_coord_translate(ee, &x, &y);
275 xf = (ev->canvas.xsub - (double)xx) + (double)x; 321 xf = (ev->canvas.xsub - (double)xx) + (double)x;
276 yf = (ev->canvas.ysub - (double)yy) + (double)y; 322 yf = (ev->canvas.ysub - (double)yy) + (double)y;
323 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
277 evas_event_feed_multi_down(ee->evas, ev->device, x, y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, xf, yf, ev->flags, ev->timestamp, NULL); 324 evas_event_feed_multi_down(ee->evas, ev->device, x, y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, xf, yf, ev->flags, ev->timestamp, NULL);
278} 325}
279 326
280static void 327static void
281_ecore_evas_buffer_cb_multi_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) 328_ecore_evas_buffer_cb_multi_up(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
282{ 329{
283 Ecore_Evas *ee; 330 Ecore_Evas *ee;
284 Evas_Event_Multi_Up *ev; 331 Evas_Event_Multi_Up *ev;
@@ -294,11 +341,12 @@ _ecore_evas_buffer_cb_multi_up(void *data, Evas *e __UNUSED__, Evas_Object *obj
294 _ecore_evas_buffer_coord_translate(ee, &x, &y); 341 _ecore_evas_buffer_coord_translate(ee, &x, &y);
295 xf = (ev->canvas.xsub - (double)xx) + (double)x; 342 xf = (ev->canvas.xsub - (double)xx) + (double)x;
296 yf = (ev->canvas.ysub - (double)yy) + (double)y; 343 yf = (ev->canvas.ysub - (double)yy) + (double)y;
344 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
297 evas_event_feed_multi_up(ee->evas, ev->device, x, y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, xf, yf, ev->flags, ev->timestamp, NULL); 345 evas_event_feed_multi_up(ee->evas, ev->device, x, y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, xf, yf, ev->flags, ev->timestamp, NULL);
298} 346}
299 347
300static void 348static void
301_ecore_evas_buffer_cb_multi_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) 349_ecore_evas_buffer_cb_multi_move(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
302{ 350{
303 Ecore_Evas *ee; 351 Ecore_Evas *ee;
304 Evas_Event_Multi_Move *ev; 352 Evas_Event_Multi_Move *ev;
@@ -314,6 +362,7 @@ _ecore_evas_buffer_cb_multi_move(void *data, Evas *e __UNUSED__, Evas_Object *ob
314 _ecore_evas_buffer_coord_translate(ee, &x, &y); 362 _ecore_evas_buffer_coord_translate(ee, &x, &y);
315 xf = (ev->cur.canvas.xsub - (double)xx) + (double)x; 363 xf = (ev->cur.canvas.xsub - (double)xx) + (double)x;
316 yf = (ev->cur.canvas.ysub - (double)yy) + (double)y; 364 yf = (ev->cur.canvas.ysub - (double)yy) + (double)y;
365 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
317 evas_event_feed_multi_move(ee->evas, ev->device, x, y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, xf, yf, ev->timestamp, NULL); 366 evas_event_feed_multi_move(ee->evas, ev->device, x, y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, xf, yf, ev->timestamp, NULL);
318} 367}
319 368
@@ -334,42 +383,7 @@ _ecore_evas_buffer_cb_key_down(void *data, Evas *e, Evas_Object *obj __UNUSED__,
334 383
335 ee = data; 384 ee = data;
336 ev = event_info; 385 ev = event_info;
337 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Shift")) 386 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
338 evas_key_modifier_on(ee->evas, "Shift");
339 else
340 evas_key_modifier_off(ee->evas, "Shift");
341 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Control"))
342 evas_key_modifier_on(ee->evas, "Control");
343 else
344 evas_key_modifier_off(ee->evas, "Control");
345 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Alt"))
346 evas_key_modifier_on(ee->evas, "Alt");
347 else
348 evas_key_modifier_off(ee->evas, "Alt");
349 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Meta"))
350 evas_key_modifier_on(ee->evas, "Meta");
351 else
352 evas_key_modifier_off(ee->evas, "Meta");
353 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Hyper"))
354 evas_key_modifier_on(ee->evas, "Hyper");
355 else
356 evas_key_modifier_off(ee->evas, "Hyper");
357 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Super"))
358 evas_key_modifier_on(ee->evas, "Super");
359 else
360 evas_key_modifier_off(ee->evas, "Super");
361 if (evas_key_lock_is_set(evas_key_lock_get(e), "Scroll_Lock"))
362 evas_key_lock_on(ee->evas, "Scroll_Lock");
363 else
364 evas_key_lock_off(ee->evas, "Scroll_Lock");
365 if (evas_key_lock_is_set(evas_key_lock_get(e), "Num_Lock"))
366 evas_key_lock_on(ee->evas, "Num_Lock");
367 else
368 evas_key_lock_off(ee->evas, "Num_Lock");
369 if (evas_key_lock_is_set(evas_key_lock_get(e), "Caps_Lock"))
370 evas_key_lock_on(ee->evas, "Caps_Lock");
371 else
372 evas_key_lock_off(ee->evas, "Caps_Lock");
373 evas_event_feed_key_down(ee->evas, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, NULL); 387 evas_event_feed_key_down(ee->evas, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, NULL);
374} 388}
375 389
@@ -381,42 +395,7 @@ _ecore_evas_buffer_cb_key_up(void *data, Evas *e, Evas_Object *obj __UNUSED__, v
381 395
382 ee = data; 396 ee = data;
383 ev = event_info; 397 ev = event_info;
384 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Shift")) 398 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
385 evas_key_modifier_on(ee->evas, "Shift");
386 else
387 evas_key_modifier_off(ee->evas, "Shift");
388 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Control"))
389 evas_key_modifier_on(ee->evas, "Control");
390 else
391 evas_key_modifier_off(ee->evas, "Control");
392 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Alt"))
393 evas_key_modifier_on(ee->evas, "Alt");
394 else
395 evas_key_modifier_off(ee->evas, "Alt");
396 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Meta"))
397 evas_key_modifier_on(ee->evas, "Meta");
398 else
399 evas_key_modifier_off(ee->evas, "Meta");
400 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Hyper"))
401 evas_key_modifier_on(ee->evas, "Hyper");
402 else
403 evas_key_modifier_off(ee->evas, "Hyper");
404 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Super"))
405 evas_key_modifier_on(ee->evas, "Super");
406 else
407 evas_key_modifier_off(ee->evas, "Super");
408 if (evas_key_lock_is_set(evas_key_lock_get(e), "Scroll_Lock"))
409 evas_key_lock_on(ee->evas, "Scroll_Lock");
410 else
411 evas_key_lock_off(ee->evas, "Scroll_Lock");
412 if (evas_key_lock_is_set(evas_key_lock_get(e), "Num_Lock"))
413 evas_key_lock_on(ee->evas, "Num_Lock");
414 else
415 evas_key_lock_off(ee->evas, "Num_Lock");
416 if (evas_key_lock_is_set(evas_key_lock_get(e), "Caps_Lock"))
417 evas_key_lock_on(ee->evas, "Caps_Lock");
418 else
419 evas_key_lock_off(ee->evas, "Caps_Lock");
420 evas_event_feed_key_up(ee->evas, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, NULL); 399 evas_event_feed_key_up(ee->evas, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, NULL);
421} 400}
422 401
@@ -469,6 +448,20 @@ _ecore_evas_buffer_alpha_set(Ecore_Evas *ee, int alpha)
469 ee->alpha = alpha; 448 ee->alpha = alpha;
470 if (ee->engine.buffer.image) 449 if (ee->engine.buffer.image)
471 evas_object_image_alpha_set(ee->engine.buffer.image, ee->alpha); 450 evas_object_image_alpha_set(ee->engine.buffer.image, ee->alpha);
451 else
452 {
453 Evas_Engine_Info_Buffer *einfo;
454
455 einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas);
456 if (einfo)
457 {
458 if (ee->alpha)
459 einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32;
460 else
461 einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_RGB32;
462 evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
463 }
464 }
472} 465}
473 466
474static Ecore_Evas_Engine_Func _ecore_buffer_engine_func = 467static Ecore_Evas_Engine_Func _ecore_buffer_engine_func =
@@ -491,7 +484,7 @@ static Ecore_Evas_Engine_Func _ecore_buffer_engine_func =
491 NULL, 484 NULL,
492 NULL, 485 NULL,
493 _ecore_evas_resize, 486 _ecore_evas_resize,
494 NULL, 487 _ecore_evas_move_resize,
495 NULL, 488 NULL,
496 NULL, 489 NULL,
497 _ecore_evas_show, 490 _ecore_evas_show,
@@ -520,7 +513,7 @@ static Ecore_Evas_Engine_Func _ecore_buffer_engine_func =
520 _ecore_evas_buffer_alpha_set, 513 _ecore_evas_buffer_alpha_set,
521 NULL, //transparent 514 NULL, //transparent
522 515
523 NULL, // render 516 _ecore_evas_buffer_render,
524 NULL // screen_geometry_get 517 NULL // screen_geometry_get
525}; 518};
526#endif 519#endif
@@ -604,7 +597,7 @@ ecore_evas_buffer_allocfunc_new(int w, int h, void *(*alloc_func) (void *data, i
604 einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas); 597 einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas);
605 if (einfo) 598 if (einfo)
606 { 599 {
607 einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32; 600 einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_RGB32;
608 einfo->info.dest_buffer = ee->engine.buffer.pixels; 601 einfo->info.dest_buffer = ee->engine.buffer.pixels;
609 einfo->info.dest_buffer_row_bytes = ee->w * sizeof(int); 602 einfo->info.dest_buffer_row_bytes = ee->w * sizeof(int);
610 einfo->info.use_color_key = 0; 603 einfo->info.use_color_key = 0;
@@ -636,7 +629,6 @@ ecore_evas_buffer_allocfunc_new(int w, int h, void *(*alloc_func) (void *data, i
636 629
637 evas_event_feed_mouse_in(ee->evas, 0, NULL); 630 evas_event_feed_mouse_in(ee->evas, 0, NULL);
638 631
639 ee->engine.func->fn_render = _ecore_evas_buffer_render;
640 _ecore_evas_register(ee); 632 _ecore_evas_register(ee);
641 633
642 evas_event_feed_mouse_in(ee->evas, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff), NULL); 634 evas_event_feed_mouse_in(ee->evas, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff), NULL);
@@ -818,8 +810,6 @@ ecore_evas_object_image_new(Ecore_Evas *ee_target)
818 810
819 ee_target->sub_ecore_evas = eina_list_append(ee_target->sub_ecore_evas, ee); 811 ee_target->sub_ecore_evas = eina_list_append(ee_target->sub_ecore_evas, ee);
820 812
821 ee->engine.func->fn_render = _ecore_evas_buffer_render;
822
823 return o; 813 return o;
824#else 814#else
825 return NULL; 815 return NULL;