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