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 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;
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
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)
|
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);
|
||||||
|
|
Loading…
Reference in New Issue