From 372ecdcee447e2302a8a7c7ecda8f808e8c60003 Mon Sep 17 00:00:00 2001 From: hermet Date: Sat, 13 Aug 2011 05:40:16 +0000 Subject: [PATCH] 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 --- src/lib/elc_ctxpopup.c | 105 ++++++++++++++++++++++++++----------------------- 1 file changed, 55 insertions(+), 50 deletions(-) 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. -- 2.7.4