When using DMX console input, make detached screens display as grey (vs.
white for attached and black for dead-space).
This commit is contained in:
parent
1498414cc8
commit
d374dffb20
|
@ -1486,5 +1486,8 @@ int dmxDetachScreen(int idx)
|
||||||
/* Free the remaining screen resources and close the screen */
|
/* Free the remaining screen resources and close the screen */
|
||||||
dmxBECloseScreen(screenInfo.screens[idx]);
|
dmxBECloseScreen(screenInfo.screens[idx]);
|
||||||
|
|
||||||
|
/* Adjust the cursor boundaries (paints detached console window) */
|
||||||
|
dmxAdjustCursorBoundaries();
|
||||||
|
|
||||||
return 0; /* Success */
|
return 0; /* Success */
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,6 +64,7 @@
|
||||||
#define CONSOLE_FG_COLOR "black"
|
#define CONSOLE_FG_COLOR "black"
|
||||||
#define CONSOLE_SCREEN_BG_COLOR "white"
|
#define CONSOLE_SCREEN_BG_COLOR "white"
|
||||||
#define CONSOLE_SCREEN_FG_COLOR "black"
|
#define CONSOLE_SCREEN_FG_COLOR "black"
|
||||||
|
#define CONSOLE_SCREEN_DET_COLOR "gray75"
|
||||||
#define CONSOLE_SCREEN_CUR_COLOR "red"
|
#define CONSOLE_SCREEN_CUR_COLOR "red"
|
||||||
|
|
||||||
#if DMX_CONSOLE_DEBUG
|
#if DMX_CONSOLE_DEBUG
|
||||||
|
@ -101,7 +102,7 @@ typedef struct _myPrivate {
|
||||||
int consHeight;
|
int consHeight;
|
||||||
double xScale;
|
double xScale;
|
||||||
double yScale;
|
double yScale;
|
||||||
XlibGC gc, gcRev, gcCur;
|
XlibGC gc, gcDet, gcRev, gcCur;
|
||||||
int grabbed, fine, captured;
|
int grabbed, fine, captured;
|
||||||
Cursor cursorNormal, cursorGrabbed, cursorEmpty;
|
Cursor cursorNormal, cursorGrabbed, cursorEmpty;
|
||||||
Pixmap pixmap;
|
Pixmap pixmap;
|
||||||
|
@ -201,8 +202,8 @@ static void dmxConsoleDrawWindows(pointer private)
|
||||||
XUnionRectWithRegion(&rect, whole, whole);
|
XUnionRectWithRegion(&rect, whole, whole);
|
||||||
|
|
||||||
for (i = 0; i < dmxNumScreens; i++) {
|
for (i = 0; i < dmxNumScreens; i++) {
|
||||||
WindowPtr pRoot = WindowTable[i];
|
WindowPtr pRoot = WindowTable[i];
|
||||||
WindowPtr pChild;
|
WindowPtr pChild;
|
||||||
|
|
||||||
#if DMX_WINDOW_DEBUG
|
#if DMX_WINDOW_DEBUG
|
||||||
dmxLog(dmxDebug, "%lu %p %p %p 2\n",
|
dmxLog(dmxDebug, "%lu %p %p %p 2\n",
|
||||||
|
@ -257,14 +258,16 @@ static void dmxConsoleDraw(myPrivate *priv, int updateCursor, int update)
|
||||||
priv->consWidth, priv->consHeight);
|
priv->consWidth, priv->consHeight);
|
||||||
|
|
||||||
for (i = 0; i < dmxNumScreens; i++) {
|
for (i = 0; i < dmxNumScreens; i++) {
|
||||||
XFillRectangle(dpy, priv->pixmap, priv->gcRev,
|
DMXScreenInfo *dmxScreen = &dmxScreens[i];
|
||||||
|
XFillRectangle(dpy, priv->pixmap,
|
||||||
|
dmxScreen->beDisplay ? priv->gcRev : priv->gcDet,
|
||||||
scalex(priv, dixScreenOrigins[i].x),
|
scalex(priv, dixScreenOrigins[i].x),
|
||||||
scaley(priv, dixScreenOrigins[i].y),
|
scaley(priv, dixScreenOrigins[i].y),
|
||||||
scalex(priv, screenInfo.screens[i]->width),
|
scalex(priv, screenInfo.screens[i]->width),
|
||||||
scaley(priv, screenInfo.screens[i]->height));
|
scaley(priv, screenInfo.screens[i]->height));
|
||||||
}
|
}
|
||||||
for (i = 0; i < dmxNumScreens; i++) {
|
for (i = 0; i < dmxNumScreens; i++) {
|
||||||
XDrawRectangle(dpy, priv->pixmap, priv->gc,
|
XDrawRectangle(dpy, priv->pixmap, priv->gc,
|
||||||
scalex(priv, dixScreenOrigins[i].x),
|
scalex(priv, dixScreenOrigins[i].x),
|
||||||
scaley(priv, dixScreenOrigins[i].y),
|
scaley(priv, dixScreenOrigins[i].y),
|
||||||
scalex(priv, screenInfo.screens[i]->width),
|
scalex(priv, screenInfo.screens[i]->width),
|
||||||
|
@ -289,9 +292,11 @@ static void dmxConsoleClearCursor(myPrivate *priv, int x, int y,
|
||||||
rect->width = cw;
|
rect->width = cw;
|
||||||
rect->height = ch;
|
rect->height = ch;
|
||||||
XSetClipRectangles(priv->display, priv->gc, 0, 0, rect, 1, Unsorted);
|
XSetClipRectangles(priv->display, priv->gc, 0, 0, rect, 1, Unsorted);
|
||||||
|
XSetClipRectangles(priv->display, priv->gcDet, 0, 0, rect, 1, Unsorted);
|
||||||
XSetClipRectangles(priv->display, priv->gcRev, 0, 0, rect, 1, Unsorted);
|
XSetClipRectangles(priv->display, priv->gcRev, 0, 0, rect, 1, Unsorted);
|
||||||
dmxConsoleDraw(priv, 0, 0);
|
dmxConsoleDraw(priv, 0, 0);
|
||||||
XSetClipMask(priv->display, priv->gc, None);
|
XSetClipMask(priv->display, priv->gc, None);
|
||||||
|
XSetClipMask(priv->display, priv->gcDet, None);
|
||||||
XSetClipMask(priv->display, priv->gcRev, None);
|
XSetClipMask(priv->display, priv->gcRev, None);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -485,9 +490,11 @@ void dmxConsoleCollectEvents(DevicePtr pDev,
|
||||||
XUnionRectWithRegion(&rect, r, r);
|
XUnionRectWithRegion(&rect, r, r);
|
||||||
if (X.xexpose.count == 0) {
|
if (X.xexpose.count == 0) {
|
||||||
XSetRegion(dpy, priv->gc, r);
|
XSetRegion(dpy, priv->gc, r);
|
||||||
|
XSetRegion(dpy, priv->gcDet, r);
|
||||||
XSetRegion(dpy, priv->gcRev, r);
|
XSetRegion(dpy, priv->gcRev, r);
|
||||||
dmxConsoleDraw(priv, 1, 1);
|
dmxConsoleDraw(priv, 1, 1);
|
||||||
XSetClipMask(dpy, priv->gc, None);
|
XSetClipMask(dpy, priv->gc, None);
|
||||||
|
XSetClipMask(dpy, priv->gcDet, None);
|
||||||
XSetClipMask(dpy, priv->gcRev, None);
|
XSetClipMask(dpy, priv->gcRev, None);
|
||||||
XDestroyRegion(r);
|
XDestroyRegion(r);
|
||||||
rInitialized = 0;
|
rInitialized = 0;
|
||||||
|
@ -590,7 +597,9 @@ static void dmxCloseConsole(myPrivate *priv)
|
||||||
dmxCommonRestoreState(priv);
|
dmxCommonRestoreState(priv);
|
||||||
if (priv->display) {
|
if (priv->display) {
|
||||||
XFreeGC(priv->display, priv->gc);
|
XFreeGC(priv->display, priv->gc);
|
||||||
|
XFreeGC(priv->display, priv->gcDet);
|
||||||
XFreeGC(priv->display, priv->gcRev);
|
XFreeGC(priv->display, priv->gcRev);
|
||||||
|
XFreeGC(priv->display, priv->gcCur);
|
||||||
if (!dmxInput->console) XCloseDisplay(priv->display);
|
if (!dmxInput->console) XCloseDisplay(priv->display);
|
||||||
}
|
}
|
||||||
priv->display = NULL;
|
priv->display = NULL;
|
||||||
|
@ -809,6 +818,15 @@ void dmxConsoleInit(DevicePtr pDev)
|
||||||
|
|
||||||
priv->gc = XCreateGC(dpy, win, mask, &gcvals);
|
priv->gc = XCreateGC(dpy, win, mask, &gcvals);
|
||||||
|
|
||||||
|
tmp = gcvals.foreground;
|
||||||
|
if (XParseColor(dpy, attribs.colormap, CONSOLE_SCREEN_DET_COLOR, &color)
|
||||||
|
&& XAllocColor(dpy, attribs.colormap, &color)) {
|
||||||
|
gcvals.foreground = color.pixel;
|
||||||
|
} else
|
||||||
|
gcvals.foreground = BlackPixel(dpy, screen);
|
||||||
|
priv->gcDet = XCreateGC(dpy, win, mask, &gcvals);
|
||||||
|
gcvals.foreground = tmp;
|
||||||
|
|
||||||
tmp = gcvals.background;
|
tmp = gcvals.background;
|
||||||
gcvals.background = gcvals.foreground;
|
gcvals.background = gcvals.foreground;
|
||||||
gcvals.foreground = tmp;
|
gcvals.foreground = tmp;
|
||||||
|
|
Loading…
Reference in New Issue