#include "mipointer.h"
Go to the source code of this file.
Data Structures | |
struct | _dmxCursorPriv |
Defines | |
#define | DMX_GET_CURSOR_PRIV(_pCursor, _pScreen) |
#define | DMX_SET_CURSOR_PRIV(_pCursor, _pScreen, v) dixSetPrivate(&(_pCursor)->devPrivates, CursorScreenKey(_pScreen), v) |
Typedefs | |
typedef struct _dmxCursorPriv | dmxCursorPrivRec |
typedef struct _dmxCursorPriv * | dmxCursorPrivPtr |
Functions | |
void | dmxReInitOrigins (void) |
void | dmxInitOrigins (void) |
void | dmxInitOverlap (void) |
void | dmxCursorNoMulti (void) |
void | dmxMoveCursor (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y) |
void | dmxCheckCursor (void) |
int | dmxOnScreen (int x, int y, DMXScreenInfo *dmxScreen) |
void | dmxHideCursor (DMXScreenInfo *dmxScreen) |
void | dmxBECreateCursor (ScreenPtr pScreen, CursorPtr pCursor) |
Bool | dmxBEFreeCursor (ScreenPtr pScreen, CursorPtr pCursor) |
Variables | |
miPointerScreenFuncRec | dmxPointerCursorFuncs |
miPointerSpriteFuncRec | dmxPointerSpriteFuncs |
Interface for cursor support.
#define DMX_GET_CURSOR_PRIV | ( | _pCursor, | |||
_pScreen | ) |
((dmxCursorPrivPtr) \ dixLookupPrivate(&(_pCursor)->devPrivates, CursorScreenKey(_pScreen)))
Referenced by _dmxRealizeCursor(), _dmxSetCursor(), _dmxUnrealizeCursor(), dmxBECreateCursor(), and dmxBEFreeCursor().
#define DMX_SET_CURSOR_PRIV | ( | _pCursor, | |||
_pScreen, | |||||
v | ) | dixSetPrivate(&(_pCursor)->devPrivates, CursorScreenKey(_pScreen), v) |
Referenced by _dmxRealizeCursor(), and _dmxUnrealizeCursor().
typedef struct _dmxCursorPriv * dmxCursorPrivPtr |
typedef struct _dmxCursorPriv dmxCursorPrivRec |
Cursor private area.
void dmxBECreateCursor | ( | ScreenPtr | pScreen, | |
CursorPtr | pCursor | |||
) |
Create pCursor on the back-end associated with pScreen.
References _DMXScreenInfo::beDefVisualIndex, _DMXScreenInfo::beDisplay, _DMXScreenInfo::beNumPixmapFormats, _DMXScreenInfo::bePixmapFormats, _DMXScreenInfo::beVisuals, _dmxCursorPriv::cursor, DMX_GET_CURSOR_PRIV, dmxFatal, dmxLog(), dmxScreens, dmxSync(), _myPrivate::gc, _DMXScreenInfo::scrnDefDrawables, and _DMXScreenInfo::scrnWin.
Referenced by _dmxRealizeCursor(), and dmxBECreateResources().
Bool dmxBEFreeCursor | ( | ScreenPtr | pScreen, | |
CursorPtr | pCursor | |||
) |
Free pCursor on the back-end associated with pScreen.
References _DMXScreenInfo::beDisplay, _dmxCursorPriv::cursor, DMX_GET_CURSOR_PRIV, and dmxScreens.
Referenced by _dmxUnrealizeCursor(), and dmxBEDestroyResources().
void dmxCheckCursor | ( | void | ) |
This routine is called during reconfiguration to make sure the cursor is visible.
References _dmxRealizeCursor(), _dmxSetCursor(), _DMXScreenInfo::cursor, DMXDBG2, dmxFindCursor(), dmxFindFirstScreen(), dmxGetGlobalPosition(), dmxNumScreens, dmxOnScreen(), dmxScreens, _DMXScreenInfo::index, _DMXScreenInfo::rootXOrigin, and _DMXScreenInfo::rootYOrigin.
Referenced by dmxAdjustCursorBoundaries(), and dmxBackendUpdatePosition().
void dmxCursorNoMulti | ( | void | ) |
Turn off support for displaying multiple cursors on overlapped back-end displays. See dmxCursorDoMultiCursors.
References dmxCursorDoMultiCursors.
Referenced by ddxProcessArgument().
void dmxHideCursor | ( | DMXScreenInfo * | dmxScreen | ) |
This routine is used by the backend input routines to hide the cursor on a screen that is being used for relative input.
References _dmxSetCursor(), dmxGetGlobalPosition(), and _DMXScreenInfo::index.
Referenced by dmxBackendUpdatePosition().
void dmxInitOrigins | ( | void | ) |
Initialize screen origins (and relative position). This is called for each server generation. For dynamic reconfiguration, use dmxReInitOrigins() instead.
References _DMXScreenInfo::beBPP, _DMXScreenInfo::beDepth, _DMXScreenInfo::beHeight, _DMXScreenInfo::beWidth, dmxComputeScreenOrigins(), dmxFatal, dmxLog(), dmxLogOutput(), dmxNumScreens, dmxReInitOrigins(), dmxScreens, _DMXScreenInfo::rootHeight, _DMXScreenInfo::rootWidth, _DMXScreenInfo::rootX, _DMXScreenInfo::rootXOrigin, _DMXScreenInfo::rootY, _DMXScreenInfo::rootYOrigin, _DMXScreenInfo::scrnHeight, _DMXScreenInfo::scrnWidth, _DMXScreenInfo::scrnX, _DMXScreenInfo::scrnY, _DMXScreenInfo::where, _DMXScreenInfo::whereX, and _DMXScreenInfo::whereY.
Referenced by InitOutput().
void dmxInitOverlap | ( | void | ) |
Detects overlapping dmxScreens and creates circular lists. This uses an O(dmxNumScreens^2) algorithm, but dmxNumScreens is < 100 and the computation only needs to be performed for every server generation or dynamic reconfiguration .
References _DMXScreenInfo::cursorNotShared, DMXDBG6, dmxDoesOverlap(), dmxInfo, dmxIterateOverlap(), dmxLog(), dmxLogOutput(), dmxLogOutputCont(), dmxNumScreens, dmxPrintOverlap(), dmxPropertyIterate(), dmxScreens, dmxTestSameDisplay(), _DMXScreenInfo::index, _DMXScreenInfo::name, and _DMXScreenInfo::over.
Referenced by dmxAdjustCursorBoundaries(), and InitOutput().
void dmxMoveCursor | ( | DeviceIntPtr | pDev, | |
ScreenPtr | pScreen, | |||
int | x, | |||
int | y | |||
) |
Move the cursor to coordinates (x, y)on pScreen. This function is usually called via dmxPointerSpriteFuncs, except during reconfiguration when the cursor is repositioned to force an update on newley overlapping screens and on screens that no longer overlap.
The coords (x,y) are in global coord space. We'll loop over the back-end screens and see if they contain the global coord. If so, call _dmxMoveCursor() (XWarpPointer) to position the pointer on that screen.
References _dmxMoveCursor(), _dmxRealizeCursor(), _dmxSetCursor(), _DMXScreenInfo::cursor, _DMXScreenInfo::cursorNotShared, _DMXScreenInfo::cursorVisible, dmxCursorDoMultiCursors, DMXDBG3, dmxFindCursor(), dmxOnScreen(), dmxScreens, _DMXScreenInfo::index, _DMXScreenInfo::over, _DMXScreenInfo::rootXOrigin, and _DMXScreenInfo::rootYOrigin.
int dmxOnScreen | ( | int | x, | |
int | y, | |||
DMXScreenInfo * | dmxScreen | |||
) |
Returns non-zero if the global x, y coordinate is on the screen window of the dmxScreen.
References dmxDebug, dmxLog(), _DMXScreenInfo::index, _DMXScreenInfo::rootHeight, _DMXScreenInfo::rootWidth, _DMXScreenInfo::rootX, _DMXScreenInfo::rootXOrigin, _DMXScreenInfo::rootY, _DMXScreenInfo::rootYOrigin, _DMXScreenInfo::scrnHeight, _DMXScreenInfo::scrnWidth, _DMXScreenInfo::scrnX, and _DMXScreenInfo::scrnY.
Referenced by dmxBackendFindOverlapping(), dmxBackendOffscreen(), dmxCheckCursor(), dmxDoesOverlap(), dmxFindFirstScreen(), dmxMoveCursor(), and dmxSetCursor().
void dmxReInitOrigins | ( | void | ) |
Recompute origin information in the dmxScreens list. This is called from dmxInitOrigins.
References _DMXScreenInfo::beBPP, _DMXScreenInfo::beDepth, _DMXScreenInfo::beHeight, _DMXScreenInfo::beWidth, dmxFatal, dmxLog(), dmxLogOutput(), dmxNumScreens, dmxScreens, _DMXScreenInfo::rootHeight, _DMXScreenInfo::rootWidth, _DMXScreenInfo::rootX, _DMXScreenInfo::rootXOrigin, _DMXScreenInfo::rootY, _DMXScreenInfo::rootYOrigin, _DMXScreenInfo::scrnHeight, _DMXScreenInfo::scrnWidth, _DMXScreenInfo::scrnX, and _DMXScreenInfo::scrnY.
Referenced by dmxAdjustCursorBoundaries(), and dmxInitOrigins().
miPointerScreenFuncRec dmxPointerCursorFuncs |
miPointerSpriteFuncRec dmxPointerSpriteFuncs |