Enable animation of resize operation.
Based on patches by Daniel Manjarres. SVN revision: 61191
This commit is contained in:
parent
8989b80e80
commit
961e2cf215
2
src/E.h
2
src/E.h
|
@ -223,6 +223,8 @@ typedef struct {
|
|||
char enable_sync_request;
|
||||
char dragbar_nocover;
|
||||
char enable_smart_max_hv;
|
||||
char maximize_animate;
|
||||
int maximize_speed;
|
||||
} movres;
|
||||
struct {
|
||||
int movres;
|
||||
|
|
|
@ -445,6 +445,44 @@ doEwinMoveResize(EWin * ewin, Desk * dsk, int x, int y, int w, int h, int flags)
|
|||
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
|
||||
EwinMove(EWin * ewin, int x, int y)
|
||||
{
|
||||
|
|
|
@ -397,6 +397,8 @@ void SlideEwinsTo(EWin ** ewin, int *fx, int *fy, int *tx,
|
|||
void EwinMove(EWin * ewin, int x, int y);
|
||||
void EwinResize(EWin * ewin, 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,
|
||||
int h, int grav);
|
||||
void EwinMoveToDesktop(EWin * ewin, Desk * d);
|
||||
|
|
|
@ -162,6 +162,8 @@ static const CfgItem MiscCfgItems[] = {
|
|||
CFG_ITEM_BOOL(Conf, movres.enable_sync_request, 0),
|
||||
CFG_ITEM_BOOL(Conf, movres.dragbar_nocover, 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.movres, 60),
|
||||
|
|
|
@ -31,6 +31,8 @@ typedef struct {
|
|||
int resize;
|
||||
int geominfo;
|
||||
int maximize;
|
||||
int maximize_speed;
|
||||
char maximize_animate;
|
||||
char dragbar_nocover;
|
||||
char enable_smart_max_hv;
|
||||
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.dragbar_nocover = dd->dragbar_nocover;
|
||||
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();
|
||||
}
|
||||
|
@ -78,6 +82,8 @@ _DlgFillMoveResize(Dialog * d __UNUSED__, DItem * table, void *data __UNUSED__)
|
|||
dd->sync_request = Conf.movres.enable_sync_request;
|
||||
dd->dragbar_nocover = Conf.movres.dragbar_nocover;
|
||||
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);
|
||||
|
||||
|
@ -236,6 +242,22 @@ _DlgFillMoveResize(Dialog * d __UNUSED__, DItem * table, void *data __UNUSED__)
|
|||
DialogItemSetColSpan(di, 2);
|
||||
DialogItemSetText(di, _("Enable smart maximization"));
|
||||
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 = {
|
||||
|
|
14
src/size.c
14
src/size.c
|
@ -827,22 +827,22 @@ MaxSizeHV(EWin * ewin, const char *resize_type, int hor, int ver)
|
|||
if (!hor && !ver)
|
||||
{
|
||||
/* Restore regular state */
|
||||
EwinMoveResize(ewin, ewin->save_max.x, ewin->save_max.y,
|
||||
ewin->save_max.w, ewin->save_max.h);
|
||||
EwinSlideSizeTo(ewin, ewin->save_max.x, ewin->save_max.y,
|
||||
ewin->save_max.w, ewin->save_max.h);
|
||||
goto done;
|
||||
}
|
||||
if (old_ver == ver && old_hor && !hor)
|
||||
{
|
||||
/* Turn off horizontal maxsize */
|
||||
EwinMoveResize(ewin, ewin->save_max.x, EoGetY(ewin),
|
||||
ewin->save_max.w, ewin->client.h);
|
||||
EwinSlideSizeTo(ewin, ewin->save_max.x, EoGetY(ewin),
|
||||
ewin->save_max.w, ewin->client.h);
|
||||
goto done;
|
||||
}
|
||||
if (old_hor == hor && old_ver && !ver)
|
||||
{
|
||||
/* Turn off vertical maxsize */
|
||||
EwinMoveResize(ewin, EoGetX(ewin), ewin->save_max.y,
|
||||
ewin->client.w, ewin->save_max.h);
|
||||
EwinSlideSizeTo(ewin, EoGetX(ewin), ewin->save_max.y,
|
||||
ewin->client.w, ewin->save_max.h);
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
@ -967,7 +967,7 @@ MaxSizeHV(EWin * ewin, const char *resize_type, int hor, int ver)
|
|||
if (h < 10)
|
||||
h = 10;
|
||||
|
||||
EwinMoveResize(ewin, x, y, w, h);
|
||||
EwinSlideSizeTo(ewin, x, y, w, h);
|
||||
done:
|
||||
ewin->state.maximizing = 0;
|
||||
HintsSetWindowState(ewin);
|
||||
|
|
Loading…
Reference in New Issue