Enlightenment CVS committal Author : sebastid Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_zone.h e_zone.c Log Message: Edge flipping =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_zone.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- e_zone.h 15 Mar 2005 10:26:05 -0000 1.15 +++ e_zone.h 22 Apr 2005 08:19:38 -0000 1.16 @@ -31,6 +31,14 @@ int desk_x_count, desk_y_count; int desk_x_current, desk_y_current; E_Desk **desks; + + Evas_List *handlers; + + struct { + Ecore_X_Window top, right, bottom, left; + Ecore_Timer *timer; + int x, y; + } flip; }; struct _E_Event_Zone_Desk_Count_Set =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_zone.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -3 -r1.29 -r1.30 --- e_zone.c 9 Apr 2005 00:13:09 -0000 1.29 +++ e_zone.c 22 Apr 2005 08:19:39 -0000 1.30 @@ -13,6 +13,10 @@ static void _e_zone_cb_bg_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info); static void _e_zone_cb_bg_mouse_move(void *data, Evas *evas, Evas_Object *obj, void *event_info); static void _e_zone_event_zone_desk_count_set_free(void *data, void *ev); +static int _e_zone_cb_mouse_in(void *data, int type, void *event); +static int _e_zone_cb_mouse_out(void *data, int type, void *event); +static int _e_zone_cb_timer(void *data); +static void _e_zone_update_flip(E_Zone *zone); int E_EVENT_ZONE_DESK_COUNT_SET = 0; @@ -47,6 +51,14 @@ zone->h = h; zone->num = num; + zone->flip.top = ecore_x_window_input_new(con->manager->win, 1, 0, w - 2, 1); + zone->flip.right = ecore_x_window_input_new(con->manager->win, w - 1, 1, 1, h - 2); + zone->flip.bottom = ecore_x_window_input_new(con->manager->win, 1, h - 1, w - 2, 1); + zone->flip.left = ecore_x_window_input_new(con->manager->win, 0, 1, 1, h - 2); + + zone->handlers = evas_list_append(zone->handlers, ecore_event_handler_add(ECORE_X_EVENT_MOUSE_IN, _e_zone_cb_mouse_in, zone)); + zone->handlers = evas_list_append(zone->handlers, ecore_event_handler_add(ECORE_X_EVENT_MOUSE_OUT, _e_zone_cb_mouse_out, zone)); + snprintf(name, sizeof(name), "Zone %d", zone->num); zone->name = strdup(name); @@ -97,6 +109,9 @@ e_zone_desk_count_set(zone, e_config->zone_desks_x_count, e_config->zone_desks_y_count); + + _e_zone_update_flip(zone); + return zone; } @@ -422,3 +437,98 @@ free(e); } +static int +_e_zone_cb_mouse_in(void *data, int type, void *event) +{ + Ecore_X_Event_Mouse_In *ev; + E_Zone *zone; + + printf("in\n"); + + ev = event; + zone = data; + + if (ev->win == zone->flip.top) + { + zone->flip.timer = ecore_timer_add(1, _e_zone_cb_timer, zone); + zone->flip.x = zone->desk_x_current; + zone->flip.y = zone->desk_y_current - 1; + } + else if (ev->win == zone->flip.right) + { + zone->flip.timer = ecore_timer_add(1, _e_zone_cb_timer, zone); + zone->flip.x = zone->desk_x_current + 1; + zone->flip.y = zone->desk_y_current; + } + else if (ev->win == zone->flip.bottom) + { + zone->flip.timer = ecore_timer_add(1, _e_zone_cb_timer, zone); + zone->flip.x = zone->desk_x_current; + zone->flip.y = zone->desk_y_current + 1; + } + else if (ev->win == zone->flip.left) + { + zone->flip.timer = ecore_timer_add(1, _e_zone_cb_timer, zone); + zone->flip.x = zone->desk_x_current - 1; + zone->flip.y = zone->desk_y_current; + } + return 1; +} + +static int +_e_zone_cb_mouse_out(void *data, int type, void *event) +{ + Ecore_X_Event_Mouse_Out *ev; + E_Zone *zone; + + ev = event; + zone = data; + + if (zone->flip.timer) + ecore_timer_del(zone->flip.timer); + zone->flip.timer = NULL; + + return 1; +} + +static int +_e_zone_cb_timer(void *data) +{ + E_Zone *zone; + E_Desk *desk; + + zone = data; + desk = e_desk_at_xy_get(zone, zone->flip.x, zone->flip.y); + if (desk) + e_desk_show(desk); + _e_zone_update_flip(zone); + + zone->flip.timer = NULL; + + return 0; +} + +static void +_e_zone_update_flip(E_Zone *zone) +{ + + if (zone->desk_y_current > 0) + ecore_x_window_show(zone->flip.top); + else + ecore_x_window_hide(zone->flip.top); + + if ((zone->desk_x_current + 1) < zone->desk_x_count) + ecore_x_window_show(zone->flip.right); + else + ecore_x_window_hide(zone->flip.right); + + if ((zone->desk_y_current + 1) < zone->desk_y_count) + ecore_x_window_show(zone->flip.bottom); + else + ecore_x_window_hide(zone->flip.bottom); + + if (zone->desk_x_current > 0) + ecore_x_window_show(zone->flip.left); + else + ecore_x_window_hide(zone->flip.left); +} ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs