Add new "technical/opaque" move/resize mode.
Work by Daniel Manjarres. SVN revision: 62889
This commit is contained in:
parent
460988a63d
commit
dc9e952685
1
src/E.h
1
src/E.h
|
@ -496,6 +496,7 @@ void DialogOKstr(const char *title, const char *txt);
|
||||||
#define MR_SHADED 3
|
#define MR_SHADED 3
|
||||||
#define MR_SEMI_SOLID 4
|
#define MR_SEMI_SOLID 4
|
||||||
#define MR_TRANSLUCENT 5
|
#define MR_TRANSLUCENT 5
|
||||||
|
#define MR_TECH_OPAQUE 6
|
||||||
|
|
||||||
int MoveResizeModeValidateMove(int md);
|
int MoveResizeModeValidateMove(int md);
|
||||||
int MoveResizeModeValidateResize(int md);
|
int MoveResizeModeValidateResize(int md);
|
||||||
|
|
22
src/draw.c
22
src/draw.c
|
@ -31,11 +31,11 @@
|
||||||
#if ENABLE_OLDMOVRES
|
#if ENABLE_OLDMOVRES
|
||||||
#define MR_ENABLE_STIPPLED 1 /* Enable shaded/semi-solid modes */
|
#define MR_ENABLE_STIPPLED 1 /* Enable shaded/semi-solid modes */
|
||||||
#define MR_ENABLE_TRANSLUCENT 1 /* Enable translucent mode */
|
#define MR_ENABLE_TRANSLUCENT 1 /* Enable translucent mode */
|
||||||
#define MR_MODES_MOVE 0x3f /* MR_OPAQUE through MR_TRANSLUCENT */
|
#define MR_MODES_MOVE 0x7f /* MR_OPAQUE through MR_TECH_OPAQUE */
|
||||||
#define MR_MODES_RESIZE 0x1f /* MR_OPAQUE through MR_SEMI_SOLID */
|
#define MR_MODES_RESIZE 0x5f /* MR_OPAQUE through MR_SEMI_SOLID and MR_TECH_OPAQUE */
|
||||||
#else
|
#else
|
||||||
#define MR_MODES_MOVE 0x07 /* MR_OPAQUE through MR_BOX */
|
#define MR_MODES_MOVE 0x47 /* MR_OPAQUE through MR_BOX and MR_TECH_OPAQUE */
|
||||||
#define MR_MODES_RESIZE 0x07 /* MR_OPAQUE through MR_BOX */
|
#define MR_MODES_RESIZE 0x47 /* MR_OPAQUE through MR_BOX and MR_TECH_OPAQUE */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if MR_ENABLE_STIPPLED
|
#if MR_ENABLE_STIPPLED
|
||||||
|
@ -217,8 +217,11 @@ typedef void (DrawFunc) (Drawable dr, GC gc, int a, int b, int c, int d,
|
||||||
static DrawFunc *const draw_functions[] = {
|
static DrawFunc *const draw_functions[] = {
|
||||||
do_draw_technical, do_draw_boxy,
|
do_draw_technical, do_draw_boxy,
|
||||||
#if MR_ENABLE_STIPPLED
|
#if MR_ENABLE_STIPPLED
|
||||||
do_draw_shaded, do_draw_semi_solid
|
do_draw_shaded, do_draw_semi_solid,
|
||||||
|
#else
|
||||||
|
NULL, NULL,
|
||||||
#endif /* MR_ENABLE_STIPPLED */
|
#endif /* MR_ENABLE_STIPPLED */
|
||||||
|
NULL, do_draw_technical,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -404,12 +407,13 @@ DrawEwinShape(EWin * ewin, int md, int x, int y, int w, int h,
|
||||||
(ewin->state.shaded || (w == ewin->shape_w && h == ewin->shape_h))))
|
(ewin->state.shaded || (w == ewin->shape_w && h == ewin->shape_h))))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (md == MR_OPAQUE)
|
if ((md == MR_OPAQUE) || (md == MR_TECH_OPAQUE))
|
||||||
{
|
{
|
||||||
EwinOpMoveResize(ewin, OPSRC_USER, x, y, w, h);
|
EwinOpMoveResize(ewin, OPSRC_USER, x, y, w, h);
|
||||||
EwinShapeSet(ewin);
|
EwinShapeSet(ewin);
|
||||||
CoordsShow(ewin);
|
CoordsShow(ewin);
|
||||||
goto done;
|
if (md == MR_OPAQUE)
|
||||||
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstlast == 0)
|
if (firstlast == 0)
|
||||||
|
@ -440,7 +444,8 @@ DrawEwinShape(EWin * ewin, int md, int x, int y, int w, int h,
|
||||||
|
|
||||||
EwinBorderGetSize(ewin, &psd->bl, &psd->br, &psd->bt, &psd->bb);
|
EwinBorderGetSize(ewin, &psd->bl, &psd->br, &psd->bt, &psd->bb);
|
||||||
|
|
||||||
if (md <= MR_BOX && Conf.movres.avoid_server_grab)
|
if (((md <= MR_BOX) || (md == MR_TECH_OPAQUE)) &&
|
||||||
|
Conf.movres.avoid_server_grab)
|
||||||
{
|
{
|
||||||
_ShapeDrawNograb_tech_box(psd, md, firstlast, x, y, w, h, seqno);
|
_ShapeDrawNograb_tech_box(psd, md, firstlast, x, y, w, h, seqno);
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -449,6 +454,7 @@ DrawEwinShape(EWin * ewin, int md, int x, int y, int w, int h,
|
||||||
switch (md)
|
switch (md)
|
||||||
{
|
{
|
||||||
case MR_TECHNICAL:
|
case MR_TECHNICAL:
|
||||||
|
case MR_TECH_OPAQUE:
|
||||||
case MR_BOX:
|
case MR_BOX:
|
||||||
#if MR_ENABLE_STIPPLED
|
#if MR_ENABLE_STIPPLED
|
||||||
case MR_SHADED:
|
case MR_SHADED:
|
||||||
|
|
17
src/ipc.c
17
src/ipc.c
|
@ -208,12 +208,9 @@ CfgStrlistIndex(const char *const *list, const char *str)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *const MovResCfgMoveModes[] = {
|
static const char *const MovResCfgMoveResizeModeNames[] = {
|
||||||
"opaque", "lined", "box", "shaded", "semi-solid", "translucent", NULL
|
"opaque", "lined", "box", "shaded", "semi-solid", "translucent", "techop",
|
||||||
};
|
NULL
|
||||||
|
|
||||||
static const char *const MovResCfgResizeModes[] = {
|
|
||||||
"opaque", "lined", "box", "shaded", "semi-solid", NULL
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *const MovResCfgInfoModes[] = {
|
static const char *const MovResCfgInfoModes[] = {
|
||||||
|
@ -243,11 +240,11 @@ IPC_MoveResize(const char *params)
|
||||||
Conf.movres.mode_move =
|
Conf.movres.mode_move =
|
||||||
MoveResizeModeValidateMove(Conf.movres.mode_move);
|
MoveResizeModeValidateMove(Conf.movres.mode_move);
|
||||||
IpcPrintf("Move mode: %s\n",
|
IpcPrintf("Move mode: %s\n",
|
||||||
MovResCfgMoveModes[Conf.movres.mode_move]);
|
MovResCfgMoveResizeModeNames[Conf.movres.mode_move]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
i = CfgStrlistIndex(MovResCfgMoveModes, param2);
|
i = CfgStrlistIndex(MovResCfgMoveResizeModeNames, param2);
|
||||||
if (i >= 0)
|
if (i >= 0)
|
||||||
{
|
{
|
||||||
Conf.movres.mode_move = i;
|
Conf.movres.mode_move = i;
|
||||||
|
@ -265,11 +262,11 @@ IPC_MoveResize(const char *params)
|
||||||
Conf.movres.mode_resize =
|
Conf.movres.mode_resize =
|
||||||
MoveResizeModeValidateResize(Conf.movres.mode_resize);
|
MoveResizeModeValidateResize(Conf.movres.mode_resize);
|
||||||
IpcPrintf("Resize mode: %s\n",
|
IpcPrintf("Resize mode: %s\n",
|
||||||
MovResCfgResizeModes[Conf.movres.mode_resize]);
|
MovResCfgMoveResizeModeNames[Conf.movres.mode_resize]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
i = CfgStrlistIndex(MovResCfgResizeModes, param2);
|
i = CfgStrlistIndex(MovResCfgMoveResizeModeNames, param2);
|
||||||
if (i >= 0)
|
if (i >= 0)
|
||||||
{
|
{
|
||||||
Conf.movres.mode_resize = i;
|
Conf.movres.mode_resize = i;
|
||||||
|
|
|
@ -56,7 +56,7 @@ _NeedServerGrab(int mode)
|
||||||
{
|
{
|
||||||
if (mode == MR_OPAQUE)
|
if (mode == MR_OPAQUE)
|
||||||
return 0;
|
return 0;
|
||||||
if (mode <= MR_BOX)
|
if ((mode <= MR_BOX) || (mode == MR_TECH_OPAQUE))
|
||||||
return !Conf.movres.avoid_server_grab;
|
return !Conf.movres.avoid_server_grab;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -127,7 +127,7 @@ MoveResizeMoveStart(EWin * ewin, int kbd, int constrained, int nogroup)
|
||||||
{
|
{
|
||||||
EwinShapeSet(gwins[i]);
|
EwinShapeSet(gwins[i]);
|
||||||
EwinOpFloatAt(gwins[i], OPSRC_USER, EoGetX(gwins[i]), EoGetY(gwins[i]));
|
EwinOpFloatAt(gwins[i], OPSRC_USER, EoGetX(gwins[i]), EoGetY(gwins[i]));
|
||||||
if (Mode_mr.mode == MR_OPAQUE)
|
if ((Mode_mr.mode == MR_OPAQUE) || (Mode_mr.mode == MR_TECH_OPAQUE))
|
||||||
{
|
{
|
||||||
ewin->state.moving = 1;
|
ewin->state.moving = 1;
|
||||||
EwinUpdateOpacity(gwins[i]);
|
EwinUpdateOpacity(gwins[i]);
|
||||||
|
@ -189,7 +189,7 @@ _MoveResizeMoveEnd(EWin * ewin)
|
||||||
EwinOpUnfloatAt(ewin, OPSRC_USER, d2,
|
EwinOpUnfloatAt(ewin, OPSRC_USER, d2,
|
||||||
ewin->shape_x - (EoGetX(d2) - EoGetX(d1)),
|
ewin->shape_x - (EoGetX(d2) - EoGetX(d1)),
|
||||||
ewin->shape_y - (EoGetY(d2) - EoGetY(d1)));
|
ewin->shape_y - (EoGetY(d2) - EoGetY(d1)));
|
||||||
if (Mode_mr.mode == MR_OPAQUE)
|
if ((Mode_mr.mode == MR_OPAQUE) || (Mode_mr.mode == MR_TECH_OPAQUE))
|
||||||
{
|
{
|
||||||
ewin->state.moving = 0;
|
ewin->state.moving = 0;
|
||||||
EwinUpdateOpacity(ewin);
|
EwinUpdateOpacity(ewin);
|
||||||
|
@ -328,7 +328,7 @@ MoveResizeResizeStart(EWin * ewin, int kbd, int hv)
|
||||||
/* Run idlers (stacking, border updates, ...) before drawing lines */
|
/* Run idlers (stacking, border updates, ...) before drawing lines */
|
||||||
IdlersRun();
|
IdlersRun();
|
||||||
}
|
}
|
||||||
if (Mode_mr.mode == MR_OPAQUE)
|
if ((Mode_mr.mode == MR_OPAQUE) || (Mode_mr.mode == MR_TECH_OPAQUE))
|
||||||
{
|
{
|
||||||
ewin->state.resizing = 1;
|
ewin->state.resizing = 1;
|
||||||
EwinUpdateOpacity(ewin);
|
EwinUpdateOpacity(ewin);
|
||||||
|
@ -465,7 +465,7 @@ _MoveResizeResizeEnd(EWin * ewin)
|
||||||
DrawEwinShape(ewin, Conf.movres.mode_resize, ewin->shape_x, ewin->shape_y,
|
DrawEwinShape(ewin, Conf.movres.mode_resize, ewin->shape_x, ewin->shape_y,
|
||||||
ewin->shape_w, ewin->shape_h, 2, 0);
|
ewin->shape_w, ewin->shape_h, 2, 0);
|
||||||
|
|
||||||
if (Mode_mr.mode == MR_OPAQUE)
|
if ((Mode_mr.mode == MR_OPAQUE) || (Mode_mr.mode == MR_TECH_OPAQUE))
|
||||||
{
|
{
|
||||||
ewin->state.resizing = 0;
|
ewin->state.resizing = 0;
|
||||||
EwinUpdateOpacity(ewin);
|
EwinUpdateOpacity(ewin);
|
||||||
|
|
|
@ -117,6 +117,16 @@ _DlgFillMoveResize(Dialog * d __UNUSED__, DItem * table, void *data __UNUSED__)
|
||||||
DialogItemRadioButtonSetFirst(di, radio2);
|
DialogItemRadioButtonSetFirst(di, radio2);
|
||||||
DialogItemRadioButtonGroupSetVal(di, MR_TECHNICAL);
|
DialogItemRadioButtonGroupSetVal(di, MR_TECHNICAL);
|
||||||
|
|
||||||
|
di = DialogAddItem(table, DITEM_RADIOBUTTON);
|
||||||
|
DialogItemSetText(di, _("TechOpaque"));
|
||||||
|
DialogItemRadioButtonSetFirst(di, radio1);
|
||||||
|
DialogItemRadioButtonGroupSetVal(di, MR_TECH_OPAQUE);
|
||||||
|
|
||||||
|
di = DialogAddItem(table, DITEM_RADIOBUTTON);
|
||||||
|
DialogItemSetText(di, _("TechOpaque"));
|
||||||
|
DialogItemRadioButtonSetFirst(di, radio2);
|
||||||
|
DialogItemRadioButtonGroupSetVal(di, MR_TECH_OPAQUE);
|
||||||
|
|
||||||
di = DialogAddItem(table, DITEM_RADIOBUTTON);
|
di = DialogAddItem(table, DITEM_RADIOBUTTON);
|
||||||
DialogItemSetText(di, _("Box"));
|
DialogItemSetText(di, _("Box"));
|
||||||
DialogItemRadioButtonSetFirst(di, radio1);
|
DialogItemRadioButtonSetFirst(di, radio1);
|
||||||
|
@ -418,6 +428,11 @@ _DlgFillPlacement(Dialog * d __UNUSED__, DItem * table, void *data __UNUSED__)
|
||||||
DialogItemRadioButtonSetFirst(di, radio);
|
DialogItemRadioButtonSetFirst(di, radio);
|
||||||
DialogItemRadioButtonGroupSetVal(di, MR_TECHNICAL);
|
DialogItemRadioButtonGroupSetVal(di, MR_TECHNICAL);
|
||||||
|
|
||||||
|
di = DialogAddItem(table, DITEM_RADIOBUTTON);
|
||||||
|
DialogItemSetText(di, _("TechOpaque"));
|
||||||
|
DialogItemRadioButtonSetFirst(di, radio);
|
||||||
|
DialogItemRadioButtonGroupSetVal(di, MR_TECH_OPAQUE);
|
||||||
|
|
||||||
di = DialogAddItem(table, DITEM_RADIOBUTTON);
|
di = DialogAddItem(table, DITEM_RADIOBUTTON);
|
||||||
DialogItemSetText(di, _("Box"));
|
DialogItemSetText(di, _("Box"));
|
||||||
DialogItemRadioButtonSetFirst(di, radio);
|
DialogItemRadioButtonSetFirst(di, radio);
|
||||||
|
@ -436,8 +451,6 @@ _DlgFillPlacement(Dialog * d __UNUSED__, DItem * table, void *data __UNUSED__)
|
||||||
DialogItemRadioButtonGroupSetValPtr(radio, &dd->slide_mode);
|
DialogItemRadioButtonGroupSetValPtr(radio, &dd->slide_mode);
|
||||||
#endif /* ENABLE_OLDMOVRES */
|
#endif /* ENABLE_OLDMOVRES */
|
||||||
|
|
||||||
DialogAddItem(table, DITEM_NONE);
|
|
||||||
|
|
||||||
di = DialogAddItem(table, DITEM_TEXT);
|
di = DialogAddItem(table, DITEM_TEXT);
|
||||||
DialogItemSetFill(di, 0, 0);
|
DialogItemSetFill(di, 0, 0);
|
||||||
DialogItemSetAlign(di, 1024, 512);
|
DialogItemSetAlign(di, 1024, 512);
|
||||||
|
|
|
@ -86,7 +86,7 @@ ShapewinCreate(int md)
|
||||||
ShapeInput, 0, 0, NULL, 0, ShapeSet, Unsorted);
|
ShapeInput, 0, 0, NULL, 0, ShapeSet, Unsorted);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (md == MR_TECHNICAL)
|
if ((md == MR_TECHNICAL) || (md == MR_TECH_OPAQUE))
|
||||||
{
|
{
|
||||||
sw->mask =
|
sw->mask =
|
||||||
ECreatePixmap(EoGetWin(sw), WinGetW(VROOT), WinGetH(VROOT), 1);
|
ECreatePixmap(EoGetWin(sw), WinGetW(VROOT), WinGetH(VROOT), 1);
|
||||||
|
@ -111,7 +111,7 @@ ShapewinShapeSet(ShapeWin * sw, int md, int x, int y, int w, int h,
|
||||||
w2 = w + bl + br;
|
w2 = w + bl + br;
|
||||||
h2 = h + bt + bb;
|
h2 = h + bt + bb;
|
||||||
|
|
||||||
if (md == MR_TECHNICAL)
|
if ((md == MR_TECHNICAL) || (md == MR_TECH_OPAQUE))
|
||||||
{
|
{
|
||||||
XSetForeground(disp, sw->gc, 0);
|
XSetForeground(disp, sw->gc, 0);
|
||||||
XFillRectangle(disp, sw->mask, sw->gc,
|
XFillRectangle(disp, sw->mask, sw->gc,
|
||||||
|
|
Loading…
Reference in New Issue