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:
parent
3bad452d12
commit
1107d8bea2
12
Changelog
12
Changelog
|
@ -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
|
||||||
|
|
199
mi/midispcur.c
199
mi/midispcur.c
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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))
|
||||||
{
|
{
|
||||||
|
|
|
@ -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*/,
|
||||||
|
|
Loading…
Reference in New Issue