forked from e16/e16
1
0
Fork 0

Enable animation of resize operation.

Based on patches by Daniel Manjarres.

SVN revision: 61191
This commit is contained in:
Kim Woelders 2011-07-10 06:24:00 +00:00
parent 8989b80e80
commit 961e2cf215
6 changed files with 73 additions and 7 deletions

View File

@ -223,6 +223,8 @@ typedef struct {
char enable_sync_request; char enable_sync_request;
char dragbar_nocover; char dragbar_nocover;
char enable_smart_max_hv; char enable_smart_max_hv;
char maximize_animate;
int maximize_speed;
} movres; } movres;
struct { struct {
int movres; int movres;

View File

@ -445,6 +445,44 @@ doEwinMoveResize(EWin * ewin, Desk * dsk, int x, int y, int w, int h, int flags)
call_depth--; call_depth--;
} }
void
EwinSlideSizeTo(EWin * ewin, int tx, int ty, int tw, int th)
{
int k, x, y, w, h;
int fx, fy, fw, fh, warp;
int speed = Conf.movres.maximize_speed;
fx = EoGetX(ewin);
fy = EoGetY(ewin);
fw = ewin->client.w;
fh = ewin->client.h;
warp = (ewin == GetEwinPointerInClient());
if (Conf.movres.maximize_animate)
{
ETimedLoopInit(0, 1024, speed);
for (k = 0; k <= 1024;)
{
x = ((fx * (1024 - k)) + (tx * k)) >> 10;
y = ((fy * (1024 - k)) + (ty * k)) >> 10;
w = ((fw * (1024 - k)) + (tw * k)) >> 10;
h = ((fh * (1024 - k)) + (th * k)) >> 10;
EwinMoveResize(ewin, x, y, w, h);
k = ETimedLoopNext();
}
}
EwinMoveResize(ewin, tx, ty, tw, th);
if (warp && ewin != GetEwinPointerInClient())
{
EwinWarpTo(ewin, 1);
FocusToEWin(ewin, FOCUS_SET);
}
}
void void
EwinMove(EWin * ewin, int x, int y) EwinMove(EWin * ewin, int x, int y)
{ {

View File

@ -397,6 +397,8 @@ void SlideEwinsTo(EWin ** ewin, int *fx, int *fy, int *tx,
void EwinMove(EWin * ewin, int x, int y); void EwinMove(EWin * ewin, int x, int y);
void EwinResize(EWin * ewin, int w, int h); void EwinResize(EWin * ewin, int w, int h);
void EwinMoveResize(EWin * ewin, int x, int y, int w, int h); void EwinMoveResize(EWin * ewin, int x, int y, int w, int h);
void EwinSlideSizeTo(EWin * ewin, int tx, int ty,
int tw, int th);
void EwinMoveResizeWithGravity(EWin * ewin, int x, int y, int w, void EwinMoveResizeWithGravity(EWin * ewin, int x, int y, int w,
int h, int grav); int h, int grav);
void EwinMoveToDesktop(EWin * ewin, Desk * d); void EwinMoveToDesktop(EWin * ewin, Desk * d);

View File

@ -162,6 +162,8 @@ static const CfgItem MiscCfgItems[] = {
CFG_ITEM_BOOL(Conf, movres.enable_sync_request, 0), CFG_ITEM_BOOL(Conf, movres.enable_sync_request, 0),
CFG_ITEM_BOOL(Conf, movres.dragbar_nocover, 0), CFG_ITEM_BOOL(Conf, movres.dragbar_nocover, 0),
CFG_ITEM_BOOL(Conf, movres.enable_smart_max_hv, 0), CFG_ITEM_BOOL(Conf, movres.enable_smart_max_hv, 0),
CFG_ITEM_BOOL(Conf, movres.maximize_animate, 0),
CFG_ITEM_INT(Conf, movres.maximize_speed, 6000),
CFG_ITEM_INT(Conf, opacity.menus, 85), CFG_ITEM_INT(Conf, opacity.menus, 85),
CFG_ITEM_INT(Conf, opacity.movres, 60), CFG_ITEM_INT(Conf, opacity.movres, 60),

View File

@ -31,6 +31,8 @@ typedef struct {
int resize; int resize;
int geominfo; int geominfo;
int maximize; int maximize;
int maximize_speed;
char maximize_animate;
char dragbar_nocover; char dragbar_nocover;
char enable_smart_max_hv; char enable_smart_max_hv;
char avoid_server_grab; char avoid_server_grab;
@ -55,6 +57,8 @@ CB_ConfigureMoveResize(Dialog * d __UNUSED__, int val, void *data __UNUSED__)
Conf.movres.enable_sync_request = dd->sync_request; Conf.movres.enable_sync_request = dd->sync_request;
Conf.movres.dragbar_nocover = dd->dragbar_nocover; Conf.movres.dragbar_nocover = dd->dragbar_nocover;
Conf.movres.enable_smart_max_hv = dd->enable_smart_max_hv; Conf.movres.enable_smart_max_hv = dd->enable_smart_max_hv;
Conf.movres.maximize_speed = dd->maximize_speed;
Conf.movres.maximize_animate = dd->maximize_animate;
autosave(); autosave();
} }
@ -78,6 +82,8 @@ _DlgFillMoveResize(Dialog * d __UNUSED__, DItem * table, void *data __UNUSED__)
dd->sync_request = Conf.movres.enable_sync_request; dd->sync_request = Conf.movres.enable_sync_request;
dd->dragbar_nocover = Conf.movres.dragbar_nocover; dd->dragbar_nocover = Conf.movres.dragbar_nocover;
dd->enable_smart_max_hv = Conf.movres.enable_smart_max_hv; dd->enable_smart_max_hv = Conf.movres.enable_smart_max_hv;
dd->maximize_speed = Conf.movres.maximize_speed;
dd->maximize_animate = Conf.movres.maximize_animate;
DialogItemTableSetOptions(table, 2, 0, 0, 0); DialogItemTableSetOptions(table, 2, 0, 0, 0);
@ -236,6 +242,22 @@ _DlgFillMoveResize(Dialog * d __UNUSED__, DItem * table, void *data __UNUSED__)
DialogItemSetColSpan(di, 2); DialogItemSetColSpan(di, 2);
DialogItemSetText(di, _("Enable smart maximization")); DialogItemSetText(di, _("Enable smart maximization"));
DialogItemCheckButtonSetPtr(di, &dd->enable_smart_max_hv); DialogItemCheckButtonSetPtr(di, &dd->enable_smart_max_hv);
di = DialogAddItem(table, DITEM_CHECKBUTTON);
DialogItemSetColSpan(di, 2);
DialogItemSetText(di, _("Animate window maximization"));
DialogItemCheckButtonSetPtr(di, &dd->maximize_animate);
di = DialogAddItem(table, DITEM_TEXT);
DialogItemSetFill(di, 0, 0);
DialogItemSetAlign(di, 1024, 512);
DialogItemSetText(di, _("Maximization animation speed:"));
di = DialogAddItem(table, DITEM_SLIDER);
DialogItemSliderSetBounds(di, 0, 20000);
DialogItemSliderSetUnits(di, 500);
DialogItemSliderSetJump(di, 1000);
DialogItemSliderSetValPtr(di, &dd->maximize_speed);
} }
const DialogDef DlgMoveResize = { const DialogDef DlgMoveResize = {

View File

@ -827,22 +827,22 @@ MaxSizeHV(EWin * ewin, const char *resize_type, int hor, int ver)
if (!hor && !ver) if (!hor && !ver)
{ {
/* Restore regular state */ /* Restore regular state */
EwinMoveResize(ewin, ewin->save_max.x, ewin->save_max.y, EwinSlideSizeTo(ewin, ewin->save_max.x, ewin->save_max.y,
ewin->save_max.w, ewin->save_max.h); ewin->save_max.w, ewin->save_max.h);
goto done; goto done;
} }
if (old_ver == ver && old_hor && !hor) if (old_ver == ver && old_hor && !hor)
{ {
/* Turn off horizontal maxsize */ /* Turn off horizontal maxsize */
EwinMoveResize(ewin, ewin->save_max.x, EoGetY(ewin), EwinSlideSizeTo(ewin, ewin->save_max.x, EoGetY(ewin),
ewin->save_max.w, ewin->client.h); ewin->save_max.w, ewin->client.h);
goto done; goto done;
} }
if (old_hor == hor && old_ver && !ver) if (old_hor == hor && old_ver && !ver)
{ {
/* Turn off vertical maxsize */ /* Turn off vertical maxsize */
EwinMoveResize(ewin, EoGetX(ewin), ewin->save_max.y, EwinSlideSizeTo(ewin, EoGetX(ewin), ewin->save_max.y,
ewin->client.w, ewin->save_max.h); ewin->client.w, ewin->save_max.h);
goto done; goto done;
} }
@ -967,7 +967,7 @@ MaxSizeHV(EWin * ewin, const char *resize_type, int hor, int ver)
if (h < 10) if (h < 10)
h = 10; h = 10;
EwinMoveResize(ewin, x, y, w, h); EwinSlideSizeTo(ewin, x, y, w, h);
done: done:
ewin->state.maximizing = 0; ewin->state.maximizing = 0;
HintsSetWindowState(ewin); HintsSetWindowState(ewin);