Add new "technical/opaque" move/resize mode.

Work by Daniel Manjarres.

SVN revision: 62889
This commit is contained in:
Kim Woelders 2011-08-27 15:42:44 +00:00
parent 460988a63d
commit dc9e952685
6 changed files with 44 additions and 27 deletions

View File

@ -496,6 +496,7 @@ void DialogOKstr(const char *title, const char *txt);
#define MR_SHADED 3
#define MR_SEMI_SOLID 4
#define MR_TRANSLUCENT 5
#define MR_TECH_OPAQUE 6
int MoveResizeModeValidateMove(int md);
int MoveResizeModeValidateResize(int md);

View File

@ -31,11 +31,11 @@
#if ENABLE_OLDMOVRES
#define MR_ENABLE_STIPPLED 1 /* Enable shaded/semi-solid modes */
#define MR_ENABLE_TRANSLUCENT 1 /* Enable translucent mode */
#define MR_MODES_MOVE 0x3f /* MR_OPAQUE through MR_TRANSLUCENT */
#define MR_MODES_RESIZE 0x1f /* MR_OPAQUE through MR_SEMI_SOLID */
#define MR_MODES_MOVE 0x7f /* MR_OPAQUE through MR_TECH_OPAQUE */
#define MR_MODES_RESIZE 0x5f /* MR_OPAQUE through MR_SEMI_SOLID and MR_TECH_OPAQUE */
#else
#define MR_MODES_MOVE 0x07 /* MR_OPAQUE through MR_BOX */
#define MR_MODES_RESIZE 0x07 /* MR_OPAQUE through MR_BOX */
#define MR_MODES_MOVE 0x47 /* MR_OPAQUE through MR_BOX and MR_TECH_OPAQUE */
#define MR_MODES_RESIZE 0x47 /* MR_OPAQUE through MR_BOX and MR_TECH_OPAQUE */
#endif
#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[] = {
do_draw_technical, do_draw_boxy,
#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 */
NULL, do_draw_technical,
};
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))))
return;
if (md == MR_OPAQUE)
if ((md == MR_OPAQUE) || (md == MR_TECH_OPAQUE))
{
EwinOpMoveResize(ewin, OPSRC_USER, x, y, w, h);
EwinShapeSet(ewin);
CoordsShow(ewin);
goto done;
if (md == MR_OPAQUE)
goto done;
}
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);
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);
goto done;
@ -449,6 +454,7 @@ DrawEwinShape(EWin * ewin, int md, int x, int y, int w, int h,
switch (md)
{
case MR_TECHNICAL:
case MR_TECH_OPAQUE:
case MR_BOX:
#if MR_ENABLE_STIPPLED
case MR_SHADED:

View File

@ -208,12 +208,9 @@ CfgStrlistIndex(const char *const *list, const char *str)
return -1;
}
static const char *const MovResCfgMoveModes[] = {
"opaque", "lined", "box", "shaded", "semi-solid", "translucent", NULL
};
static const char *const MovResCfgResizeModes[] = {
"opaque", "lined", "box", "shaded", "semi-solid", NULL
static const char *const MovResCfgMoveResizeModeNames[] = {
"opaque", "lined", "box", "shaded", "semi-solid", "translucent", "techop",
NULL
};
static const char *const MovResCfgInfoModes[] = {
@ -243,11 +240,11 @@ IPC_MoveResize(const char *params)
Conf.movres.mode_move =
MoveResizeModeValidateMove(Conf.movres.mode_move);
IpcPrintf("Move mode: %s\n",
MovResCfgMoveModes[Conf.movres.mode_move]);
MovResCfgMoveResizeModeNames[Conf.movres.mode_move]);
return;
}
i = CfgStrlistIndex(MovResCfgMoveModes, param2);
i = CfgStrlistIndex(MovResCfgMoveResizeModeNames, param2);
if (i >= 0)
{
Conf.movres.mode_move = i;
@ -265,11 +262,11 @@ IPC_MoveResize(const char *params)
Conf.movres.mode_resize =
MoveResizeModeValidateResize(Conf.movres.mode_resize);
IpcPrintf("Resize mode: %s\n",
MovResCfgResizeModes[Conf.movres.mode_resize]);
MovResCfgMoveResizeModeNames[Conf.movres.mode_resize]);
return;
}
i = CfgStrlistIndex(MovResCfgResizeModes, param2);
i = CfgStrlistIndex(MovResCfgMoveResizeModeNames, param2);
if (i >= 0)
{
Conf.movres.mode_resize = i;

View File

@ -56,7 +56,7 @@ _NeedServerGrab(int mode)
{
if (mode == MR_OPAQUE)
return 0;
if (mode <= MR_BOX)
if ((mode <= MR_BOX) || (mode == MR_TECH_OPAQUE))
return !Conf.movres.avoid_server_grab;
return 1;
}
@ -127,7 +127,7 @@ MoveResizeMoveStart(EWin * ewin, int kbd, int constrained, int nogroup)
{
EwinShapeSet(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;
EwinUpdateOpacity(gwins[i]);
@ -189,7 +189,7 @@ _MoveResizeMoveEnd(EWin * ewin)
EwinOpUnfloatAt(ewin, OPSRC_USER, d2,
ewin->shape_x - (EoGetX(d2) - EoGetX(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;
EwinUpdateOpacity(ewin);
@ -328,7 +328,7 @@ MoveResizeResizeStart(EWin * ewin, int kbd, int hv)
/* Run idlers (stacking, border updates, ...) before drawing lines */
IdlersRun();
}
if (Mode_mr.mode == MR_OPAQUE)
if ((Mode_mr.mode == MR_OPAQUE) || (Mode_mr.mode == MR_TECH_OPAQUE))
{
ewin->state.resizing = 1;
EwinUpdateOpacity(ewin);
@ -465,7 +465,7 @@ _MoveResizeResizeEnd(EWin * ewin)
DrawEwinShape(ewin, Conf.movres.mode_resize, ewin->shape_x, ewin->shape_y,
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;
EwinUpdateOpacity(ewin);

View File

@ -117,6 +117,16 @@ _DlgFillMoveResize(Dialog * d __UNUSED__, DItem * table, void *data __UNUSED__)
DialogItemRadioButtonSetFirst(di, radio2);
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);
DialogItemSetText(di, _("Box"));
DialogItemRadioButtonSetFirst(di, radio1);
@ -418,6 +428,11 @@ _DlgFillPlacement(Dialog * d __UNUSED__, DItem * table, void *data __UNUSED__)
DialogItemRadioButtonSetFirst(di, radio);
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);
DialogItemSetText(di, _("Box"));
DialogItemRadioButtonSetFirst(di, radio);
@ -436,8 +451,6 @@ _DlgFillPlacement(Dialog * d __UNUSED__, DItem * table, void *data __UNUSED__)
DialogItemRadioButtonGroupSetValPtr(radio, &dd->slide_mode);
#endif /* ENABLE_OLDMOVRES */
DialogAddItem(table, DITEM_NONE);
di = DialogAddItem(table, DITEM_TEXT);
DialogItemSetFill(di, 0, 0);
DialogItemSetAlign(di, 1024, 512);

View File

@ -86,7 +86,7 @@ ShapewinCreate(int md)
ShapeInput, 0, 0, NULL, 0, ShapeSet, Unsorted);
#endif
if (md == MR_TECHNICAL)
if ((md == MR_TECHNICAL) || (md == MR_TECH_OPAQUE))
{
sw->mask =
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;
h2 = h + bt + bb;
if (md == MR_TECHNICAL)
if ((md == MR_TECHNICAL) || (md == MR_TECH_OPAQUE))
{
XSetForeground(disp, sw->gc, 0);
XFillRectangle(disp, sw->mask, sw->gc,