mi: added device ID to miSpriteCursorFuncRec functions

added MPX code to midispcur.c

BUG:   Core pointer changes whenever MPX cursor changes shape.
This commit is contained in:
Peter Hutterer 2006-11-21 14:00:46 +10:30 committed by Peter Hutterer
parent 3bad452d12
commit 1107d8bea2
4 changed files with 154 additions and 71 deletions

View File

@ -12,6 +12,18 @@ Files:
TAG: MPX_BEFORE_MIDC_API_BREAK TAG: MPX_BEFORE_MIDC_API_BREAK
mi: added device ID to miSpriteCursorFuncRec functions
added MPX code to midispcur.c
Files:
mi/midispcur.c
mi/misprite.c
mi/mispritest.h
BUG: Core pointer changes whenever MPX cursor changes shape.
== 20.11.06 == == 20.11.06 ==
mi: moved core pointer information from miSpriteScreenRec into a mi: moved core pointer information from miSpriteScreenRec into a

View File

@ -54,6 +54,10 @@ in this Software without prior written authorization from The Open Group.
#ifdef MPX #ifdef MPX
# include "inputstr.h" # include "inputstr.h"
#define SaneID(a) (a >= 0 && a < MAX_DEVICES)
#endif #endif
/* per-screen private data */ /* per-screen private data */
@ -98,17 +102,21 @@ typedef struct {
static Bool miDCRealizeCursor(ScreenPtr pScreen, CursorPtr pCursor); static Bool miDCRealizeCursor(ScreenPtr pScreen, CursorPtr pCursor);
static Bool miDCUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor); static Bool miDCUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor);
static Bool miDCPutUpCursor(ScreenPtr pScreen, CursorPtr pCursor, static Bool miDCPutUpCursor(int deviceid, ScreenPtr pScreen,
int x, int y, unsigned long source, CursorPtr pCursor, int x, int y,
unsigned long mask);
static Bool miDCSaveUnderCursor(ScreenPtr pScreen, int x, int y,
int w, int h);
static Bool miDCRestoreUnderCursor(ScreenPtr pScreen, int x, int y,
int w, int h);
static Bool miDCMoveCursor(ScreenPtr pScreen, CursorPtr pCursor,
int x, int y, int w, int h, int dx, int dy,
unsigned long source, unsigned long mask); unsigned long source, unsigned long mask);
static Bool miDCChangeSave(ScreenPtr pScreen, int x, int y, int w, int h, static Bool miDCSaveUnderCursor(int deviceid, ScreenPtr pScreen,
int x, int y,
int w, int h);
static Bool miDCRestoreUnderCursor(int deviceid, ScreenPtr pScreen,
int x, int y,
int w, int h);
static Bool miDCMoveCursor(int deviceid, ScreenPtr pScreen,
CursorPtr pCursor, int x, int y,
int w, int h, int dx, int dy,
unsigned long source, unsigned long mask);
static Bool miDCChangeSave(int deviceid, ScreenPtr pScreen,
int x, int y, int w, int h,
int dx, int dy); int dx, int dy);
static miSpriteCursorFuncRec miDCFuncs = { static miSpriteCursorFuncRec miDCFuncs = {
@ -214,24 +222,42 @@ miDCCloseScreen (index, pScreen)
ScreenPtr pScreen; ScreenPtr pScreen;
{ {
miDCScreenPtr pScreenPriv; miDCScreenPtr pScreenPriv;
miDCBufferPtr pBuffer;
pScreenPriv = (miDCScreenPtr) pScreen->devPrivates[miDCScreenIndex].ptr; pScreenPriv = (miDCScreenPtr) pScreen->devPrivates[miDCScreenIndex].ptr;
pScreen->CloseScreen = pScreenPriv->CloseScreen; pScreen->CloseScreen = pScreenPriv->CloseScreen;
tossGC (pScreenPriv->pCoreBuffer->pSourceGC); pBuffer = pScreenPriv->pCoreBuffer;
tossGC (pScreenPriv->pCoreBuffer->pMaskGC);
tossGC (pScreenPriv->pCoreBuffer->pSaveGC); #ifdef MPX
tossGC (pScreenPriv->pCoreBuffer->pRestoreGC); {
tossGC (pScreenPriv->pCoreBuffer->pMoveGC); int mpBufferIdx = 0;
tossGC (pScreenPriv->pCoreBuffer->pPixSourceGC); while (mpBufferIdx < MAX_DEVICES)
tossGC (pScreenPriv->pCoreBuffer->pPixMaskGC); {
tossPix (pScreenPriv->pCoreBuffer->pSave); pBuffer = &pScreenPriv->pMPBuffers[mpBufferIdx];
tossPix (pScreenPriv->pCoreBuffer->pTemp);
#endif
tossGC (pBuffer->pSourceGC);
tossGC (pBuffer->pMaskGC);
tossGC (pBuffer->pSaveGC);
tossGC (pBuffer->pRestoreGC);
tossGC (pBuffer->pMoveGC);
tossGC (pBuffer->pPixSourceGC);
tossGC (pBuffer->pPixMaskGC);
tossPix (pBuffer->pSave);
tossPix (pBuffer->pTemp);
#ifdef ARGB_CURSOR #ifdef ARGB_CURSOR
#if 0 /* This has been free()d before */ #if 0 /* This has been free()d before */
tossPict (pScreenPriv->pRootPicture); tossPict (pScreenPriv->pRootPicture);
#endif #endif
tossPict (pScreenPriv->pCoreBuffer->pTempPicture); tossPict (pBuffer->pTempPicture);
#endif #endif
#ifdef MPX
mpBufferIdx++;
}
}
#endif
xfree ((pointer) pScreenPriv); xfree ((pointer) pScreenPriv);
return (*pScreen->CloseScreen) (index, pScreen); return (*pScreen->CloseScreen) (index, pScreen);
} }
@ -504,7 +530,8 @@ miDCMakeGC(
static Bool static Bool
miDCPutUpCursor (pScreen, pCursor, x, y, source, mask) miDCPutUpCursor (deviceid, pScreen, pCursor, x, y, source, mask)
int deviceid;
ScreenPtr pScreen; ScreenPtr pScreen;
CursorPtr pCursor; CursorPtr pCursor;
int x, y; int x, y;
@ -512,6 +539,7 @@ miDCPutUpCursor (pScreen, pCursor, x, y, source, mask)
{ {
miDCScreenPtr pScreenPriv; miDCScreenPtr pScreenPriv;
miDCCursorPtr pPriv; miDCCursorPtr pPriv;
miDCBufferPtr pBuffer;
WindowPtr pWin; WindowPtr pWin;
pPriv = (miDCCursorPtr) pCursor->bits->devPriv[pScreen->myNum]; pPriv = (miDCCursorPtr) pCursor->bits->devPriv[pScreen->myNum];
@ -523,15 +551,22 @@ miDCPutUpCursor (pScreen, pCursor, x, y, source, mask)
} }
pScreenPriv = (miDCScreenPtr) pScreen->devPrivates[miDCScreenIndex].ptr; pScreenPriv = (miDCScreenPtr) pScreen->devPrivates[miDCScreenIndex].ptr;
pWin = WindowTable[pScreen->myNum]; pWin = WindowTable[pScreen->myNum];
pBuffer = pScreenPriv->pCoreBuffer;
#ifdef MPX
if (SaneID(deviceid))
pBuffer = &pScreenPriv->pMPBuffers[deviceid];
#endif
#ifdef ARGB_CURSOR #ifdef ARGB_CURSOR
if (pPriv->pPicture) if (pPriv->pPicture)
{ {
if (!EnsurePicture(pScreenPriv->pCoreBuffer->pRootPicture, &pWin->drawable, pWin)) if (!EnsurePicture(pBuffer->pRootPicture, &pWin->drawable, pWin))
return FALSE; return FALSE;
CompositePicture (PictOpOver, CompositePicture (PictOpOver,
pPriv->pPicture, pPriv->pPicture,
NULL, NULL,
pScreenPriv->pCoreBuffer->pRootPicture, pBuffer->pRootPicture,
0, 0, 0, 0, 0, 0, 0, 0,
x, y, x, y,
pCursor->bits->width, pCursor->bits->width,
@ -540,16 +575,16 @@ miDCPutUpCursor (pScreen, pCursor, x, y, source, mask)
else else
#endif #endif
{ {
if (!EnsureGC(pScreenPriv->pCoreBuffer->pSourceGC, pWin)) if (!EnsureGC(pBuffer->pSourceGC, pWin))
return FALSE; return FALSE;
if (!EnsureGC(pScreenPriv->pCoreBuffer->pMaskGC, pWin)) if (!EnsureGC(pBuffer->pMaskGC, pWin))
{ {
FreeGC (pScreenPriv->pCoreBuffer->pSourceGC, (GContext) 0); FreeGC (pBuffer->pSourceGC, (GContext) 0);
pScreenPriv->pCoreBuffer->pSourceGC = 0; pBuffer->pSourceGC = 0;
return FALSE; return FALSE;
} }
miDCPutBits ((DrawablePtr)pWin, pPriv, miDCPutBits ((DrawablePtr)pWin, pPriv,
pScreenPriv->pCoreBuffer->pSourceGC, pScreenPriv->pCoreBuffer->pMaskGC, pBuffer->pSourceGC, pBuffer->pMaskGC,
x, y, pCursor->bits->width, pCursor->bits->height, x, y, pCursor->bits->width, pCursor->bits->height,
source, mask); source, mask);
} }
@ -557,30 +592,37 @@ miDCPutUpCursor (pScreen, pCursor, x, y, source, mask)
} }
static Bool static Bool
miDCSaveUnderCursor (pScreen, x, y, w, h) miDCSaveUnderCursor (deviceid, pScreen, x, y, w, h)
int deviceid;
ScreenPtr pScreen; ScreenPtr pScreen;
int x, y, w, h; int x, y, w, h;
{ {
miDCScreenPtr pScreenPriv; miDCScreenPtr pScreenPriv;
miDCBufferPtr pBuffer;
PixmapPtr pSave; PixmapPtr pSave;
WindowPtr pWin; WindowPtr pWin;
GCPtr pGC; GCPtr pGC;
pScreenPriv = (miDCScreenPtr) pScreen->devPrivates[miDCScreenIndex].ptr; pScreenPriv = (miDCScreenPtr) pScreen->devPrivates[miDCScreenIndex].ptr;
pSave = pScreenPriv->pCoreBuffer->pSave; pBuffer = pScreenPriv->pCoreBuffer;
#ifdef MPX
if (SaneID(deviceid))
pBuffer = &pScreenPriv->pMPBuffers[deviceid];
#endif
pSave = pBuffer->pSave;
pWin = WindowTable[pScreen->myNum]; pWin = WindowTable[pScreen->myNum];
if (!pSave || pSave->drawable.width < w || pSave->drawable.height < h) if (!pSave || pSave->drawable.width < w || pSave->drawable.height < h)
{ {
if (pSave) if (pSave)
(*pScreen->DestroyPixmap) (pSave); (*pScreen->DestroyPixmap) (pSave);
pScreenPriv->pCoreBuffer->pSave = pSave = pBuffer->pSave = pSave =
(*pScreen->CreatePixmap) (pScreen, w, h, pScreen->rootDepth); (*pScreen->CreatePixmap) (pScreen, w, h, pScreen->rootDepth);
if (!pSave) if (!pSave)
return FALSE; return FALSE;
} }
if (!EnsureGC(pScreenPriv->pCoreBuffer->pSaveGC, pWin)) if (!EnsureGC(pBuffer->pSaveGC, pWin))
return FALSE; return FALSE;
pGC = pScreenPriv->pCoreBuffer->pSaveGC; pGC = pBuffer->pSaveGC;
if (pSave->drawable.serialNumber != pGC->serialNumber) if (pSave->drawable.serialNumber != pGC->serialNumber)
ValidateGC ((DrawablePtr) pSave, pGC); ValidateGC ((DrawablePtr) pSave, pGC);
(*pGC->ops->CopyArea) ((DrawablePtr) pWin, (DrawablePtr) pSave, pGC, (*pGC->ops->CopyArea) ((DrawablePtr) pWin, (DrawablePtr) pSave, pGC,
@ -589,23 +631,30 @@ miDCSaveUnderCursor (pScreen, x, y, w, h)
} }
static Bool static Bool
miDCRestoreUnderCursor (pScreen, x, y, w, h) miDCRestoreUnderCursor (deviceid, pScreen, x, y, w, h)
int deviceid;
ScreenPtr pScreen; ScreenPtr pScreen;
int x, y, w, h; int x, y, w, h;
{ {
miDCScreenPtr pScreenPriv; miDCScreenPtr pScreenPriv;
miDCBufferPtr pBuffer;
PixmapPtr pSave; PixmapPtr pSave;
WindowPtr pWin; WindowPtr pWin;
GCPtr pGC; GCPtr pGC;
pScreenPriv = (miDCScreenPtr) pScreen->devPrivates[miDCScreenIndex].ptr; pScreenPriv = (miDCScreenPtr) pScreen->devPrivates[miDCScreenIndex].ptr;
pSave = pScreenPriv->pCoreBuffer->pSave; pBuffer = pScreenPriv->pCoreBuffer;
#ifdef MPX
if (SaneID(deviceid))
pBuffer = &pScreenPriv->pMPBuffers[deviceid];
#endif
pSave = pBuffer->pSave;
pWin = WindowTable[pScreen->myNum]; pWin = WindowTable[pScreen->myNum];
if (!pSave) if (!pSave)
return FALSE; return FALSE;
if (!EnsureGC(pScreenPriv->pCoreBuffer->pRestoreGC, pWin)) if (!EnsureGC(pBuffer->pRestoreGC, pWin))
return FALSE; return FALSE;
pGC = pScreenPriv->pCoreBuffer->pRestoreGC; pGC = pBuffer->pRestoreGC;
if (pWin->drawable.serialNumber != pGC->serialNumber) if (pWin->drawable.serialNumber != pGC->serialNumber)
ValidateGC ((DrawablePtr) pWin, pGC); ValidateGC ((DrawablePtr) pWin, pGC);
(*pGC->ops->CopyArea) ((DrawablePtr) pSave, (DrawablePtr) pWin, pGC, (*pGC->ops->CopyArea) ((DrawablePtr) pSave, (DrawablePtr) pWin, pGC,
@ -614,27 +663,34 @@ miDCRestoreUnderCursor (pScreen, x, y, w, h)
} }
static Bool static Bool
miDCChangeSave (pScreen, x, y, w, h, dx, dy) miDCChangeSave (deviceid, pScreen, x, y, w, h, dx, dy)
int deviceid;
ScreenPtr pScreen; ScreenPtr pScreen;
int x, y, w, h, dx, dy; int x, y, w, h, dx, dy;
{ {
miDCScreenPtr pScreenPriv; miDCScreenPtr pScreenPriv;
miDCBufferPtr pBuffer;
PixmapPtr pSave; PixmapPtr pSave;
WindowPtr pWin; WindowPtr pWin;
GCPtr pGC; GCPtr pGC;
int sourcex, sourcey, destx, desty, copyw, copyh; int sourcex, sourcey, destx, desty, copyw, copyh;
pScreenPriv = (miDCScreenPtr) pScreen->devPrivates[miDCScreenIndex].ptr; pScreenPriv = (miDCScreenPtr) pScreen->devPrivates[miDCScreenIndex].ptr;
pSave = pScreenPriv->pCoreBuffer->pSave; pBuffer = pScreenPriv->pCoreBuffer;
#ifdef MPX
if (SaneID(deviceid))
pBuffer = &pScreenPriv->pMPBuffers[deviceid];
#endif
pSave = pBuffer->pSave;
pWin = WindowTable[pScreen->myNum]; pWin = WindowTable[pScreen->myNum];
/* /*
* restore the bits which are about to get trashed * restore the bits which are about to get trashed
*/ */
if (!pSave) if (!pSave)
return FALSE; return FALSE;
if (!EnsureGC(pScreenPriv->pCoreBuffer->pRestoreGC, pWin)) if (!EnsureGC(pBuffer->pRestoreGC, pWin))
return FALSE; return FALSE;
pGC = pScreenPriv->pCoreBuffer->pRestoreGC; pGC = pBuffer->pRestoreGC;
if (pWin->drawable.serialNumber != pGC->serialNumber) if (pWin->drawable.serialNumber != pGC->serialNumber)
ValidateGC ((DrawablePtr) pWin, pGC); ValidateGC ((DrawablePtr) pWin, pGC);
/* /*
@ -672,9 +728,9 @@ miDCChangeSave (pScreen, x, y, w, h, dx, dy)
(*pGC->ops->CopyArea) ((DrawablePtr) pSave, (DrawablePtr) pWin, pGC, (*pGC->ops->CopyArea) ((DrawablePtr) pSave, (DrawablePtr) pWin, pGC,
0, sourcey, -dx, copyh, x + dx, desty); 0, sourcey, -dx, copyh, x + dx, desty);
} }
if (!EnsureGC(pScreenPriv->pCoreBuffer->pSaveGC, pWin)) if (!EnsureGC(pBuffer->pSaveGC, pWin))
return FALSE; return FALSE;
pGC = pScreenPriv->pCoreBuffer->pSaveGC; pGC = pBuffer->pSaveGC;
if (pSave->drawable.serialNumber != pGC->serialNumber) if (pSave->drawable.serialNumber != pGC->serialNumber)
ValidateGC ((DrawablePtr) pSave, pGC); ValidateGC ((DrawablePtr) pSave, pGC);
/* /*
@ -746,7 +802,8 @@ miDCChangeSave (pScreen, x, y, w, h, dx, dy)
} }
static Bool static Bool
miDCMoveCursor (pScreen, pCursor, x, y, w, h, dx, dy, source, mask) miDCMoveCursor (deviceid, pScreen, pCursor, x, y, w, h, dx, dy, source, mask)
int deviceid;
ScreenPtr pScreen; ScreenPtr pScreen;
CursorPtr pCursor; CursorPtr pCursor;
int x, y, w, h, dx, dy; int x, y, w, h, dx, dy;
@ -754,6 +811,7 @@ miDCMoveCursor (pScreen, pCursor, x, y, w, h, dx, dy, source, mask)
{ {
miDCCursorPtr pPriv; miDCCursorPtr pPriv;
miDCScreenPtr pScreenPriv; miDCScreenPtr pScreenPriv;
miDCBufferPtr pBuffer;
int status; int status;
WindowPtr pWin; WindowPtr pWin;
GCPtr pGC; GCPtr pGC;
@ -769,39 +827,44 @@ miDCMoveCursor (pScreen, pCursor, x, y, w, h, dx, dy, source, mask)
} }
pScreenPriv = (miDCScreenPtr) pScreen->devPrivates[miDCScreenIndex].ptr; pScreenPriv = (miDCScreenPtr) pScreen->devPrivates[miDCScreenIndex].ptr;
pWin = WindowTable[pScreen->myNum]; pWin = WindowTable[pScreen->myNum];
pTemp = pScreenPriv->pCoreBuffer->pTemp; pBuffer = pScreenPriv->pCoreBuffer;
#ifdef MPX
if (SaneID(deviceid))
pBuffer = &pScreenPriv->pMPBuffers[deviceid];
#endif
pTemp = pBuffer->pTemp;
if (!pTemp || if (!pTemp ||
pTemp->drawable.width != pScreenPriv->pCoreBuffer->pSave->drawable.width || pTemp->drawable.width != pBuffer->pSave->drawable.width ||
pTemp->drawable.height != pScreenPriv->pCoreBuffer->pSave->drawable.height) pTemp->drawable.height != pBuffer->pSave->drawable.height)
{ {
if (pTemp) if (pTemp)
(*pScreen->DestroyPixmap) (pTemp); (*pScreen->DestroyPixmap) (pTemp);
#ifdef ARGB_CURSOR #ifdef ARGB_CURSOR
if (pScreenPriv->pCoreBuffer->pTempPicture) if (pBuffer->pTempPicture)
{ {
FreePicture (pScreenPriv->pCoreBuffer->pTempPicture, 0); FreePicture (pBuffer->pTempPicture, 0);
pScreenPriv->pCoreBuffer->pTempPicture = 0; pBuffer->pTempPicture = 0;
} }
#endif #endif
pScreenPriv->pCoreBuffer->pTemp = pTemp = (*pScreen->CreatePixmap) pBuffer->pTemp = pTemp = (*pScreen->CreatePixmap)
(pScreen, w, h, pScreenPriv->pCoreBuffer->pSave->drawable.depth); (pScreen, w, h, pBuffer->pSave->drawable.depth);
if (!pTemp) if (!pTemp)
return FALSE; return FALSE;
} }
if (!pScreenPriv->pCoreBuffer->pMoveGC) if (!pBuffer->pMoveGC)
{ {
pScreenPriv->pCoreBuffer->pMoveGC = CreateGC ((DrawablePtr)pTemp, pBuffer->pMoveGC = CreateGC ((DrawablePtr)pTemp,
GCGraphicsExposures, &gcval, &status); GCGraphicsExposures, &gcval, &status);
if (!pScreenPriv->pCoreBuffer->pMoveGC) if (!pBuffer->pMoveGC)
return FALSE; return FALSE;
} }
/* /*
* copy the saved area to a temporary pixmap * copy the saved area to a temporary pixmap
*/ */
pGC = pScreenPriv->pCoreBuffer->pMoveGC; pGC = pBuffer->pMoveGC;
if (pGC->serialNumber != pTemp->drawable.serialNumber) if (pGC->serialNumber != pTemp->drawable.serialNumber)
ValidateGC ((DrawablePtr) pTemp, pGC); ValidateGC ((DrawablePtr) pTemp, pGC);
(*pGC->ops->CopyArea)((DrawablePtr)pScreenPriv->pCoreBuffer->pSave, (*pGC->ops->CopyArea)((DrawablePtr)pBuffer->pSave,
(DrawablePtr)pTemp, pGC, 0, 0, w, h, 0, 0); (DrawablePtr)pTemp, pGC, 0, 0, w, h, 0, 0);
/* /*
@ -810,12 +873,12 @@ miDCMoveCursor (pScreen, pCursor, x, y, w, h, dx, dy, source, mask)
#ifdef ARGB_CURSOR #ifdef ARGB_CURSOR
if (pPriv->pPicture) if (pPriv->pPicture)
{ {
if (!EnsurePicture(pScreenPriv->pCoreBuffer->pTempPicture, &pTemp->drawable, pWin)) if (!EnsurePicture(pBuffer->pTempPicture, &pTemp->drawable, pWin))
return FALSE; return FALSE;
CompositePicture (PictOpOver, CompositePicture (PictOpOver,
pPriv->pPicture, pPriv->pPicture,
NULL, NULL,
pScreenPriv->pCoreBuffer->pTempPicture, pBuffer->pTempPicture,
0, 0, 0, 0, 0, 0, 0, 0,
dx, dy, dx, dy,
pCursor->bits->width, pCursor->bits->width,
@ -824,22 +887,22 @@ miDCMoveCursor (pScreen, pCursor, x, y, w, h, dx, dy, source, mask)
else else
#endif #endif
{ {
if (!pScreenPriv->pCoreBuffer->pPixSourceGC) if (!pBuffer->pPixSourceGC)
{ {
pScreenPriv->pCoreBuffer->pPixSourceGC = CreateGC ((DrawablePtr)pTemp, pBuffer->pPixSourceGC = CreateGC ((DrawablePtr)pTemp,
GCGraphicsExposures, &gcval, &status); GCGraphicsExposures, &gcval, &status);
if (!pScreenPriv->pCoreBuffer->pPixSourceGC) if (!pBuffer->pPixSourceGC)
return FALSE; return FALSE;
} }
if (!pScreenPriv->pCoreBuffer->pPixMaskGC) if (!pBuffer->pPixMaskGC)
{ {
pScreenPriv->pCoreBuffer->pPixMaskGC = CreateGC ((DrawablePtr)pTemp, pBuffer->pPixMaskGC = CreateGC ((DrawablePtr)pTemp,
GCGraphicsExposures, &gcval, &status); GCGraphicsExposures, &gcval, &status);
if (!pScreenPriv->pCoreBuffer->pPixMaskGC) if (!pBuffer->pPixMaskGC)
return FALSE; return FALSE;
} }
miDCPutBits ((DrawablePtr)pTemp, pPriv, miDCPutBits ((DrawablePtr)pTemp, pPriv,
pScreenPriv->pCoreBuffer->pPixSourceGC, pScreenPriv->pCoreBuffer->pPixMaskGC, pBuffer->pPixSourceGC, pBuffer->pPixMaskGC,
dx, dy, pCursor->bits->width, pCursor->bits->height, dx, dy, pCursor->bits->width, pCursor->bits->height,
source, mask); source, mask);
} }
@ -848,9 +911,9 @@ miDCMoveCursor (pScreen, pCursor, x, y, w, h, dx, dy, source, mask)
* copy the temporary pixmap onto the screen * copy the temporary pixmap onto the screen
*/ */
if (!EnsureGC(pScreenPriv->pCoreBuffer->pRestoreGC, pWin)) if (!EnsureGC(pBuffer->pRestoreGC, pWin))
return FALSE; return FALSE;
pGC = pScreenPriv->pCoreBuffer->pRestoreGC; pGC = pBuffer->pRestoreGC;
if (pWin->drawable.serialNumber != pGC->serialNumber) if (pWin->drawable.serialNumber != pGC->serialNumber)
ValidateGC ((DrawablePtr) pWin, pGC); ValidateGC ((DrawablePtr) pWin, pGC);

View File

@ -1084,7 +1084,8 @@ miSpriteRemoveCursor (pDevCursor, pScreen)
pScreenPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr; pScreenPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
miSpriteIsUpFALSE (pDevCursor, pScreen, pScreenPriv); miSpriteIsUpFALSE (pDevCursor, pScreen, pScreenPriv);
pDevCursor->pCacheWin = NullWindow; pDevCursor->pCacheWin = NullWindow;
if (!(*pScreenPriv->funcs->RestoreUnderCursor) (pScreen, if (!(*pScreenPriv->funcs->RestoreUnderCursor) (pDevCursor->id,
pScreen,
pDevCursor->saved.x1, pDevCursor->saved.x1,
pDevCursor->saved.y1, pDevCursor->saved.y1,
pDevCursor->saved.x2 - pDevCursor->saved.x2 -
@ -1117,7 +1118,8 @@ miSpriteRestoreCursor (pDevCursor, pScreen)
pCursor = pDevCursor->pCursor; pCursor = pDevCursor->pCursor;
x = pDevCursor->x - (int)pCursor->bits->xhot; x = pDevCursor->x - (int)pCursor->bits->xhot;
y = pDevCursor->y - (int)pCursor->bits->yhot; y = pDevCursor->y - (int)pCursor->bits->yhot;
if ((*pScreenPriv->funcs->SaveUnderCursor) (pScreen, if ((*pScreenPriv->funcs->SaveUnderCursor) (pDevCursor->id,
pScreen,
pDevCursor->saved.x1, pDevCursor->saved.x1,
pDevCursor->saved.y1, pDevCursor->saved.y1,
pDevCursor->saved.x2 - pDevCursor->saved.x2 -
@ -1127,7 +1129,8 @@ miSpriteRestoreCursor (pDevCursor, pScreen)
{ {
if (pDevCursor->checkPixels) if (pDevCursor->checkPixels)
miSpriteFindColors (pDevCursor, pScreen); miSpriteFindColors (pDevCursor, pScreen);
if ((*pScreenPriv->funcs->PutUpCursor) (pScreen, pCursor, x, y, if ((*pScreenPriv->funcs->PutUpCursor) (pDevCursor->id, pScreen,
pCursor, x, y,
pDevCursor->colors[SOURCE_COLOR].pixel, pDevCursor->colors[SOURCE_COLOR].pixel,
pDevCursor->colors[MASK_COLOR].pixel)) pDevCursor->colors[MASK_COLOR].pixel))
{ {

View File

@ -42,6 +42,7 @@ typedef struct {
CursorPtr /*pCursor*/ CursorPtr /*pCursor*/
); );
Bool (*PutUpCursor)( Bool (*PutUpCursor)(
int /* deviceid */,
ScreenPtr /*pScreen*/, ScreenPtr /*pScreen*/,
CursorPtr /*pCursor*/, CursorPtr /*pCursor*/,
int /*x*/, int /*x*/,
@ -50,6 +51,7 @@ typedef struct {
unsigned long /*mask*/ unsigned long /*mask*/
); );
Bool (*SaveUnderCursor)( Bool (*SaveUnderCursor)(
int /* deviceid */,
ScreenPtr /*pScreen*/, ScreenPtr /*pScreen*/,
int /*x*/, int /*x*/,
int /*y*/, int /*y*/,
@ -57,6 +59,7 @@ typedef struct {
int /*h*/ int /*h*/
); );
Bool (*RestoreUnderCursor)( Bool (*RestoreUnderCursor)(
int /* deviceid */,
ScreenPtr /*pScreen*/, ScreenPtr /*pScreen*/,
int /*x*/, int /*x*/,
int /*y*/, int /*y*/,
@ -64,6 +67,7 @@ typedef struct {
int /*h*/ int /*h*/
); );
Bool (*MoveCursor)( Bool (*MoveCursor)(
int /* deviceid */,
ScreenPtr /*pScreen*/, ScreenPtr /*pScreen*/,
CursorPtr /*pCursor*/, CursorPtr /*pCursor*/,
int /*x*/, int /*x*/,
@ -76,6 +80,7 @@ typedef struct {
unsigned long /*mask*/ unsigned long /*mask*/
); );
Bool (*ChangeSave)( Bool (*ChangeSave)(
int /* deviceid */,
ScreenPtr /*pScreen*/, ScreenPtr /*pScreen*/,
int /*x*/, int /*x*/,
int /*y*/, int /*y*/,