Lines Matching refs:priv
119 static int scalex(myPrivate *priv, int x)
121 return (int)((x * priv->xScale) + .5);
124 static int scaley(myPrivate *priv, int y)
126 return (int)((y * priv->yScale) + .5);
129 static int unscalex(myPrivate *priv, int x)
131 return (int)((x / priv->xScale) + .5);
134 static int unscaley(myPrivate *priv, int y)
136 return (int)((y / priv->yScale) + .5);
143 myPrivate *priv = calloc(1, sizeof(*priv));
144 priv->dmxLocal = dmxLocal;
145 return priv;
154 static void dmxConsoleDrawFineCursor(myPrivate *priv, XRectangle *rect)
159 XDrawLine(priv->display, priv->pixmap, priv->gcCur,
160 x = scalex(priv, priv->globalX) - size,
161 scaley(priv, priv->globalY),
162 scalex(priv, priv->globalX) + size,
163 scaley(priv, priv->globalY));
164 XDrawLine(priv->display, priv->pixmap, priv->gcCur,
165 scalex(priv, priv->globalX),
166 y = scaley(priv, priv->globalY) - size,
167 scalex(priv, priv->globalX),
168 scaley(priv, priv->globalY) + size);
169 if (priv->grabbed) {
170 XDrawLine(priv->display, priv->pixmap, priv->gcCur,
171 scalex(priv, priv->globalX) - (int)(size / 1.4),
172 scaley(priv, priv->globalY) - (int)(size / 1.4),
173 scalex(priv, priv->globalX) + (int)(size / 1.4),
174 scaley(priv, priv->globalY) + (int)(size / 1.4));
175 XDrawLine(priv->display, priv->pixmap, priv->gcCur,
176 scalex(priv, priv->globalX) - (int)(size / 1.4),
177 scaley(priv, priv->globalY) + (int)(size / 1.4),
178 scalex(priv, priv->globalX) + (int)(size / 1.4),
179 scaley(priv, priv->globalY) - (int)(size / 1.4));
192 Display *dpy = priv->display;
202 rect.width = priv->consWidth;
203 rect.height = priv->consHeight;
231 rect.x = scalex(priv, pChild->drawable.x + pScreen->x);
232 rect.y = scaley(priv, pChild->drawable.y + pScreen->y);
233 rect.width = scalex(priv, pChild->drawable.width);
234 rect.height = scaley(priv, pChild->drawable.height);
235 XDrawRectangle(dpy, priv->pixmap, priv->gc,
239 XSetRegion(dpy, priv->gc, avail);
249 XSetClipMask(dpy, priv->gc, None);
252 static void dmxConsoleDraw(myPrivate *priv, int updateCursor, int update)
255 Display *dpy = priv->display;
258 XFillRectangle(dpy, priv->pixmap, priv->gc, 0, 0,
259 priv->consWidth, priv->consHeight);
263 XFillRectangle(dpy, priv->pixmap,
264 dmxScreen->beDisplay ? priv->gcRev : priv->gcDet,
265 scalex(priv, screenInfo.screens[i]->x),
266 scaley(priv, screenInfo.screens[i]->y),
267 scalex(priv, screenInfo.screens[i]->width),
268 scaley(priv, screenInfo.screens[i]->height));
271 XDrawRectangle(dpy, priv->pixmap, priv->gc,
272 scalex(priv, screenInfo.screens[i]->x),
273 scaley(priv, screenInfo.screens[i]->y),
274 scalex(priv, screenInfo.screens[i]->width),
275 scaley(priv, screenInfo.screens[i]->height));
277 if (dmxInput->windows) dmxConsoleDrawWindows(priv);
278 if (priv->fine && updateCursor) dmxConsoleDrawFineCursor(priv, 0);
280 XCopyArea(priv->display, priv->pixmap, priv->window, priv->gc,
281 0, 0, priv->consWidth, priv->consHeight, 0, 0);
282 XSync(priv->display, False); /* Not a backend display */
286 static void dmxConsoleClearCursor(myPrivate *priv, int x, int y,
291 rect->x = scalex(priv, x) - cw/2;
292 rect->y = scaley(priv, y) - ch/2;
295 XSetClipRectangles(priv->display, priv->gc, 0, 0, rect, 1, Unsorted);
296 XSetClipRectangles(priv->display, priv->gcDet, 0, 0, rect, 1, Unsorted);
297 XSetClipRectangles(priv->display, priv->gcRev, 0, 0, rect, 1, Unsorted);
298 dmxConsoleDraw(priv, 0, 0);
299 XSetClipMask(priv->display, priv->gc, None);
300 XSetClipMask(priv->display, priv->gcDet, None);
301 XSetClipMask(priv->display, priv->gcRev, None);
305 static void dmxConsoleUpdateFineCursor(myPrivate *priv)
310 dmxConsoleClearCursor(priv, priv->globalX, priv->globalY, &rects[0]);
311 if (priv->dmxLocal->sendsCore) {
312 dmxGetGlobalPosition(&priv->globalX, &priv->globalY);
314 priv->globalX = priv->dmxLocal->lastX;
315 priv->globalY = priv->dmxLocal->lastY;
318 priv->lastX = scalex(priv, priv->width / 2);
319 priv->lastY = scaley(priv, priv->height / 2);
323 if (priv->globalX < 1 || priv->globalX >= priv->width) {
324 if (priv->globalX < 1) priv->lastX = 0;
325 else priv->lastX = scalex(priv, priv->width);
326 priv->lastY = scaley(priv, priv->globalY);
329 if (priv->globalY < 1 || priv->globalY >= priv->height) {
330 if (priv->globalY < 1) priv->lastY = 0;
331 else priv->lastY = scaley(priv, priv->height);
332 priv->lastX = scalex(priv, priv->globalX);
337 dmxConsoleDrawFineCursor(priv, &rects[1]);
339 XSetClipRectangles(priv->display, priv->gc, 0, 0, rects, 2, Unsorted);
340 XCopyArea(priv->display, priv->pixmap, priv->window, priv->gc,
341 0, 0, priv->consWidth, priv->consHeight, 0, 0);
342 XSetClipMask(priv->display, priv->gc, None);
345 priv->lastX, priv->lastY);
346 XWarpPointer(priv->display, priv->window, priv->window,
347 0, 0, 0, 0, priv->lastX, priv->lastY);
348 XSync(priv->display, False); /* Not a backend display */
352 while (XCheckMaskEvent(priv->display, PointerMotionMask, &X)) {
354 if (X.xmotion.x != priv->lastX || X.xmotion.y != priv->lastY) {
357 priv->lastX, priv->lastY);
366 priv->lastX, priv->lastY,
367 scalex(priv, priv->width),
368 scaley(priv, priv->height),
369 priv->globalX, priv->globalY);
381 dmxConsoleDraw(priv, 1, 1);
384 static void dmxConsoleMoveAbsolute(myPrivate *priv, int x, int y,
390 tmpX = unscalex(priv, x);
391 tmpY = unscalex(priv, y);
393 x, y, tmpX, tmpY, priv->curX, priv->curY);
394 if (tmpX == priv->curX && tmpY == priv->curY) return;
395 v[0] = unscalex(priv, x);
396 v[1] = unscaley(priv, y);
401 static void dmxConsoleMoveRelative(myPrivate *priv, int x, int y,
407 if (x == priv->lastX && y == priv->lastY) return;
408 v[0] = priv->lastX - x;
409 v[1] = priv->lastY - y;
421 Display *dpy = priv->display;
425 tmpX = scalex(priv, x);
426 tmpY = scaley(priv, y);
428 x, y, tmpX, tmpY, priv->consWidth, priv->consHeight);
430 if (priv->fine) dmxConsoleUpdateFineCursor(priv);
431 if (tmpX != priv->curX || tmpY != priv->curY) {
434 if (tmpX >= priv->consWidth) tmpX = priv->consWidth - 1;
435 if (tmpY >= priv->consHeight) tmpY = priv->consHeight - 1;
436 priv->curX = tmpX;
437 priv->curY = tmpY;
438 if (!priv->fine) {
439 DMXDBG2(" WARP B %d %d\n", priv->curX, priv->curY);
440 XWarpPointer(dpy, priv->window,
441 priv->window, 0, 0, 0, 0, tmpX, tmpY);
448 dmxConsoleDraw(priv, 1, 1);
465 Display *dpy = priv->display;
466 Window win = priv->window;
467 int width = priv->width;
468 int height = priv->height;
493 XSetRegion(dpy, priv->gc, r);
494 XSetRegion(dpy, priv->gcDet, r);
495 XSetRegion(dpy, priv->gcRev, r);
496 dmxConsoleDraw(priv, 1, 1);
497 XSetClipMask(dpy, priv->gc, None);
498 XSetClipMask(dpy, priv->gcDet, None);
499 XSetClipMask(dpy, priv->gcRev, None);
507 priv->consWidth = X.xresizerequest.width;
508 priv->consHeight = X.xresizerequest.height;
509 priv->xScale = (double)priv->consWidth / width;
510 priv->yScale = (double)priv->consHeight / height;
513 XResizeWindow(dpy, win, priv->consWidth, priv->consHeight);
514 XFreePixmap(dpy, priv->pixmap);
515 priv->pixmap = XCreatePixmap(dpy,
517 priv->consWidth,
518 priv->consHeight,
520 dmxConsoleDraw(priv, 1, 1);
526 X.xcrossing.x, X.xcrossing.y, raising, priv->fine);
527 if (!priv->captured) dmxCommonRestoreState(priv);
530 dmxCommonRestoreState(priv);
535 X.xcrossing.x, X.xcrossing.y, raising, priv->fine,
536 priv->curX, priv->curY);
537 dmxCommonSaveState(priv);
540 dmxConsoleMoveAbsolute(priv, raiseX, raiseY,
541 priv->mou, motion, block);
543 if (priv->fine) {
552 XRaiseWindow(dpy, priv->window);
556 dmxConsoleMoveAbsolute(priv, priv->curX, priv->curY,
557 priv->mou, motion, block);
561 if (priv->curX == X.xmotion.x && priv->curY == X.xmotion.y)
571 dmxConsoleMoveAbsolute(priv, raiseX, raiseY,
572 priv->mou, motion, block);
574 if (priv->fine)
575 dmxConsoleMoveRelative(priv, X.xmotion.x, X.xmotion.y,
576 priv->mou, motion, block);
578 dmxConsoleMoveAbsolute(priv, X.xmotion.x, X.xmotion.y,
579 priv->mou, motion, block);
584 enqueue(priv->kbd, X.type, X.xkey.keycode, 0, NULL, block);
589 enqueue(priv->mou, X.type, X.xbutton.button, 0, &X, block);
595 static void dmxCloseConsole(myPrivate *priv)
598 dmxCommonRestoreState(priv);
599 if (priv->display) {
600 XFreeGC(priv->display, priv->gc);
601 XFreeGC(priv->display, priv->gcDet);
602 XFreeGC(priv->display, priv->gcRev);
603 XFreeGC(priv->display, priv->gcCur);
604 if (!dmxInput->console) XCloseDisplay(priv->display);
606 priv->display = NULL;
611 myPrivate *priv, *last;
613 for (last = priv = (myPrivate *)dixLookupPrivate(&pScreen->devPrivates,
615 priv;
616 priv = priv->next) dmxCloseConsole(last = priv);
622 static Cursor dmxConsoleCreateEmptyCursor(myPrivate *priv)
628 Display *dpy = priv->display;
631 pixmap = XCreateBitmapFromData(priv->display, priv->window,
643 static void dmxConsoleComputeWidthHeight(myPrivate *priv,
649 Display *dpy = priv->display;
686 *consWidth = scalex(priv, *width);
687 *consHeight = scaley(priv, *height);
699 if (!priv || !priv->initialized) return;
700 dpy = priv->display;
702 dmxConsoleComputeWidthHeight(priv,
703 &priv->width, &priv->height,
704 &priv->xScale, &priv->yScale,
705 &priv->consWidth, &priv->consHeight);
706 XResizeWindow(dpy, priv->window, priv->consWidth, priv->consHeight);
707 XFreePixmap(dpy, priv->pixmap);
708 priv->pixmap = XCreatePixmap(dpy,
710 priv->consWidth,
711 priv->consHeight,
713 dmxConsoleDraw(priv, 1, 1);
731 if (dmxLocal->type == DMX_LOCAL_MOUSE) priv->mou = pDev;
732 if (dmxLocal->type == DMX_LOCAL_KEYBOARD) priv->kbd = pDev;
733 if (priv->initialized++) return; /* Only do once for mouse/keyboard pair */
735 if (!(dpy = priv->display = XOpenDisplay(dmxInput->name)))
741 dmxConsoleComputeWidthHeight(priv,
742 &priv->width, &priv->height,
743 &priv->xScale, &priv->yScale,
744 &priv->consWidth, &priv->consHeight);
748 priv->initPointerX = scalex(priv, priv->width / 2);
749 priv->initPointerY = scaley(priv, priv->height / 2);
750 priv->eventMask = (ButtonPressMask
768 attribs.event_mask = priv->eventMask;
771 win = priv->window = XCreateWindow(dpy,
773 0, 0, priv->consWidth, priv->consHeight,
779 priv->pixmap = XCreatePixmap(dpy, RootWindow(dpy, screen),
780 priv->consWidth, priv->consHeight,
794 priv->cursorNormal = XCreateFontCursor(dpy, XC_circle);
795 priv->cursorGrabbed = XCreateFontCursor(dpy, XC_spider);
796 priv->cursorEmpty = dmxConsoleCreateEmptyCursor(priv);
797 XDefineCursor(dpy, priv->window, priv->cursorNormal);
822 priv->gc = XCreateGC(dpy, win, mask, &gcvals);
830 priv->gcDet = XCreateGC(dpy, win, mask, &gcvals);
836 priv->gcRev = XCreateGC(dpy, win, mask, &gcvals);
844 priv->gcCur = XCreateGC(dpy, win, mask, &gcvals);
846 dmxConsoleDraw(priv, 1, 1);
850 priv->next = dixLookupPrivate(&screenInfo.screens[0]->devPrivates,
854 priv, screenInfo.screens[0]);
856 priv);
872 info->maxval[0] = DisplayWidth(priv->display, DefaultScreen(priv->display));
873 info->maxval[1] = DisplayHeight(priv->display, DefaultScreen(priv->display));
898 Display *dpy = priv->display;
902 if (priv->fine) {
903 priv->fine = 0;
904 dmxConsoleClearCursor(priv, priv->globalX, priv->globalY, &rect);
905 XSetClipRectangles(dpy, priv->gc, 0, 0, &rect, 1, Unsorted);
906 XCopyArea(dpy, priv->pixmap, priv->window, priv->gc,
907 0, 0, priv->consWidth, priv->consHeight, 0, 0);
908 XSetClipMask(dpy, priv->gc, None);
910 XDefineCursor(dpy, priv->window,
911 priv->grabbed
912 ? priv->cursorGrabbed
913 : priv->cursorNormal);
914 XWarpPointer(dpy, priv->window, priv->window,
916 scalex(priv, priv->globalX),
917 scaley(priv, priv->globalY));
920 priv->fine = 1;
921 XRaiseWindow(dpy, priv->window);
922 XDefineCursor(dpy, priv->window, priv->cursorEmpty);
923 dmxConsoleUpdateFineCursor(priv);
927 if (priv->grabbed) {
930 XDefineCursor(dpy, priv->window,
931 priv->fine
932 ? priv->cursorEmpty
933 : priv->cursorNormal);
935 if (XGrabPointer(dpy, priv->window, True,
936 0, GrabModeAsync, GrabModeAsync, priv->window,
941 if (XGrabKeyboard(dpy, priv->window, True,
947 XDefineCursor(dpy, priv->window,
948 priv->fine
949 ? priv->cursorEmpty
950 : priv->cursorGrabbed);
952 priv->grabbed = !priv->grabbed;
953 if (priv->fine) dmxConsoleUpdateFineCursor(priv);
971 myPrivate *priv = dmxLocal->private;
972 while (priv
973 && priv->display
974 && XCheckTypedEvent(priv->display, MotionNotify, &X)) {
994 myPrivate *priv = dmxLocal->private;
997 if (priv->captured) continue;
998 priv->captured = 2; /* Ungrab only after proximal events. */
999 XRaiseWindow(priv->display, priv->window);
1000 XSync(priv->display, False); /* Not a backend display */
1001 while (XCheckTypedEvent(priv->display, MotionNotify, &X)) {
1005 XWarpPointer(priv->display, None,
1006 priv->window, 0, 0, 0, 0, priv->curX, priv->curY);
1007 XSync(priv->display, False); /* Not a backend display */
1009 if (priv->fine) dmxConsoleUpdateFineCursor(priv);
1022 myPrivate *priv = dmxLocal->private;
1025 if (!priv->captured) continue;
1026 priv->captured = 0;
1027 XSync(priv->display, False); /* Not a backend display */