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_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);

View File

@ -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:

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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,