From: hermet Date: Sat, 13 Aug 2011 05:40:16 +0000 (+0000) Subject: elementary/ctxpopup - patched by kimcinoo@gmail.com X-Git-Tag: REL_F_I9500_20120323_1~17^2~1943 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=372ecdcee447e2302a8a7c7ecda8f808e8c60003;p=framework%2Fuifw%2Felementary.git elementary/ctxpopup - patched by kimcinoo@gmail.com Dear All, Hi! Previously, the ctxpopup have used only direction up or down if there is no enough area to display. So, there was some dead codes and TODO list for this.. By using wd->horizontal, we can decide between "up/down" and "left/right" If elc_ctxpopup is horizontal, "up/down" is more proper than "left/right" and vice versa. Sincerely, Shinwoo Kim. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@62420 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- diff --git a/src/lib/elc_ctxpopup.c b/src/lib/elc_ctxpopup.c index 874e0ea..70528f5 100644 --- a/src/lib/elc_ctxpopup.c +++ b/src/lib/elc_ctxpopup.c @@ -388,61 +388,66 @@ _calc_base_geometry(Evas_Object *obj, Evas_Coord_Rectangle *rect) //In this case, all directions are invalid because of lack of space. if (idx == 4) { - //TODO 1: Find the largest space direction. Evas_Coord length[2]; - length[0] = pos.y - hover_area.y; - length[1] = (hover_area.y + hover_area.h) - pos.y; - - if (length[0] > length[1]) - idx = ELM_CTXPOPUP_DIRECTION_UP; + if(!wd->horizontal) + { + length[0] = pos.y - hover_area.y; + length[1] = (hover_area.y + hover_area.h) - pos.y; + + if (length[0] > length[1]) + { + // ELM_CTXPOPUP_DIRECTION_UP + _adjust_pos_x(&pos, &base_size, &hover_area); + pos.y -= base_size.y; + arrow = ELM_CTXPOPUP_DIRECTION_DOWN; + if (pos.y < hover_area.y + arrow_size.y) + { + base_size.y -= ((hover_area.y + arrow_size.y) - pos.y); + pos.y = hover_area.y + arrow_size.y; + } + } + else + { + //ELM_CTXPOPUP_DIRECTION_DOWN + _adjust_pos_x(&pos, &base_size, &hover_area); + arrow = ELM_CTXPOPUP_DIRECTION_UP; + if (pos.y + arrow_size.y + base_size.y > + hover_area.y + hover_area.h) + base_size.y -= + ((pos.y + arrow_size.y + base_size.y) - + (hover_area.y + hover_area.h)); + } + } else - idx = ELM_CTXPOPUP_DIRECTION_DOWN; - - //TODO 2: determine x , y - switch (idx) { - case ELM_CTXPOPUP_DIRECTION_UP: - _adjust_pos_x(&pos, &base_size, &hover_area); - pos.y -= base_size.y; - arrow = ELM_CTXPOPUP_DIRECTION_DOWN; - if (pos.y < hover_area.y + arrow_size.y) - { - base_size.y -= ((hover_area.y + arrow_size.y) - pos.y); - pos.y = hover_area.y + arrow_size.y; - } - break; - case ELM_CTXPOPUP_DIRECTION_LEFT: - _adjust_pos_y(&pos, &base_size, &hover_area); - pos.x -= base_size.x; - arrow = ELM_CTXPOPUP_DIRECTION_RIGHT; - if (pos.x < hover_area.x + arrow_size.x) - { - base_size.x -= ((hover_area.x + arrow_size.x) - pos.x); - pos.x = hover_area.x + arrow_size.x; - } - break; - case ELM_CTXPOPUP_DIRECTION_RIGHT: - _adjust_pos_y(&pos, &base_size, &hover_area); - arrow = ELM_CTXPOPUP_DIRECTION_LEFT; - if (pos.x + arrow_size.x + base_size.x > - hover_area.x + hover_area.w) - base_size.x -= - ((pos.x + arrow_size.x + base_size.x) - - (hover_area.x + hover_area.w)); - break; - case ELM_CTXPOPUP_DIRECTION_DOWN: - _adjust_pos_x(&pos, &base_size, &hover_area); - arrow = ELM_CTXPOPUP_DIRECTION_UP; - if (pos.y + arrow_size.y + base_size.y > - hover_area.y + hover_area.h) - base_size.y -= - ((pos.y + arrow_size.y + base_size.y) - - (hover_area.y + hover_area.h)); - break; - default: - break; + length[0] = pos.x - hover_area.x; + length[1] = (hover_area.x + hover_area.w) - pos.x; + if (length[0] > length[1]) + { + //ELM_CTXPOPUP_DIRECTION_LEFT + _adjust_pos_y(&pos, &base_size, &hover_area); + pos.x -= base_size.x; + arrow = ELM_CTXPOPUP_DIRECTION_RIGHT; + if (pos.x < hover_area.x + arrow_size.x) + { + base_size.x -= ((hover_area.x + arrow_size.x) - pos.x); + pos.x = hover_area.x + arrow_size.x; + } + } + else + { + //ELM_CTXPOPUP_DIRECTION_RIGHT + _adjust_pos_y(&pos, &base_size, &hover_area); + arrow = ELM_CTXPOPUP_DIRECTION_LEFT; + if (pos.x + arrow_size.x + base_size.x > + hover_area.x + hover_area.w) + base_size.x -= + ((pos.x + arrow_size.x + base_size.x) - + (hover_area.x + hover_area.w)); + } } + } //Final position and size.