Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        E.h menus.c settings.c 


Log Message:
Fix various menu animation/sliding bugs.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v
retrieving revision 1.398
retrieving revision 1.399
diff -u -3 -r1.398 -r1.399
--- E.h 28 Mar 2005 13:39:22 -0000      1.398
+++ E.h 28 Mar 2005 18:20:27 -0000      1.399
@@ -845,7 +845,7 @@
    } hints;
    struct
    {
-      char                slide;
+      char                animate;
       char                onscreen;
       char                warp;
       int                 opacity;
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/menus.c,v
retrieving revision 1.177
retrieving revision 1.178
diff -u -3 -r1.177 -r1.178
--- menus.c     20 Mar 2005 17:31:13 -0000      1.177
+++ menus.c     28 Mar 2005 18:20:47 -0000      1.178
@@ -357,7 +357,7 @@
        ESelectInput(m->win, ewin->client.event_mask);
 
        ewin->head = head_num;
-       if (Conf.menus.slide)
+       if (Conf.menus.animate)
           EwinInstantShade(ewin, 0);
        ICCCM_Cmap(NULL);
        MoveEwin(ewin, EoGetX(ewin), EoGetY(ewin));
@@ -365,7 +365,7 @@
        if (!noshow)
          {
             ShowEwin(ewin);
-            if (Conf.menus.slide)
+            if (Conf.menus.animate)
                EwinUnShade(ewin);
          }
      }
@@ -1353,7 +1353,7 @@
                           ewin2->border->border.top);
                  RaiseEwin(ewin2);
                  ShowEwin(ewin2);
-                 if (Conf.menus.slide)
+                 if (Conf.menus.animate)
                     EwinUnShade(ewin2);
                  Mode_menus.list[Mode_menus.current_depth++] = mi->child;
               }
@@ -1590,7 +1590,7 @@
 static void
 SubmenuShowTimeout(int val __UNUSED__, void *dat)
 {
-   int                 mx, my;
+   int                 mx, my, xo, yo;
    unsigned int        mw, mh;
    Menu               *m;
    MenuItem           *mi;
@@ -1617,18 +1617,10 @@
       return;
 
    EGetGeometry(mi->win, NULL, &mx, &my, &mw, &mh, NULL, NULL);
-   MoveEwin(ewin2,
-           EoGetX(ewin) + ewin->border->border.left + mx + mw,
-           EoGetY(ewin) + ewin->border->border.top + my -
-           ewin2->border->border.top);
-   RaiseEwin(ewin2);
-   ShowEwin(ewin2);
-
-   if (Conf.menus.slide)
-      EwinUnShade(ewin2);
 
-   if (Mode_menus.list[Mode_menus.current_depth - 1] != mi->child)
-      Mode_menus.list[Mode_menus.current_depth++] = mi->child;
+   /* Sub-menu offsets relative to parent menu origin */
+   xo = ewin->border->border.left + mx + mw;
+   yo = ewin->border->border.top + my - ewin2->border->border.top;
 
    if (Conf.menus.onscreen)
      {
@@ -1637,13 +1629,20 @@
        int                 fy[256];
        int                 tx[256];
        int                 ty[256];
-       int                 i;
+       int                 i, ww, hh;
        int                 xdist = 0, ydist = 0;
 
-       if (EoGetX(ewin2) + EoGetW(ewin2) > VRoot.w)
-          xdist = VRoot.w - (EoGetX(ewin2) + EoGetW(ewin2));
-       if (EoGetY(ewin2) + EoGetH(ewin2) > VRoot.h)
-          ydist = VRoot.h - (EoGetY(ewin2) + EoGetH(ewin2));
+       /* Size of new submenu (may be shaded atm.) */
+       ww = mi->child->w + ewin2->border->border.left +
+          ewin2->border->border.right;
+       hh = mi->child->h + ewin2->border->border.top +
+          ewin2->border->border.bottom;
+
+       if (EoGetX(ewin) + xo + ww > VRoot.w)
+          xdist = VRoot.w - (EoGetX(ewin) + xo + ww);
+       if (EoGetY(ewin) + yo + hh > VRoot.h)
+          ydist = VRoot.h - (EoGetY(ewin) + yo + hh);
+
        if ((xdist != 0) || (ydist != 0))
          {
             for (i = 0; i < Mode_menus.current_depth; i++)
@@ -1674,6 +1673,18 @@
                             mi->text_w / 2, mi->text_h / 2);
          }
      }
+
+   Mode.move.check = 0;                /* Bypass on-screen checks */
+   MoveEwin(ewin2, EoGetX(ewin) + xo, EoGetY(ewin) + yo);
+   Mode.move.check = 1;
+   RaiseEwin(ewin2);
+   ShowEwin(ewin2);
+
+   if (Conf.menus.animate)
+      EwinUnShade(ewin2);
+
+   if (Mode_menus.list[Mode_menus.current_depth - 1] != mi->child)
+      Mode_menus.list[Mode_menus.current_depth++] = mi->child;
 }
 
 static void
@@ -2254,7 +2265,7 @@
 #define N_IPC_FUNCS (sizeof(MenusIpcArray)/sizeof(IpcItem))
 
 static const CfgItem MenusCfgItems[] = {
-   CFG_ITEM_BOOL(Conf.menus, slide, 0),
+   CFG_ITEM_BOOL(Conf.menus, animate, 0),
    CFG_ITEM_BOOL(Conf.menus, onscreen, 1),
    CFG_ITEM_BOOL(Conf.menus, warp, 1),
    CFG_ITEM_INT(Conf.menus, opacity, 220),
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/settings.c,v
retrieving revision 1.134
retrieving revision 1.135
diff -u -3 -r1.134 -r1.135
--- settings.c  28 Mar 2005 13:39:32 -0000      1.134
+++ settings.c  28 Mar 2005 18:20:51 -0000      1.135
@@ -1147,7 +1147,7 @@
      {
        Conf.save_under = tmp_saveunders;
        Conf.menus.warp = tmp_warpmenus;
-       Conf.menus.slide = tmp_animated_menus;
+       Conf.menus.animate = tmp_animated_menus;
        Conf.menus.onscreen = tmp_menusonscreen;
        Conf.mapslide = tmp_map_slide;
        Conf.cleanupslide = tmp_cleanup_slide;
@@ -1178,7 +1178,7 @@
 
    tmp_saveunders = Conf.save_under;
    tmp_warpmenus = Conf.menus.warp;
-   tmp_animated_menus = Conf.menus.slide;
+   tmp_animated_menus = Conf.menus.animate;
    tmp_menusonscreen = Conf.menus.onscreen;
    tmp_map_slide = Conf.mapslide;
    tmp_cleanup_slide = Conf.cleanupslide;




-------------------------------------------------------
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

Reply via email to