forked from e16/e16
1
0
Fork 0

Refactor shading code some more.

SVN revision: 38887
This commit is contained in:
Kim Woelders 2009-02-01 14:43:45 +00:00
parent 0ca5f9af6f
commit 66e11b03fb
1 changed files with 42 additions and 47 deletions

View File

@ -736,7 +736,7 @@ EwinInstantShade(EWin * ewin, int force)
{ {
XSetWindowAttributes att; XSetWindowAttributes att;
int x, y, w, h; int x, y, w, h;
int b, d; int minw, minh;
if ((ewin->border->border.left == 0) && (ewin->border->border.right == 0) if ((ewin->border->border.left == 0) && (ewin->border->border.right == 0)
&& (ewin->border->border.top == 0) && (ewin->border->border.bottom == 0)) && (ewin->border->border.top == 0) && (ewin->border->border.bottom == 0))
@ -751,39 +751,34 @@ EwinInstantShade(EWin * ewin, int force)
w = EoGetW(ewin); w = EoGetW(ewin);
h = EoGetH(ewin); h = EoGetH(ewin);
EwinBorderMinShadeSize(ewin, &minw, &minh);
switch (ewin->border->shadedir) switch (ewin->border->shadedir)
{ {
default: default:
case 0: case 0:
att.win_gravity = EastGravity; att.win_gravity = EastGravity;
EChangeWindowAttributes(EwinGetClientWin(ewin), CWWinGravity, &att); w = minw;
EwinBorderMinShadeSize(ewin, &b, &d);
w = b;
break; break;
case 1: case 1:
att.win_gravity = WestGravity; att.win_gravity = WestGravity;
EChangeWindowAttributes(EwinGetClientWin(ewin), CWWinGravity, &att);
EwinBorderMinShadeSize(ewin, &b, &d);
if (!Mode.wm.startup) if (!Mode.wm.startup)
x = x + w - b; x = x + w - minw;
w = b; w = minw;
break; break;
case 2: case 2:
att.win_gravity = SouthGravity; att.win_gravity = SouthGravity;
EChangeWindowAttributes(EwinGetClientWin(ewin), CWWinGravity, &att); h = minh;
EwinBorderMinShadeSize(ewin, &b, &d);
h = d;
break; break;
case 3: case 3:
att.win_gravity = SouthGravity; att.win_gravity = SouthGravity;
EChangeWindowAttributes(EwinGetClientWin(ewin), CWWinGravity, &att);
EwinBorderMinShadeSize(ewin, &b, &d);
if (!Mode.wm.startup) if (!Mode.wm.startup)
y = y + h - d; y = y + h - minh;
h = d; h = minh;
break; break;
} }
EChangeWindowAttributes(EwinGetClientWin(ewin), CWWinGravity, &att);
ewin->state.shaded = 2; ewin->state.shaded = 2;
EoMoveResize(ewin, x, y, w, h); EoMoveResize(ewin, x, y, w, h);
EMoveResizeWindow(ewin->win_container, -30, -30, 1, 1); EMoveResizeWindow(ewin->win_container, -30, -30, 1, 1);
@ -810,27 +805,19 @@ EwinInstantUnShade(EWin * ewin)
{ {
default: default:
case 0: case 0:
att.win_gravity = EastGravity;
EChangeWindowAttributes(EwinGetClientWin(ewin), CWWinGravity, &att);
w = ewin->client.w + ewin->border->border.left + w = ewin->client.w + ewin->border->border.left +
ewin->border->border.right; ewin->border->border.right;
break; break;
case 1: case 1:
att.win_gravity = WestGravity;
EChangeWindowAttributes(EwinGetClientWin(ewin), CWWinGravity, &att);
w = ewin->client.w + ewin->border->border.left + w = ewin->client.w + ewin->border->border.left +
ewin->border->border.right; ewin->border->border.right;
x = x + EoGetW(ewin) - w; x = x + EoGetW(ewin) - w;
break; break;
case 2: case 2:
att.win_gravity = SouthGravity;
EChangeWindowAttributes(EwinGetClientWin(ewin), CWWinGravity, &att);
h = ewin->client.h + ewin->border->border.top + h = ewin->client.h + ewin->border->border.top +
ewin->border->border.bottom; ewin->border->border.bottom;
break; break;
case 3: case 3:
att.win_gravity = SouthGravity;
EChangeWindowAttributes(EwinGetClientWin(ewin), CWWinGravity, &att);
h = ewin->client.h + ewin->border->border.top + h = ewin->client.h + ewin->border->border.top +
ewin->border->border.bottom; ewin->border->border.bottom;
y = y + EoGetH(ewin) - h; y = y + EoGetH(ewin) - h;
@ -859,14 +846,15 @@ typedef struct {
_xywh start; _xywh start;
_xywh final; _xywh final;
int a, b, c, d; int a, b, c, d;
} _ewin_shading_data; } _ewin_shade_data;
static void static void
EwinShadeStart(EWin * ewin, _ewin_shading_data * esd) _EwinShadeStart(_ewin_shade_data * esd)
{ {
EWin *ewin = esd->ewin;
int minw, minh;
XSetWindowAttributes att; XSetWindowAttributes att;
esd->ewin = ewin;
esd->start.x = EoGetX(ewin); esd->start.x = EoGetX(ewin);
esd->start.y = EoGetY(ewin); esd->start.y = EoGetY(ewin);
esd->start.w = EoGetW(ewin); esd->start.w = EoGetW(ewin);
@ -875,6 +863,8 @@ EwinShadeStart(EWin * ewin, _ewin_shading_data * esd)
ewin->state.shading = 1; ewin->state.shading = 1;
EwinBorderMinShadeSize(ewin, &minw, &minh);
#if 0 #if 0
Eprintf("EwinShade-B %d\n", ewin->border->shadedir); Eprintf("EwinShade-B %d\n", ewin->border->shadedir);
EGrabServer(); EGrabServer();
@ -885,28 +875,28 @@ EwinShadeStart(EWin * ewin, _ewin_shading_data * esd)
default: default:
case 0: case 0:
att.win_gravity = EastGravity; att.win_gravity = EastGravity;
EwinBorderMinShadeSize(ewin, &esd->b, &esd->c);
esd->a = esd->start.w; esd->a = esd->start.w;
esd->b = minw;
esd->final.w = esd->b; esd->final.w = esd->b;
break; break;
case 1: case 1:
att.win_gravity = WestGravity; att.win_gravity = WestGravity;
EwinBorderMinShadeSize(ewin, &esd->b, &esd->c);
esd->a = esd->start.w; esd->a = esd->start.w;
esd->b = minw;
esd->c = esd->start.x + esd->start.w; esd->c = esd->start.x + esd->start.w;
esd->final.x = esd->c - esd->b; esd->final.x = esd->c - esd->b;
esd->final.w = esd->b; esd->final.w = esd->b;
break; break;
case 2: case 2:
att.win_gravity = SouthGravity; att.win_gravity = SouthGravity;
EwinBorderMinShadeSize(ewin, &esd->c, &esd->b);
esd->a = esd->start.h; esd->a = esd->start.h;
esd->b = minh;
esd->final.h = esd->b; esd->final.h = esd->b;
break; break;
case 3: case 3:
att.win_gravity = SouthGravity; att.win_gravity = SouthGravity;
EwinBorderMinShadeSize(ewin, &esd->c, &esd->b);
esd->a = esd->start.h; esd->a = esd->start.h;
esd->b = minh;
esd->c = esd->start.y + esd->start.h; esd->c = esd->start.y + esd->start.h;
esd->final.y = esd->c - esd->b; esd->final.y = esd->c - esd->b;
esd->final.h = esd->b; esd->final.h = esd->b;
@ -917,8 +907,10 @@ EwinShadeStart(EWin * ewin, _ewin_shading_data * esd)
} }
static void static void
EwinShadeEnd(EWin * ewin, _ewin_shading_data * esd) _EwinShadeEnd(_ewin_shade_data * esd)
{ {
EWin *ewin = esd->ewin;
EoMoveResize(ewin, esd->final.x, esd->final.y, esd->final.w, esd->final.h); EoMoveResize(ewin, esd->final.x, esd->final.y, esd->final.w, esd->final.h);
ewin->state.shaded = 2; ewin->state.shaded = 2;
EMoveResizeWindow(ewin->win_container, -30, -30, 1, 1); EMoveResizeWindow(ewin->win_container, -30, -30, 1, 1);
@ -940,8 +932,9 @@ EwinShadeEnd(EWin * ewin, _ewin_shading_data * esd)
} }
static void static void
EwinShadeRun(EWin * ewin, _ewin_shading_data * esd) _EwinShadeRun(_ewin_shade_data * esd)
{ {
EWin *ewin = esd->ewin;
int k, x, y, w, h, ww, hh, cow, coh, shx, shy; int k, x, y, w, h, ww, hh, cow, coh, shx, shy;
x = esd->start.x; x = esd->start.x;
@ -1017,7 +1010,7 @@ EwinShadeRun(EWin * ewin, _ewin_shading_data * esd)
void void
EwinShade(EWin * ewin) EwinShade(EWin * ewin)
{ {
_ewin_shading_data esd; _ewin_shade_data esd;
if ((ewin->border->border.left == 0) && (ewin->border->border.right == 0) && if ((ewin->border->border.left == 0) && (ewin->border->border.right == 0) &&
(ewin->border->border.top == 0) && (ewin->border->border.bottom == 0)) (ewin->border->border.top == 0) && (ewin->border->border.bottom == 0))
@ -1031,17 +1024,19 @@ EwinShade(EWin * ewin)
DeskRestack(EoGetDesk(ewin)); /* Do any pending stacking ops now */ DeskRestack(EoGetDesk(ewin)); /* Do any pending stacking ops now */
EwinShadeStart(ewin, &esd); esd.ewin = ewin;
_EwinShadeStart(&esd);
if ((Conf.shading.animate) || (ewin->type == EWIN_TYPE_MENU)) if ((Conf.shading.animate) || (ewin->type == EWIN_TYPE_MENU))
{ {
EwinShadeRun(ewin, &esd); _EwinShadeRun(&esd);
} }
EwinShadeEnd(ewin, &esd); _EwinShadeEnd(&esd);
} }
static void static void
EwinUnshadeStart(EWin * ewin, _ewin_shading_data * esd) _EwinUnshadeStart(_ewin_shade_data * esd)
{ {
EWin *ewin = esd->ewin;
int cow, coh, clx, cly; int cow, coh, clx, cly;
XSetWindowAttributes att; XSetWindowAttributes att;
@ -1070,7 +1065,6 @@ EwinUnshadeStart(EWin * ewin, _ewin_shading_data * esd)
default: default:
case 0: case 0:
att.win_gravity = EastGravity; att.win_gravity = EastGravity;
EChangeWindowAttributes(EwinGetClientWin(ewin), CWWinGravity, &att);
esd->a = ewin->border->border.left + ewin->border->border.right; esd->a = ewin->border->border.left + ewin->border->border.right;
esd->b = ewin->client.w + esd->a; esd->b = ewin->client.w + esd->a;
esd->c = 0; /* Not used */ esd->c = 0; /* Not used */
@ -1080,7 +1074,6 @@ EwinUnshadeStart(EWin * ewin, _ewin_shading_data * esd)
break; break;
case 1: case 1:
att.win_gravity = WestGravity; att.win_gravity = WestGravity;
EChangeWindowAttributes(EwinGetClientWin(ewin), CWWinGravity, &att);
esd->a = ewin->border->border.left + ewin->border->border.right; esd->a = ewin->border->border.left + ewin->border->border.right;
esd->b = ewin->client.w + esd->a; esd->b = ewin->client.w + esd->a;
esd->c = esd->start.x + esd->start.w; /* NB! w != a is possible */ esd->c = esd->start.x + esd->start.w; /* NB! w != a is possible */
@ -1090,7 +1083,6 @@ EwinUnshadeStart(EWin * ewin, _ewin_shading_data * esd)
break; break;
case 2: case 2:
att.win_gravity = SouthGravity; att.win_gravity = SouthGravity;
EChangeWindowAttributes(EwinGetClientWin(ewin), CWWinGravity, &att);
esd->a = ewin->border->border.top + ewin->border->border.bottom; esd->a = ewin->border->border.top + ewin->border->border.bottom;
esd->b = ewin->client.h + esd->a; esd->b = ewin->client.h + esd->a;
esd->c = 0; /* Not used */ esd->c = 0; /* Not used */
@ -1100,7 +1092,6 @@ EwinUnshadeStart(EWin * ewin, _ewin_shading_data * esd)
break; break;
case 3: case 3:
att.win_gravity = SouthGravity; att.win_gravity = SouthGravity;
EChangeWindowAttributes(EwinGetClientWin(ewin), CWWinGravity, &att);
esd->a = ewin->border->border.top + ewin->border->border.bottom; esd->a = ewin->border->border.top + ewin->border->border.bottom;
esd->b = ewin->client.h + esd->a; esd->b = ewin->client.h + esd->a;
esd->c = esd->start.y + esd->start.h; /* NB! h != a is possible */ esd->c = esd->start.y + esd->start.h; /* NB! h != a is possible */
@ -1111,6 +1102,7 @@ EwinUnshadeStart(EWin * ewin, _ewin_shading_data * esd)
break; break;
} }
EChangeWindowAttributes(EwinGetClientWin(ewin), CWWinGravity, &att);
EMoveResizeWindow(ewin->win_container, EMoveResizeWindow(ewin->win_container,
ewin->border->border.left, ewin->border->border.top, ewin->border->border.left, ewin->border->border.top,
cow, coh); cow, coh);
@ -1122,8 +1114,9 @@ EwinUnshadeStart(EWin * ewin, _ewin_shading_data * esd)
} }
static void static void
EwinUnshadeEnd(EWin * ewin, _ewin_shading_data * esd) _EwinUnshadeEnd(_ewin_shade_data * esd)
{ {
EWin *ewin = esd->ewin;
XSetWindowAttributes att; XSetWindowAttributes att;
EoMoveResize(ewin, esd->final.x, esd->final.y, esd->final.w, esd->final.h); EoMoveResize(ewin, esd->final.x, esd->final.y, esd->final.w, esd->final.h);
@ -1155,8 +1148,9 @@ EwinUnshadeEnd(EWin * ewin, _ewin_shading_data * esd)
} }
static void static void
EwinUnshadeRun(EWin * ewin, _ewin_shading_data * esd) _EwinUnshadeRun(_ewin_shade_data * esd)
{ {
EWin *ewin = esd->ewin;
int k, x, y, w, h, ww, hh, cow, coh, shx, shy; int k, x, y, w, h, ww, hh, cow, coh, shx, shy;
x = esd->start.x; x = esd->start.x;
@ -1224,7 +1218,7 @@ EwinUnshadeRun(EWin * ewin, _ewin_shading_data * esd)
void void
EwinUnShade(EWin * ewin) EwinUnShade(EWin * ewin)
{ {
_ewin_shading_data esd; _ewin_shade_data esd;
if (GetZoomEWin() == ewin) if (GetZoomEWin() == ewin)
return; return;
@ -1233,12 +1227,13 @@ EwinUnShade(EWin * ewin)
DeskRestack(EoGetDesk(ewin)); /* Do any pending stacking ops now */ DeskRestack(EoGetDesk(ewin)); /* Do any pending stacking ops now */
EwinUnshadeStart(ewin, &esd); esd.ewin = ewin;
_EwinUnshadeStart(&esd);
if ((Conf.shading.animate) || (ewin->type == EWIN_TYPE_MENU)) if ((Conf.shading.animate) || (ewin->type == EWIN_TYPE_MENU))
{ {
EwinUnshadeRun(ewin, &esd); _EwinUnshadeRun(&esd);
} }
EwinUnshadeEnd(ewin, &esd); _EwinUnshadeEnd(&esd);
} }
void void