Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        E.h borders.c iclass.c menus.c 


Log Message:
Cache borderpart ImageState (primarily to avoid flickering text on enter/leave).
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v
retrieving revision 1.287
retrieving revision 1.288
diff -u -3 -r1.287 -r1.288
--- E.h 26 Jun 2004 17:33:39 -0000      1.287
+++ E.h 26 Jun 2004 17:49:01 -0000      1.288
@@ -855,6 +855,7 @@
    char                expose;
    char                no_expose;
    char                left;
+   ImageState         *is;
 }
 EWinBit;
 
@@ -1784,7 +1785,7 @@
 void                HonorIclass(char *s, int id);
 void                EwinWithdraw(EWin * ewin);
 void                SyncBorderToEwin(EWin * ewin);
-void                BorderWinpartChange(EWin * ewin, int i);
+void                BorderWinpartChange(EWin * ewin, int i, int force);
 void                EwinBorderUpdateInfo(EWin * ewin);
 void                EwinBorderUpdateState(EWin * ewin);
 void                EwinEventDestroy(EWin * ewin);
@@ -2336,6 +2337,8 @@
 ImageState         *CreateImageState(void);
 void                ImageStatePopulate(ImageState * is);
 void                ImageStateRealize(ImageState * is);
+ImageState         *IclassGetImageState(ImageClass * iclass, int state,
+                                       int active, int sticky);
 void                IclassPopulate(ImageClass * iclass);
 int                 IclassIsTransparent(ImageClass * iclass);
 void                IclassApply(ImageClass * iclass, Window win, int w, int h,
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/borders.c,v
retrieving revision 1.195
retrieving revision 1.196
diff -u -3 -r1.195 -r1.196
--- borders.c   19 Jun 2004 01:31:20 -0000      1.195
+++ borders.c   26 Jun 2004 17:49:01 -0000      1.196
@@ -727,44 +727,6 @@
    EDBUG_RETURN_;
 }
 
-static int
-BorderWinpartChangeContents(EWin * ewin, int i)
-{
-   int                 ret = 0;
-   const char         *title;
-
-   EDBUG(3, "BorderWinpartChangeContents");
-   ret = 1;
-   switch (ewin->border->part[i].flags)
-     {
-     case FLAG_TITLE:
-       title = EwinGetTitle(ewin);
-       if (title)
-          TclassApply(ewin->border->part[i].iclass, ewin->bits[i].win,
-                      ewin->bits[i].w, ewin->bits[i].h, ewin->active,
-                      ewin->sticky, ewin->bits[i].state, ewin->bits[i].expose,
-                      ewin->border->part[i].tclass, title);
-       break;
-     case FLAG_MINIICON:
-       break;
-     default:
-       break;
-     }
-   EDBUG_RETURN(ret);
-}
-
-void
-EwinBorderUpdateInfo(EWin * ewin)
-{
-   int                 i;
-
-   for (i = 0; i < ewin->border->num_winparts; i++)
-     {
-       if (ewin->border->part[i].flags == FLAG_TITLE)
-          BorderWinpartChangeContents(ewin, i);
-     }
-}
-
 void
 EwinBorderUpdateState(EWin * ewin)
 {
@@ -795,23 +757,39 @@
 }
 
 static void
-BorderWinpartITclassApply(EWin * ewin, int i)
+BorderWinpartITclassApply(EWin * ewin, int i, int force)
 {
    EWinBit            *ewb = &ewin->bits[i];
+   ImageState         *is;
    const char         *title;
 
+   if (ewb->win == None)
+      return;
+
+   is = IclassGetImageState(ewin->border->part[i].iclass, ewin->bits[i].state,
+                           ewin->active, ewin->sticky);
+   if (!force && ewin->bits[i].is == is)
+      return;
+   ewin->bits[i].is = is;
+
    IclassApply(ewin->border->part[i].iclass, ewb->win,
               ewb->w, ewb->h, ewin->active,
               ewin->sticky, ewb->state, ewb->expose, ST_BORDER);
 
-   if (ewin->border->part[i].flags == FLAG_TITLE)
+   switch (ewin->border->part[i].flags)
      {
+     case FLAG_TITLE:
        title = EwinGetTitle(ewin);
        if (title)
           TclassApply(ewin->border->part[i].iclass, ewb->win,
                       ewb->w, ewb->h, ewin->active,
                       ewin->sticky, ewb->state, ewb->expose,
                       ewin->border->part[i].tclass, title);
+       break;
+     case FLAG_MINIICON:
+       break;
+     default:
+       break;
      }
 }
 
@@ -840,7 +818,7 @@
 
    if ((resize) || (ewb->expose))
      {
-       BorderWinpartITclassApply(ewin, i);
+       BorderWinpartITclassApply(ewin, i, 1);
        ewb->expose = 0;
        ret = 1;
      }
@@ -849,13 +827,11 @@
 }
 
 void
-BorderWinpartChange(EWin * ewin, int i)
+BorderWinpartChange(EWin * ewin, int i, int force)
 {
    EDBUG(3, "BorderWinpartChange");
 
-   BorderWinpartITclassApply(ewin, i);
-   if (ewin->bits[i].win)
-      BorderWinpartChangeContents(ewin, i);
+   BorderWinpartITclassApply(ewin, i, force);
 
    if (!ewin->shapedone || ewin->border->changes_shape)
       PropagateShapes(ewin->win);
@@ -879,7 +855,7 @@
       Mode.queue_up = 0;
 
    for (i = 0; i < ewin->border->num_winparts; i++)
-      BorderWinpartITclassApply(ewin, i);
+      BorderWinpartITclassApply(ewin, i, do_shape);
 
    if (do_shape || !ewin->shapedone || ewin->border->changes_shape)
       PropagateShapes(ewin->win);
@@ -891,6 +867,18 @@
    EDBUG_RETURN_;
 }
 
+void
+EwinBorderUpdateInfo(EWin * ewin)
+{
+   int                 i;
+
+   for (i = 0; i < ewin->border->num_winparts; i++)
+     {
+       if (ewin->border->part[i].flags == FLAG_TITLE)
+          BorderWinpartITclassApply(ewin, i, 1);
+     }
+}
+
 static void
 BorderWinpartCalc(EWin * ewin, int i)
 {
@@ -1679,6 +1667,7 @@
             ewin->bits[i].expose = 0;
             ewin->bits[i].no_expose = 0;
             ewin->bits[i].left = 0;
+            ewin->bits[i].is = NULL;
          }
      }
 
@@ -3476,7 +3465,7 @@
    GrabThePointer(ewin->bits[j].win);
 
    ewin->bits[j].state = STATE_CLICKED;
-   BorderWinpartChange(ewin, j);
+   BorderWinpartChange(ewin, j, 0);
 
    if (ewin->border->part[j].aclass)
       EventAclass(ev, ewin, ewin->border->part[j].aclass);
@@ -3492,7 +3481,7 @@
    else
       ewin->bits[j].state = STATE_NORMAL;
    ewin->bits[j].left = 0;
-   BorderWinpartChange(ewin, j);
+   BorderWinpartChange(ewin, j, 0);
 
    win2 = WindowAtXY(ev->xbutton.x_root, ev->xbutton.y_root);
    if (win2 == Mode.context_win && (ewin->border->part[j].aclass))
@@ -3507,7 +3496,7 @@
    else
      {
        ewin->bits[j].state = STATE_HILITED;
-       BorderWinpartChange(ewin, j);
+       BorderWinpartChange(ewin, j, 0);
        if (ewin->border->part[j].aclass)
           EventAclass(ev, ewin, ewin->border->part[j].aclass);
      }
@@ -3521,7 +3510,7 @@
    else
      {
        ewin->bits[j].state = STATE_NORMAL;
-       BorderWinpartChange(ewin, j);
+       BorderWinpartChange(ewin, j, 0);
        if (ewin->border->part[j].aclass)
           EventAclass(ev, ewin, ewin->border->part[j].aclass);
      }
@@ -3532,7 +3521,7 @@
 {
    ewin->bits[j].left = 0;
    ewin->bits[j].state = STATE_NORMAL;
-   BorderWinpartChange(ewin, j);
+   BorderWinpartChange(ewin, j, 0);
    return;
    ev = NULL;
 }
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/iclass.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -3 -r1.41 -r1.42
--- iclass.c    26 Jun 2004 17:33:40 -0000      1.41
+++ iclass.c    26 Jun 2004 17:49:01 -0000      1.42
@@ -362,8 +362,8 @@
    return is;
 }
 
-static ImageState  *
-IclassGetImageState2(ImageClass * iclass, int state, int active, int sticky)
+ImageState         *
+IclassGetImageState(ImageClass * iclass, int state, int active, int sticky)
 {
    ImageState         *is;
 
@@ -813,7 +813,7 @@
    if (iclass->external)
       EDBUG_RETURN_;
 
-   is = IclassGetImageState2(iclass, state, active, sticky);
+   is = IclassGetImageState(iclass, state, active, sticky);
    if (!is)
       EDBUG_RETURN_;
 
@@ -876,7 +876,7 @@
    if (iclass->external)
       EDBUG_RETURN_;
 
-   is = IclassGetImageState2(iclass, state, active, sticky);
+   is = IclassGetImageState(iclass, state, active, sticky);
    if (!is)
       EDBUG_RETURN_;
 
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/menus.c,v
retrieving revision 1.139
retrieving revision 1.140
diff -u -3 -r1.139 -r1.140
--- menus.c     13 Jun 2004 22:37:22 -0000      1.139
+++ menus.c     26 Jun 2004 17:49:01 -0000      1.140
@@ -229,7 +229,7 @@
                  if (Mode.context_win == ewin99->bits[i99].win)
                    {
                       ewin99->bits[i99].state = STATE_NORMAL;
-                      BorderWinpartChange(ewin99, i99);
+                      BorderWinpartChange(ewin99, i99, 0);
                       i99 = ewin99->border->num_winparts;
                    }
               }
@@ -386,7 +386,7 @@
                if (Mode.context_win == ewin99->bits[i99].win)
                  {
                     ewin99->bits[i99].state = STATE_NORMAL;
-                    BorderWinpartChange(ewin99, i99);
+                    BorderWinpartChange(ewin99, i99, 0);
                     i99 = ewin99->border->num_winparts;
                  }
             }




-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 - 
digital self defense, top technical experts, no vendor pitches, 
unmatched networking opportunities. Visit www.blackhat.com
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to