Enlightenment CVS committal Author : raster Project : e17 Module : libs/evas
Dir : e17/libs/evas/src/lib/canvas Modified Files: evas_clip.c evas_events.c evas_object_line.c evas_object_main.c evas_object_polygon.c evas_object_smart.c evas_object_text.c evas_stack.c Log Message: 1. id3 album cover loader patches 2. i reduced list note memory usage by 20% - shoudl work better with malloc as ti is now a power of 2 as well 3. optimised evas internals to make use of event freezes to make e17'sw menu popups a LOT snappier 4. fixed using last member of list nodes - bad - shoudl use api as this is private stuff really 5. added config profile stuff to e17 u can literally maintain multiple config profiles and choose which one at any time etc. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/canvas/evas_clip.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- evas_clip.c 18 Jun 2005 01:00:29 -0000 1.15 +++ evas_clip.c 22 Jul 2005 10:28:10 -0000 1.16 @@ -7,6 +7,7 @@ int cx, cy, cw, ch, cvis, cr, cg, cb, ca; int nx, ny, nw, nh, nvis, nr, ng, nb, na; + if (obj->layer->evas->events_frozen > 0) return; evas_object_coords_recalc(obj); cx = obj->cur.cache.geometry.x; cy = obj->cur.cache.geometry.y; cw = obj->cur.cache.geometry.w; ch = obj->cur.cache.geometry.h; =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/canvas/evas_events.c,v retrieving revision 1.34 retrieving revision 1.35 diff -u -3 -r1.34 -r1.35 --- evas_events.c 18 Jun 2005 01:00:29 -0000 1.34 +++ evas_events.c 22 Jul 2005 10:28:10 -0000 1.35 @@ -4,8 +4,18 @@ int evas_event_passes_through(Evas_Object *obj) { + if (obj->layer->evas->events_frozen > 0) return 1; if (obj->pass_events) return 1; - if (obj->smart.parent) return evas_event_passes_through(obj->smart.parent); + if (obj->parent_cache_valid) return obj->parent_pass_events; + if (obj->smart.parent) + { + int par_pass; + + par_pass = evas_event_passes_through(obj->smart.parent); + obj->parent_cache_valid = 1; + obj->parent_pass_events = par_pass; + return par_pass; + } return 0; } @@ -115,6 +125,26 @@ return; MAGIC_CHECK_END(); e->events_frozen--; + if (e->events_frozen == 0) + { + Evas_Object_List *l; + + for (l = (Evas_Object_List *)e->layers; l; l = l->next) + { + Evas_Object_List *l2; + Evas_Layer *lay; + + lay = (Evas_Layer *)l; + for (l2 = (Evas_Object_List *)lay->objects; l2; l2 = l2->next) + { + Evas_Object *obj; + + obj = (Evas_Object *)l2; + evas_object_clip_recalc(obj); + evas_object_recalc_clippees(obj); + } + } + } if (e->events_frozen < 0) evas_debug_generic(" Thaw of events when already thawed!!!\n"); } @@ -820,6 +850,7 @@ return; MAGIC_CHECK_END(); obj->pass_events = pass; + evas_object_smart_member_cache_invalidate(obj); if (evas_object_is_in_output_rect(obj, obj->layer->evas->pointer.x, obj->layer->evas->pointer.y, 1, 1)) =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/canvas/evas_object_line.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -3 -r1.13 -r1.14 --- evas_object_line.c 18 Jun 2005 01:00:29 -0000 1.13 +++ evas_object_line.c 22 Jul 2005 10:28:10 -0000 1.14 @@ -111,10 +111,13 @@ MAGIC_CHECK_END(); if ((x1 == o->cur.x1) && (y1 == o->cur.y1) && (x2 == o->cur.x2) && (y2 == o->cur.y2)) return; - if (!evas_event_passes_through(obj)) - was = evas_object_is_in_output_rect(obj, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1); + if (obj->layer->evas->events_frozen != 0) + { + if (!evas_event_passes_through(obj)) + was = evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1); + } if (x1 < x2) { min_x = x1; @@ -147,16 +150,19 @@ o->changed = 1; evas_object_change(obj); evas_object_coords_recalc(obj); - is = evas_object_is_in_output_rect(obj, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1); - if (!evas_event_passes_through(obj)) - { - if ((is ^ was) && obj->cur.visible) - evas_event_feed_mouse_move(obj->layer->evas, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, - NULL); + if (obj->layer->evas->events_frozen != 0) + { + is = evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1); + if (!evas_event_passes_through(obj)) + { + if ((is ^ was) && obj->cur.visible) + evas_event_feed_mouse_move(obj->layer->evas, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, + NULL); + } } evas_object_inform_call_move(obj); evas_object_inform_call_resize(obj); =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/canvas/evas_object_main.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -3 -r1.29 -r1.30 --- evas_object_main.c 18 Jun 2005 01:00:29 -0000 1.29 +++ evas_object_main.c 22 Jul 2005 10:28:10 -0000 1.30 @@ -449,7 +449,7 @@ void evas_object_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) { - int is, was = 0; + int is, was = 0, pass = 0; MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); return; @@ -467,28 +467,35 @@ evas_object_inform_call_move(obj); return; } - if (!evas_event_passes_through(obj)) - was = evas_object_is_in_output_rect(obj, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1); + if (obj->layer->evas->events_frozen != 0) + { + pass = evas_event_passes_through(obj); + if (pass) + was = evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1); + } obj->cur.geometry.x = x; obj->cur.geometry.y = y; obj->cur.cache.geometry.validity = 0; evas_object_change(obj); evas_object_clip_dirty(obj); - evas_object_recalc_clippees(obj); - if (!evas_event_passes_through(obj)) + if (obj->layer->evas->events_frozen != 0) { - if (!obj->smart.smart) + evas_object_recalc_clippees(obj); + if (!pass) { - is = evas_object_is_in_output_rect(obj, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1); - if ((is ^ was) && obj->cur.visible) - evas_event_feed_mouse_move(obj->layer->evas, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, - NULL); + if (!obj->smart.smart) + { + is = evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1); + if ((is ^ was) && obj->cur.visible) + evas_event_feed_mouse_move(obj->layer->evas, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, + NULL); + } } } evas_object_inform_call_move(obj); @@ -504,7 +511,7 @@ void evas_object_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) { - int is, was = 0; + int is, was = 0, pass = 0; MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); return; @@ -523,29 +530,36 @@ evas_object_inform_call_resize(obj); return; } - if (!evas_event_passes_through(obj)) - was = evas_object_is_in_output_rect(obj, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1); + if (obj->layer->evas->events_frozen != 0) + { + pass = evas_event_passes_through(obj); + if (!pass) + was = evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1); + } obj->cur.geometry.w = w; obj->cur.geometry.h = h; obj->cur.cache.geometry.validity = 0; evas_object_change(obj); evas_object_clip_dirty(obj); evas_object_recalc_clippees(obj); -// if (obj->func->coords_recalc) obj->func->coords_recalc(obj); - if (!evas_event_passes_through(obj)) + if (obj->layer->evas->events_frozen != 0) { - if (!obj->smart.smart) + // if (obj->func->coords_recalc) obj->func->coords_recalc(obj); + if (!pass) { - is = evas_object_is_in_output_rect(obj, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1); - if ((is ^ was) && (obj->cur.visible)) - evas_event_feed_mouse_move(obj->layer->evas, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, - NULL); + if (!obj->smart.smart) + { + is = evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1); + if ((is ^ was) && (obj->cur.visible)) + evas_event_feed_mouse_move(obj->layer->evas, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, + NULL); + } } } evas_object_inform_call_resize(obj); @@ -618,18 +632,21 @@ obj->cur.visible = 1; evas_object_change(obj); evas_object_clip_dirty(obj); - evas_object_recalc_clippees(obj); - if (!evas_event_passes_through(obj)) + if (obj->layer->evas->events_frozen != 0) { - if (!obj->smart.smart) + evas_object_recalc_clippees(obj); + if (!evas_event_passes_through(obj)) { - if (evas_object_is_in_output_rect(obj, + if (!obj->smart.smart) + { + if (evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1)) + evas_event_feed_mouse_move(obj->layer->evas, obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1)) - evas_event_feed_mouse_move(obj->layer->evas, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, - NULL); + obj->layer->evas->pointer.y, + NULL); + } } } evas_object_inform_call_show(obj); @@ -661,48 +678,51 @@ obj->cur.visible = 0; evas_object_change(obj); evas_object_clip_dirty(obj); - evas_object_recalc_clippees(obj); - if (!evas_event_passes_through(obj)) + if (obj->layer->evas->events_frozen != 0) { - if (!obj->smart.smart) + evas_object_recalc_clippees(obj); + if (!evas_event_passes_through(obj)) { - if (evas_object_is_in_output_rect(obj, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1)) - evas_event_feed_mouse_move(obj->layer->evas, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, - NULL); - if (obj->mouse_grabbed > 0) + if (!obj->smart.smart) { - if (obj->layer->evas->pointer.mouse_grabbed >= obj->mouse_grabbed) - obj->layer->evas->pointer.mouse_grabbed -= obj->mouse_grabbed; - } - { - obj->mouse_grabbed = 0; - if ((obj->mouse_in) || (obj->mouse_grabbed > 0)) - { - obj->layer->evas->pointer.object.in = evas_list_remove(obj->layer->evas->pointer.object.in, obj); - } - if (obj->layer->evas->events_frozen > 0) + if (evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1)) + evas_event_feed_mouse_move(obj->layer->evas, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, + NULL); + if (obj->mouse_grabbed > 0) { - obj->mouse_in = 0; - return; + if (obj->layer->evas->pointer.mouse_grabbed >= obj->mouse_grabbed) + obj->layer->evas->pointer.mouse_grabbed -= obj->mouse_grabbed; } - if (obj->mouse_in) { - Evas_Event_Mouse_Out ev; - - obj->mouse_in = 0; - ev.buttons = obj->layer->evas->pointer.button; - ev.output.x = obj->layer->evas->pointer.x; - ev.output.y = obj->layer->evas->pointer.y; - ev.canvas.x = obj->layer->evas->pointer.canvas_x; - ev.canvas.y = obj->layer->evas->pointer.canvas_y; - ev.data = NULL; - ev.modifiers = &(obj->layer->evas->modifiers); - ev.locks = &(obj->layer->evas->locks); - evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_OUT, &ev); + obj->mouse_grabbed = 0; + if ((obj->mouse_in) || (obj->mouse_grabbed > 0)) + { + obj->layer->evas->pointer.object.in = evas_list_remove(obj->layer->evas->pointer.object.in, obj); + } + if (obj->layer->evas->events_frozen > 0) + { + obj->mouse_in = 0; + return; + } + if (obj->mouse_in) + { + Evas_Event_Mouse_Out ev; + + obj->mouse_in = 0; + ev.buttons = obj->layer->evas->pointer.button; + ev.output.x = obj->layer->evas->pointer.x; + ev.output.y = obj->layer->evas->pointer.y; + ev.canvas.x = obj->layer->evas->pointer.canvas_x; + ev.canvas.y = obj->layer->evas->pointer.canvas_y; + ev.data = NULL; + ev.modifiers = &(obj->layer->evas->modifiers); + ev.locks = &(obj->layer->evas->locks); + evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_OUT, &ev); + } } } } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/canvas/evas_object_polygon.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -3 -r1.13 -r1.14 --- evas_object_polygon.c 18 Jun 2005 01:00:29 -0000 1.13 +++ evas_object_polygon.c 22 Jul 2005 10:28:10 -0000 1.14 @@ -105,10 +105,13 @@ MAGIC_CHECK(o, Evas_Object_Polygon, MAGIC_OBJ_POLYGON); return; MAGIC_CHECK_END(); - if (!evas_event_passes_through(obj)) - was = evas_object_is_in_output_rect(obj, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1); + if (obj->layer->evas->events_frozen != 0) + { + if (!evas_event_passes_through(obj)) + was = evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1); + } p = malloc(sizeof(Evas_Polygon_Point)); if (!p) return; p->x = x; @@ -142,16 +145,19 @@ o->changed = 1; evas_object_change(obj); evas_object_coords_recalc(obj); - is = evas_object_is_in_output_rect(obj, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1); - if (!evas_event_passes_through(obj)) + if (obj->layer->evas->events_frozen != 0) { - if ((is ^ was) && obj->cur.visible) - evas_event_feed_mouse_move(obj->layer->evas, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, - NULL); + is = evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1); + if (!evas_event_passes_through(obj)) + { + if ((is ^ was) && obj->cur.visible) + evas_event_feed_mouse_move(obj->layer->evas, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, + NULL); + } } evas_object_inform_call_move(obj); evas_object_inform_call_resize(obj); =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/canvas/evas_object_smart.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- evas_object_smart.c 18 Jun 2005 01:00:29 -0000 1.14 +++ evas_object_smart.c 22 Jul 2005 10:28:10 -0000 1.15 @@ -136,6 +136,7 @@ obj->smart.parent = smart_obj; smart_obj->smart.contained = evas_list_append(smart_obj->smart.contained, obj); + evas_object_smart_member_cache_invalidate(obj); } /** @@ -155,6 +156,7 @@ obj->smart.parent->smart.contained = evas_list_remove(obj->smart.parent->smart.contained, obj); obj->smart.parent = NULL; + evas_object_smart_member_cache_invalidate(obj); } /** @@ -357,6 +359,21 @@ obj->smart.smart = NULL; } +void +evas_object_smart_member_cache_invalidate(Evas_Object *obj) +{ + Evas_List *l; + + obj->parent_cache_valid = 0; + for (l = obj->smart.contained; l; l = l->next) + { + Evas_Object *obj2; + + obj2 = l->data; + evas_object_smart_member_cache_invalidate(obj2); + } +} + /* all nice and private */ static void evas_object_smart_init(Evas_Object *obj) =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/canvas/evas_object_text.c,v retrieving revision 1.39 retrieving revision 1.40 diff -u -3 -r1.39 -r1.40 --- evas_object_text.c 18 Jun 2005 01:00:29 -0000 1.39 +++ evas_object_text.c 22 Jul 2005 10:28:10 -0000 1.40 @@ -135,7 +135,7 @@ evas_object_text_font_set(Evas_Object *obj, const char *font, Evas_Font_Size size) { Evas_Object_Text *o; - int is, was = 0; + int is, was = 0, pass = 0; int same_font = 0; if (!font) return; @@ -152,10 +152,14 @@ same_font = 1; if (size == o->cur.size) return; } - if (!evas_event_passes_through(obj)) - was = evas_object_is_in_output_rect(obj, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1); + if (obj->layer->evas->events_frozen != 0) + { + pass = evas_event_passes_through(obj); + if (!pass) + was = evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1); + } /* DO IT */ if (o->engine_data) { @@ -218,16 +222,19 @@ o->changed = 1; evas_object_change(obj); evas_object_coords_recalc(obj); - if (!evas_event_passes_through(obj)) + if (obj->layer->evas->events_frozen != 0) { - is = evas_object_is_in_output_rect(obj, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1); - if ((is ^ was) && obj->cur.visible) - evas_event_feed_mouse_move(obj->layer->evas, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, - NULL); + if (!pass) + { + is = evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1); + if ((is ^ was) && obj->cur.visible) + evas_event_feed_mouse_move(obj->layer->evas, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, + NULL); + } } evas_object_inform_call_resize(obj); } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/canvas/evas_stack.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -3 -r1.13 -r1.14 --- evas_stack.c 18 Jun 2005 01:00:30 -0000 1.13 +++ evas_stack.c 22 Jul 2005 10:28:10 -0000 1.14 @@ -72,15 +72,18 @@ } obj->restack = 1; evas_object_change(obj); - if (!evas_event_passes_through(obj)) + if (obj->layer->evas->events_frozen != 0) { - if (!obj->smart.smart) + if (!evas_event_passes_through(obj)) { - if (evas_object_is_in_output_rect(obj, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1) && - obj->cur.visible) - evas_event_feed_mouse_move(obj->layer->evas, obj->layer->evas->pointer.x, obj->layer->evas->pointer.y, NULL); + if (!obj->smart.smart) + { + if (evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1) && + obj->cur.visible) + evas_event_feed_mouse_move(obj->layer->evas, obj->layer->evas->pointer.x, obj->layer->evas->pointer.y, NULL); + } } } evas_object_inform_call_restack(obj); @@ -118,15 +121,18 @@ } obj->restack = 1; evas_object_change(obj); - if (!evas_event_passes_through(obj)) + if (obj->layer->evas->events_frozen != 0) { - if (!obj->smart.smart) + if (!evas_event_passes_through(obj)) { - if (evas_object_is_in_output_rect(obj, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1) && - obj->cur.visible) - evas_event_feed_mouse_move(obj->layer->evas, obj->layer->evas->pointer.x, obj->layer->evas->pointer.y, NULL); + if (!obj->smart.smart) + { + if (evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1) && + obj->cur.visible) + evas_event_feed_mouse_move(obj->layer->evas, obj->layer->evas->pointer.x, obj->layer->evas->pointer.y, NULL); + } } } evas_object_inform_call_restack(obj); @@ -172,15 +178,18 @@ } obj->restack = 1; evas_object_change(obj); - if (!evas_event_passes_through(obj)) + if (obj->layer->evas->events_frozen != 0) { - if (!obj->smart.smart) + if (!evas_event_passes_through(obj)) { - if (evas_object_is_in_output_rect(obj, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1) && - obj->cur.visible) - evas_event_feed_mouse_move(obj->layer->evas, obj->layer->evas->pointer.x, obj->layer->evas->pointer.y, NULL); + if (!obj->smart.smart) + { + if (evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1) && + obj->cur.visible) + evas_event_feed_mouse_move(obj->layer->evas, obj->layer->evas->pointer.x, obj->layer->evas->pointer.y, NULL); + } } } evas_object_inform_call_restack(obj); @@ -226,15 +235,18 @@ } obj->restack = 1; evas_object_change(obj); - if (!evas_event_passes_through(obj)) + if (obj->layer->evas->events_frozen != 0) { - if (!obj->smart.smart) + if (!evas_event_passes_through(obj)) { - if (evas_object_is_in_output_rect(obj, - obj->layer->evas->pointer.x, - obj->layer->evas->pointer.y, 1, 1) && - obj->cur.visible) - evas_event_feed_mouse_move(obj->layer->evas, obj->layer->evas->pointer.x, obj->layer->evas->pointer.y, NULL); + if (!obj->smart.smart) + { + if (evas_object_is_in_output_rect(obj, + obj->layer->evas->pointer.x, + obj->layer->evas->pointer.y, 1, 1) && + obj->cur.visible) + evas_event_feed_mouse_move(obj->layer->evas, obj->layer->evas->pointer.x, obj->layer->evas->pointer.y, NULL); + } } } evas_object_inform_call_restack(obj); ------------------------------------------------------- SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from IBM. Find simple to follow Roadmaps, straightforward articles, informative Webcasts and more! Get everything you need to get up to speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs