elementary/ctxpopup - patched by kimcinoo@gmail.com
authorChunEon Park <hermet@hermet.pe.kr>
Sat, 13 Aug 2011 05:40:16 +0000 (05:40 +0000)
committerChunEon Park <hermet@hermet.pe.kr>
Sat, 13 Aug 2011 05:40:16 +0000 (05:40 +0000)
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.

SVN revision: 62420

src/lib/elc_ctxpopup.c

index 874e0ea..70528f5 100644 (file)
@@ -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.