Enlightenment CVS committal Author : raster Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_gadcon.c e_gadcon.h e_shelf.c Log Message: more shelf work - getting there. =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_gadcon.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- e_gadcon.c 4 Apr 2006 15:42:25 -0000 1.15 +++ e_gadcon.c 5 Apr 2006 14:00:32 -0000 1.16 @@ -45,6 +45,7 @@ static void e_gadcon_layout_pack_options_set(Evas_Object *obj, int pos, int size, int res); static void e_gadcon_layout_pack_min_size_set(Evas_Object *obj, int w, int h); static void e_gadcon_layout_pack_aspect_set(Evas_Object *obj, int w, int h); +static void e_gadcon_layout_pack_aspect_pad_set(Evas_Object *obj, int w, int h); static void e_gadcon_layout_unpack(Evas_Object *obj); static Evas_Hash *providers = NULL; @@ -408,6 +409,8 @@ style); if (gcc->o_frame) { + edje_object_size_min_calc(gcc->o_frame, + &(gcc->pad.w), &(gcc->pad.h)); edje_object_part_swallow(gcc->o_frame, "items", gcc->o_base); evas_object_show(gcc->o_frame); } @@ -488,8 +491,16 @@ evas_object_event_callback_add(gcc->o_event, EVAS_CALLBACK_MOUSE_IN, _e_gadcon_cb_mouse_in, gcc); evas_object_event_callback_add(gcc->o_event, EVAS_CALLBACK_MOUSE_OUT, _e_gadcon_cb_mouse_out, gcc); - evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_MOVE, _e_gadcon_cb_move, gcc); - evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_resize, gcc); + if (gcc->o_frame) + { + evas_object_event_callback_add(gcc->o_frame, EVAS_CALLBACK_MOVE, _e_gadcon_cb_move, gcc); + evas_object_event_callback_add(gcc->o_frame, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_resize, gcc); + } + else + { + evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_MOVE, _e_gadcon_cb_move, gcc); + evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_resize, gcc); + } evas_object_show(gcc->o_event); evas_object_show(gcc->o_control); @@ -501,8 +512,16 @@ E_OBJECT_CHECK(gcc); E_OBJECT_TYPE_CHECK(gcc, E_GADCON_CLIENT_TYPE); - evas_object_event_callback_del(gcc->o_base, EVAS_CALLBACK_MOVE, _e_gadcon_cb_move); - evas_object_event_callback_del(gcc->o_base, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_resize); + if (gcc->o_frame) + { + evas_object_event_callback_del(gcc->o_frame, EVAS_CALLBACK_MOVE, _e_gadcon_cb_move); + evas_object_event_callback_del(gcc->o_frame, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_resize); + } + else + { + evas_object_event_callback_del(gcc->o_base, EVAS_CALLBACK_MOVE, _e_gadcon_cb_move); + evas_object_event_callback_del(gcc->o_base, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_resize); + } if (gcc->moving) { @@ -526,7 +545,7 @@ case E_GADCON_ORIENT_TOP: case E_GADCON_ORIENT_BOTTOM: if (gcc->o_frame) - e_gadcon_layout_pack_size_set(gcc->o_frame, w); + e_gadcon_layout_pack_size_set(gcc->o_frame, w + gcc->pad.w); else e_gadcon_layout_pack_size_set(gcc->o_base, w); break; @@ -534,7 +553,7 @@ case E_GADCON_ORIENT_LEFT: case E_GADCON_ORIENT_RIGHT: if (gcc->o_frame) - e_gadcon_layout_pack_size_set(gcc->o_frame, h); + e_gadcon_layout_pack_size_set(gcc->o_frame, h + gcc->pad.h); else e_gadcon_layout_pack_size_set(gcc->o_base, h); break; @@ -543,6 +562,10 @@ case E_GADCON_ORIENT_CORNER_TR: case E_GADCON_ORIENT_CORNER_BL: case E_GADCON_ORIENT_CORNER_BR: + case E_GADCON_ORIENT_CORNER_LT: + case E_GADCON_ORIENT_CORNER_RT: + case E_GADCON_ORIENT_CORNER_LB: + case E_GADCON_ORIENT_CORNER_RB: default: break; } @@ -554,7 +577,7 @@ E_OBJECT_CHECK(gcc); E_OBJECT_TYPE_CHECK(gcc, E_GADCON_CLIENT_TYPE); if (gcc->o_frame) - e_gadcon_layout_pack_min_size_set(gcc->o_frame, w, h); + e_gadcon_layout_pack_min_size_set(gcc->o_frame, w + gcc->pad.w, h + gcc->pad.h); else e_gadcon_layout_pack_min_size_set(gcc->o_base, w, h); } @@ -565,7 +588,10 @@ E_OBJECT_CHECK(gcc); E_OBJECT_TYPE_CHECK(gcc, E_GADCON_CLIENT_TYPE); if (gcc->o_frame) - e_gadcon_layout_pack_aspect_set(gcc->o_frame, w, h); + { + e_gadcon_layout_pack_aspect_pad_set(gcc->o_frame, gcc->pad.w, gcc->pad.h); + e_gadcon_layout_pack_aspect_set(gcc->o_frame, w, h); + } else e_gadcon_layout_pack_aspect_set(gcc->o_base, w, h); } @@ -673,6 +699,7 @@ ev = event_info; if (ev->button == 3) { + printf("THREE!\n"); } } @@ -770,7 +797,10 @@ evas_pointer_canvas_xy_get(gcc->gadcon->evas, &x, &y); x = x - gcc->dx; y = y - gcc->dy; - evas_object_geometry_get(gcc->o_base, NULL, NULL, &w, &h); + if (gcc->o_frame) + evas_object_geometry_get(gcc->o_frame, NULL, NULL, &w, &h); + else + evas_object_geometry_get(gcc->o_base, NULL, NULL, &w, &h); if (e_gadcon_layout_orientation_get(gcc->gadcon->o_container)) { if (gcc->o_frame) @@ -922,7 +952,7 @@ int hookp; struct { int w, h; - } min, aspect; + } min, aspect, aspect_pad; Evas_Coord x, y, w, h; Evas_Object *obj; unsigned char can_move : 1; @@ -1188,6 +1218,17 @@ } static void +e_gadcon_layout_pack_aspect_pad_set(Evas_Object *obj, int w, int h) +{ + E_Gadcon_Layout_Item *bi; + + bi = evas_object_data_get(obj, "e_gadcon_layout_data"); + if (!bi) return; + bi->aspect_pad.w = w; + bi->aspect_pad.h = h; +} + +static void e_gadcon_layout_unpack(Evas_Object *obj) { E_Gadcon_Layout_Item *bi; @@ -1328,13 +1369,15 @@ { if (sd->horizontal) { - bi->ask.size2 = (h * bi->aspect.w) / bi->aspect.h; + bi->ask.size2 = (((h - bi->aspect_pad.h) * bi->aspect.w) / + bi->aspect.h) + bi->aspect_pad.w; if (bi->ask.size2 > bi->min.w) min += (bi->ask.size2 - bi->min.w); } else { - bi->ask.size2 = (w * bi->aspect.h) / bi->aspect.w; + bi->ask.size2 = (((w - bi->aspect_pad.w) * bi->aspect.h) / + bi->aspect.w) + bi->aspect_pad.h; if (bi->ask.size2 > bi->min.h) min += (bi->ask.size2 - bi->min.h); } =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_gadcon.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- e_gadcon.h 4 Apr 2006 15:42:25 -0000 1.12 +++ e_gadcon.h 5 Apr 2006 14:00:32 -0000 1.13 @@ -22,7 +22,11 @@ E_GADCON_ORIENT_CORNER_TL, E_GADCON_ORIENT_CORNER_TR, E_GADCON_ORIENT_CORNER_BL, - E_GADCON_ORIENT_CORNER_BR + E_GADCON_ORIENT_CORNER_BR, + E_GADCON_ORIENT_CORNER_LT, + E_GADCON_ORIENT_CORNER_RT, + E_GADCON_ORIENT_CORNER_LB, + E_GADCON_ORIENT_CORNER_RB } E_Gadcon_Orient; typedef struct _E_Gadcon E_Gadcon; @@ -95,6 +99,9 @@ struct { int pos, size, res; } config; + struct { + Evas_Coord w, h; + } pad; unsigned char moving : 1; Evas_Coord dx, dy, sx, sy; =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_shelf.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- e_shelf.c 4 Apr 2006 15:42:25 -0000 1.12 +++ e_shelf.c 5 Apr 2006 14:00:32 -0000 1.13 @@ -4,6 +4,7 @@ #include "e.h" static void _e_shelf_free(E_Shelf *es); +static const char *_e_shelf_orient_string_get(E_Shelf *es); static void _e_shelf_position_calc(E_Shelf *es); static void _e_shelf_gadcon_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h); static Evas_Object *_e_shelf_gadcon_frame_request(void *data, E_Gadcon_Client *gcc, const char *style); @@ -11,13 +12,6 @@ static Evas_List *shelves = NULL; static int shelf_id = 0; -/* FIXME: shelves need to do this: - * 1. allow them to be moved, resized etc. etc. - * 2. have a configuration panel per shelf to select if its inline, layer etc. - * 3. catch all right clicks not on modules for right click context menu - * 4. a global config dialog that lists shelves u have to configure them - */ - /* externally accessible functions */ EAPI int e_shelf_init(void) @@ -121,6 +115,7 @@ es); e_gadcon_orient(es->gadcon, E_GADCON_ORIENT_TOP); edje_object_signal_emit(es->o_base, "set_orientation", "top"); + edje_object_message_signal_process(es->o_base); e_gadcon_zone_set(es->gadcon, zone); e_gadcon_ecore_evas_set(es->gadcon, es->ee); @@ -271,57 +266,80 @@ E_OBJECT_CHECK(es); E_OBJECT_TYPE_CHECK(es, E_GADMAN_SHELF_TYPE); e_gadcon_orient(es->gadcon, orient); + edje_object_signal_emit(es->o_base, "set_orientation", + _e_shelf_orient_string_get(es)); + edje_object_message_signal_process(es->o_base); +} + +/* local subsystem functions */ +static void +_e_shelf_free(E_Shelf *es) +{ + shelves = evas_list_remove(shelves, es); + e_object_del(E_OBJECT(es->gadcon)); + evas_stringshare_del(es->name); + evas_stringshare_del(es->style); + evas_object_del(es->o_base); + if (es->popup) e_object_del(E_OBJECT(es->popup)); + free(es); +} + +static const char * +_e_shelf_orient_string_get(E_Shelf *es) +{ + const char *sig = ""; + switch (es->gadcon->orient) { case E_GADCON_ORIENT_FLOAT: - edje_object_signal_emit(es->o_base, "set_orientation", "float"); + sig = "float"; break; case E_GADCON_ORIENT_HORIZ: - edje_object_signal_emit(es->o_base, "set_orientation", "horizontal"); + sig = "horizontal"; break; case E_GADCON_ORIENT_VERT: - edje_object_signal_emit(es->o_base, "set_orientation", "vertical"); + sig = "vertical"; break; case E_GADCON_ORIENT_LEFT: - edje_object_signal_emit(es->o_base, "set_orientation", "left"); + sig = "left"; break; case E_GADCON_ORIENT_RIGHT: - edje_object_signal_emit(es->o_base, "set_orientation", "right"); + sig = "right"; break; case E_GADCON_ORIENT_TOP: - edje_object_signal_emit(es->o_base, "set_orientation", "top"); + sig = "top"; break; case E_GADCON_ORIENT_BOTTOM: - edje_object_signal_emit(es->o_base, "set_orientation", "bottom"); + sig = "bottom"; break; case E_GADCON_ORIENT_CORNER_TL: - edje_object_signal_emit(es->o_base, "set_orientation", "top_left"); + sig = "top_left"; break; case E_GADCON_ORIENT_CORNER_TR: - edje_object_signal_emit(es->o_base, "set_orientation", "top_right"); + sig = "top_right"; break; case E_GADCON_ORIENT_CORNER_BL: - edje_object_signal_emit(es->o_base, "set_orientation", "bottom_left"); + sig = "bottom_left"; break; case E_GADCON_ORIENT_CORNER_BR: - edje_object_signal_emit(es->o_base, "set_orientation", "bottom_right"); + sig = "bottom_right"; + break; + case E_GADCON_ORIENT_CORNER_LT: + sig = "left_top"; + break; + case E_GADCON_ORIENT_CORNER_RT: + sig = "right_top"; + break; + case E_GADCON_ORIENT_CORNER_LB: + sig = "left_bottom"; + break; + case E_GADCON_ORIENT_CORNER_RB: + sig = "right_bottom"; break; default: break; } -} - -/* local subsystem functions */ -static void -_e_shelf_free(E_Shelf *es) -{ - shelves = evas_list_remove(shelves, es); - e_object_del(E_OBJECT(es->gadcon)); - evas_stringshare_del(es->name); - evas_stringshare_del(es->style); - evas_object_del(es->o_base); - if (es->popup) e_object_del(E_OBJECT(es->popup)); - free(es); + return sig; } static void @@ -340,14 +358,30 @@ switch (orient) { case E_GADCON_ORIENT_FLOAT: + if (!es->fit_along) es->w = es->zone->w; + if (!es->fit_size) es->h = size; break; case E_GADCON_ORIENT_HORIZ: + if (!es->fit_along) es->w = es->zone->w; + if (!es->fit_size) es->h = size; + es->x = (es->zone->w - es->w) / 2; break; case E_GADCON_ORIENT_VERT: + if (!es->fit_along) es->h = es->zone->h; + if (!es->fit_size) es->w = size; + es->y = (es->zone->h - es->h) / 2; break; case E_GADCON_ORIENT_LEFT: + if (!es->fit_along) es->h = es->zone->h; + if (!es->fit_size) es->w = size; + es->x = 0; + es->y = (es->zone->h - es->h) / 2; break; case E_GADCON_ORIENT_RIGHT: + if (!es->fit_along) es->h = es->zone->h; + if (!es->fit_size) es->w = size; + es->x = es->zone->w - es->w; + es->y = (es->zone->h - es->h) / 2; break; case E_GADCON_ORIENT_TOP: if (!es->fit_along) es->w = es->zone->w; @@ -362,12 +396,52 @@ es->y = es->zone->h - es->h; break; case E_GADCON_ORIENT_CORNER_TL: + if (!es->fit_along) es->w = es->zone->w; + if (!es->fit_size) es->h = size; + es->x = 0; + es->y = 0; break; case E_GADCON_ORIENT_CORNER_TR: + if (!es->fit_along) es->w = es->zone->w; + if (!es->fit_size) es->h = size; + es->x = es->zone->w - es->w; + es->y = 0; break; case E_GADCON_ORIENT_CORNER_BL: + if (!es->fit_along) es->w = es->zone->w; + if (!es->fit_size) es->h = size; + es->x = 0; + es->y = es->zone->h - es->h; break; case E_GADCON_ORIENT_CORNER_BR: + if (!es->fit_along) es->w = es->zone->w; + if (!es->fit_size) es->h = size; + es->x = es->zone->w - es->w; + es->y = es->zone->h - es->h; + break; + case E_GADCON_ORIENT_CORNER_LT: + if (!es->fit_along) es->h = es->zone->h; + if (!es->fit_size) es->w = size; + es->x = 0; + es->y = 0; + break; + case E_GADCON_ORIENT_CORNER_RT: + if (!es->fit_along) es->h = es->zone->h; + if (!es->fit_size) es->w = size; + es->x = es->zone->w - es->w; + es->y = 0; + break; + case E_GADCON_ORIENT_CORNER_LB: + if (!es->fit_along) es->h = es->zone->h; + if (!es->fit_size) es->w = size; + es->x = 0; + es->y = es->zone->h - es->h; + break; + case E_GADCON_ORIENT_CORNER_RB: + if (!es->fit_along) es->h = es->zone->h; + if (!es->fit_size) es->w = size; + es->x = es->zone->w - es->w; + es->y = es->zone->h - es->h; break; default: break; @@ -392,30 +466,25 @@ switch (gc->orient) { case E_GADCON_ORIENT_FLOAT: - break; case E_GADCON_ORIENT_HORIZ: - break; - case E_GADCON_ORIENT_VERT: - break; - case E_GADCON_ORIENT_LEFT: - break; - case E_GADCON_ORIENT_RIGHT: - break; case E_GADCON_ORIENT_TOP: - if (!es->fit_along) w = ww; - if (!es->fit_size) h = hh; - break; case E_GADCON_ORIENT_BOTTOM: - if (!es->fit_along) w = ww; - if (!es->fit_size) h = hh; - break; case E_GADCON_ORIENT_CORNER_TL: - break; case E_GADCON_ORIENT_CORNER_TR: - break; case E_GADCON_ORIENT_CORNER_BL: - break; case E_GADCON_ORIENT_CORNER_BR: + if (!es->fit_along) w = ww; + if (!es->fit_size) h = hh; + break; + case E_GADCON_ORIENT_VERT: + case E_GADCON_ORIENT_LEFT: + case E_GADCON_ORIENT_RIGHT: + case E_GADCON_ORIENT_CORNER_LT: + case E_GADCON_ORIENT_CORNER_RT: + case E_GADCON_ORIENT_CORNER_LB: + case E_GADCON_ORIENT_CORNER_RB: + if (!es->fit_along) h = hh; + if (!es->fit_size) w = ww; break; default: break; @@ -427,14 +496,41 @@ switch (gc->orient) { case E_GADCON_ORIENT_FLOAT: + if (!es->fit_along) nw = es->w; + if (!es->fit_size) nh = es->h; + if (nw > es->zone->w) nw = es->zone->w; + if (nh > es->zone->h) nh = es->zone->h; + if (nw != es->w) nx = es->x + ((es->w - nw) / 2); break; case E_GADCON_ORIENT_HORIZ: + if (!es->fit_along) nw = es->w; + if (!es->fit_size) nh = es->h; + if (nw > es->zone->w) nw = es->zone->w; + if (nh > es->zone->h) nh = es->zone->h; + if (nw != es->w) nx = es->x + ((es->w - nw) / 2); break; case E_GADCON_ORIENT_VERT: + if (!es->fit_along) nh = es->h; + if (!es->fit_size) nw = es->w; + if (nw > es->zone->w) nw = es->zone->w; + if (nh > es->zone->h) nh = es->zone->h; + if (nh != es->h) ny = es->y + ((es->h - nh) / 2); break; case E_GADCON_ORIENT_LEFT: + if (!es->fit_along) nh = es->h; + if (!es->fit_size) nw = es->w; + if (nw > es->zone->w) nw = es->zone->w; + if (nh > es->zone->h) nh = es->zone->h; + if (nh != es->h) ny = es->y + ((es->h - nh) / 2); + nx = 0; break; case E_GADCON_ORIENT_RIGHT: + if (!es->fit_along) nh = es->h; + if (!es->fit_size) nw = es->w; + if (nw > es->zone->w) nw = es->zone->w; + if (nh > es->zone->h) nh = es->zone->h; + if (nh != es->h) ny = es->y + ((es->h - nh) / 2); + nx = es->zone->w - nw; break; case E_GADCON_ORIENT_TOP: if (!es->fit_along) nw = es->w; @@ -453,12 +549,68 @@ ny = es->zone->h - nh; break; case E_GADCON_ORIENT_CORNER_TL: + if (!es->fit_along) nw = es->w; + if (!es->fit_size) nh = es->h; + if (nw > es->zone->w) nw = es->zone->w; + if (nh > es->zone->h) nh = es->zone->h; + if (nw != es->w) nx = 0; + ny = 0; break; case E_GADCON_ORIENT_CORNER_TR: + if (!es->fit_along) nw = es->w; + if (!es->fit_size) nh = es->h; + if (nw > es->zone->w) nw = es->zone->w; + if (nh > es->zone->h) nh = es->zone->h; + if (nw != es->w) nx = es->zone->w - es->w; + ny = 0; break; case E_GADCON_ORIENT_CORNER_BL: + if (!es->fit_along) nw = es->w; + if (!es->fit_size) nh = es->h; + if (nw > es->zone->w) nw = es->zone->w; + if (nh > es->zone->h) nh = es->zone->h; + if (nw != es->w) nx = 0; + ny = es->zone->h - nh; break; case E_GADCON_ORIENT_CORNER_BR: + if (!es->fit_along) nw = es->w; + if (!es->fit_size) nh = es->h; + if (nw > es->zone->w) nw = es->zone->w; + if (nh > es->zone->h) nh = es->zone->h; + if (nw != es->w) nx = es->zone->w - es->w; + ny = es->zone->h - nh; + break; + case E_GADCON_ORIENT_CORNER_LT: + if (!es->fit_along) nh = es->h; + if (!es->fit_size) nw = es->w; + if (nw > es->zone->w) nw = es->zone->w; + if (nh > es->zone->h) nh = es->zone->h; + if (nh != es->h) ny = 0; + nx = 0; + break; + case E_GADCON_ORIENT_CORNER_RT: + if (!es->fit_along) nh = es->h; + if (!es->fit_size) nw = es->w; + if (nw > es->zone->w) nw = es->zone->w; + if (nh > es->zone->h) nh = es->zone->h; + if (nh != es->h) ny = 0; + nx = es->zone->w - nw; + break; + case E_GADCON_ORIENT_CORNER_LB: + if (!es->fit_along) nh = es->h; + if (!es->fit_size) nw = es->w; + if (nw > es->zone->w) nw = es->zone->w; + if (nh > es->zone->h) nh = es->zone->h; + if (nh != es->h) ny = es->zone->h - nh; + nx = 0; + break; + case E_GADCON_ORIENT_CORNER_RB: + if (!es->fit_along) nh = es->h; + if (!es->fit_size) nw = es->w; + if (nw > es->zone->w) nw = es->zone->w; + if (nh > es->zone->h) nh = es->zone->h; + if (nh != es->h) ny = es->zone->h - nh; + nx = es->zone->w - nw; break; default: break; @@ -481,5 +633,8 @@ evas_object_del(o); return NULL; } + edje_object_signal_emit(o, "set_orientation", + _e_shelf_orient_string_get(es)); + edje_object_message_signal_process(o); return o; } ------------------------------------------------------- This SF.Net email is sponsored by xPML, a groundbreaking scripting language that extends applications into web and mobile media. Attend the live webcast and join the prime developer group breaking into this new coding territory! http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs