misprite: Fix software cursor on multiple ScreenRecs
This commit is contained in:
parent
2c000f4980
commit
bb89fc2771
|
@ -56,8 +56,6 @@ in this Software without prior written authorization from The Open Group.
|
||||||
#endif
|
#endif
|
||||||
# include "damage.h"
|
# include "damage.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define SPRITE_DEBUG_ENABLE 0
|
#define SPRITE_DEBUG_ENABLE 0
|
||||||
#if SPRITE_DEBUG_ENABLE
|
#if SPRITE_DEBUG_ENABLE
|
||||||
#define SPRITE_DEBUG(x) ErrorF x
|
#define SPRITE_DEBUG(x) ErrorF x
|
||||||
|
@ -65,29 +63,26 @@ in this Software without prior written authorization from The Open Group.
|
||||||
#define SPRITE_DEBUG(x)
|
#define SPRITE_DEBUG(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define MISPRITE(dev) \
|
#define MISPRITE(dev) \
|
||||||
((DevHasCursor(dev)) ? \
|
((DevHasCursor(dev)) ? \
|
||||||
(miCursorInfoPtr)dixLookupPrivate(&dev->devPrivates, miSpriteDevPrivatesKey) : \
|
(miCursorInfoPtr)dixLookupPrivate(&dev->devPrivates, miSpriteDevPrivatesKey) : \
|
||||||
(miCursorInfoPtr)dixLookupPrivate(&dev->u.master->devPrivates, miSpriteDevPrivatesKey))
|
(miCursorInfoPtr)dixLookupPrivate(&dev->u.master->devPrivates, miSpriteDevPrivatesKey))
|
||||||
|
|
||||||
static int damageRegister = 0;
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
miSpriteDisableDamage(ScreenPtr pScreen, miSpriteScreenPtr pScreenPriv)
|
miSpriteDisableDamage(ScreenPtr pScreen, miSpriteScreenPtr pScreenPriv)
|
||||||
{
|
{
|
||||||
if (damageRegister) {
|
if (pScreenPriv->damageRegistered) {
|
||||||
DamageUnregister (&(pScreen->GetScreenPixmap(pScreen)->drawable),
|
DamageUnregister (&(pScreen->GetScreenPixmap(pScreen)->drawable),
|
||||||
pScreenPriv->pDamage);
|
pScreenPriv->pDamage);
|
||||||
damageRegister = 0;
|
pScreenPriv->damageRegistered = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
miSpriteEnableDamage(ScreenPtr pScreen, miSpriteScreenPtr pScreenPriv)
|
miSpriteEnableDamage(ScreenPtr pScreen, miSpriteScreenPtr pScreenPriv)
|
||||||
{
|
{
|
||||||
if (!damageRegister) {
|
if (!pScreenPriv->damageRegistered) {
|
||||||
damageRegister = 1;
|
pScreenPriv->damageRegistered = 1;
|
||||||
DamageRegister (&(pScreen->GetScreenPixmap(pScreen)->drawable),
|
DamageRegister (&(pScreen->GetScreenPixmap(pScreen)->drawable),
|
||||||
pScreenPriv->pDamage);
|
pScreenPriv->pDamage);
|
||||||
}
|
}
|
||||||
|
@ -269,6 +264,8 @@ miSpriteInitialize (ScreenPtr pScreen,
|
||||||
pScreenPriv->colors[MASK_COLOR].red = 0;
|
pScreenPriv->colors[MASK_COLOR].red = 0;
|
||||||
pScreenPriv->colors[MASK_COLOR].green = 0;
|
pScreenPriv->colors[MASK_COLOR].green = 0;
|
||||||
pScreenPriv->colors[MASK_COLOR].blue = 0;
|
pScreenPriv->colors[MASK_COLOR].blue = 0;
|
||||||
|
pScreenPriv->damageRegistered = 0;
|
||||||
|
|
||||||
dixSetPrivate(&pScreen->devPrivates, miSpriteScreenKey, pScreenPriv);
|
dixSetPrivate(&pScreen->devPrivates, miSpriteScreenKey, pScreenPriv);
|
||||||
|
|
||||||
pScreen->CloseScreen = miSpriteCloseScreen;
|
pScreen->CloseScreen = miSpriteCloseScreen;
|
||||||
|
@ -282,8 +279,6 @@ miSpriteInitialize (ScreenPtr pScreen,
|
||||||
|
|
||||||
pScreen->BlockHandler = miSpriteBlockHandler;
|
pScreen->BlockHandler = miSpriteBlockHandler;
|
||||||
|
|
||||||
damageRegister = 0;
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -87,6 +87,7 @@ typedef struct {
|
||||||
VisualPtr pVisual;
|
VisualPtr pVisual;
|
||||||
miSpriteCursorFuncPtr funcs;
|
miSpriteCursorFuncPtr funcs;
|
||||||
DamagePtr pDamage; /* damage tracking structure */
|
DamagePtr pDamage; /* damage tracking structure */
|
||||||
|
Bool damageRegistered;
|
||||||
} miSpriteScreenRec, *miSpriteScreenPtr;
|
} miSpriteScreenRec, *miSpriteScreenPtr;
|
||||||
|
|
||||||
#define SOURCE_COLOR 0
|
#define SOURCE_COLOR 0
|
||||||
|
|
Loading…
Reference in New Issue