[PATCH v2 3/4] render: set anim cursor state for pointer enabled devices only
Tiago Vignatti
tiago.vignatti at nokia.com
Fri May 7 08:24:18 PDT 2010
The structure containing the state of animated cursor was amended within
SpriteInfoRec, removing all previously privates logic to keep such state.
API change: It was removed MAXDEVICES dependency \o/
Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>
---
include/inputstr.h | 7 ++++++
render/animcur.c | 59 +++++++++++++++-------------------------------------
2 files changed, 24 insertions(+), 42 deletions(-)
diff --git a/include/inputstr.h b/include/inputstr.h
index 6da3f38..e87411f 100644
--- a/include/inputstr.h
+++ b/include/inputstr.h
@@ -477,6 +477,13 @@ typedef struct _SpriteInfoRec {
DeviceIntPtr paired; /* The paired device. Keyboard if
spriteOwner is TRUE, otherwise the
pointer that owns the sprite. */
+
+ /* keep states for animated cursor */
+ CursorPtr pCursor;
+ ScreenPtr pScreen;
+ int elt;
+ CARD32 time;
+
} SpriteInfoRec, *SpriteInfoPtr;
/* device types */
diff --git a/render/animcur.c b/render/animcur.c
index eb74b1a..8e2b498 100644
--- a/render/animcur.c
+++ b/render/animcur.c
@@ -70,24 +70,12 @@ typedef struct _AnimScrPriv {
RecolorCursorProcPtr RecolorCursor;
} AnimCurScreenRec, *AnimCurScreenPtr;
-typedef struct _AnimCurState {
- CursorPtr pCursor;
- ScreenPtr pScreen;
- int elt;
- CARD32 time;
-} AnimCurStateRec, *AnimCurStatePtr;
-
-/* What a waste. But we need an API change to alloc it per device only. */
-static AnimCurStateRec animCurState[MAXDEVICES];
-
static unsigned char empty[4];
static CursorBits animCursorBits = {
empty, empty, 2, 1, 1, 0, 0, 1
};
-static int AnimCurGeneration;
-
static int AnimCurScreenPrivateKeyIndex;
static DevPrivateKey AnimCurScreenPrivateKey = &AnimCurScreenPrivateKeyIndex;
@@ -99,7 +87,6 @@ static DevPrivateKey AnimCurScreenPrivateKey = &AnimCurScreenPrivateKeyIndex;
#define Wrap(as,s,elt,func) (((as)->elt = (s)->elt), (s)->elt = func)
#define Unwrap(as,s,elt) ((s)->elt = (as)->elt)
-
static Bool
AnimCurCloseScreen (int index, ScreenPtr pScreen)
{
@@ -167,14 +154,14 @@ AnimCurScreenBlockHandler (int screenNum,
for (dev = inputInfo.devices; dev; dev = dev->next)
{
- if (IsPointerDevice(dev) && pScreen == animCurState[dev->id].pScreen)
+ if (IsPointerDevice(dev) && pScreen == dev->spriteInfo->pScreen)
{
if (!now) now = GetTimeInMillis ();
- if ((INT32) (now - animCurState[dev->id].time) >= 0)
+ if ((INT32) (now - dev->spriteInfo->time) >= 0)
{
- AnimCurPtr ac = GetAnimCur(animCurState[dev->id].pCursor);
- int elt = (animCurState[dev->id].elt + 1) % ac->nelt;
+ AnimCurPtr ac = GetAnimCur(dev->spriteInfo->pCursor);
+ int elt = (dev->spriteInfo->elt + 1) % ac->nelt;
DisplayCursorProcPtr DisplayCursor;
/*
@@ -190,12 +177,12 @@ AnimCurScreenBlockHandler (int screenNum,
as->DisplayCursor = pScreen->DisplayCursor;
pScreen->DisplayCursor = DisplayCursor;
- animCurState[dev->id].elt = elt;
- animCurState[dev->id].time = now + ac->elts[elt].delay;
+ dev->spriteInfo->elt = elt;
+ dev->spriteInfo->time = now + ac->elts[elt].delay;
}
- if (soonest > animCurState[dev->id].time)
- soonest = animCurState[dev->id].time;
+ if (soonest > dev->spriteInfo->time)
+ soonest = dev->spriteInfo->time;
}
}
@@ -218,7 +205,7 @@ AnimCurDisplayCursor (DeviceIntPtr pDev,
Unwrap (as, pScreen, DisplayCursor);
if (IsAnimCur(pCursor))
{
- if (pCursor != animCurState[pDev->id].pCursor)
+ if (pCursor != pDev->spriteInfo->pCursor)
{
AnimCurPtr ac = GetAnimCur(pCursor);
@@ -226,10 +213,10 @@ AnimCurDisplayCursor (DeviceIntPtr pDev,
(pDev, pScreen, ac->elts[0].pCursor);
if (ret)
{
- animCurState[pDev->id].elt = 0;
- animCurState[pDev->id].time = GetTimeInMillis () + ac->elts[0].delay;
- animCurState[pDev->id].pCursor = pCursor;
- animCurState[pDev->id].pScreen = pScreen;
+ pDev->spriteInfo->elt = 0;
+ pDev->spriteInfo->time = GetTimeInMillis () + ac->elts[0].delay;
+ pDev->spriteInfo->pCursor = pCursor;
+ pDev->spriteInfo->pScreen = pScreen;
}
}
else
@@ -237,8 +224,6 @@ AnimCurDisplayCursor (DeviceIntPtr pDev,
}
else
{
- animCurState[pDev->id].pCursor = 0;
- animCurState[pDev->id].pScreen = 0;
ret = (*pScreen->DisplayCursor) (pDev, pScreen, pCursor);
}
Wrap (as, pScreen, DisplayCursor, AnimCurDisplayCursor);
@@ -256,8 +241,9 @@ AnimCurSetCursorPosition (DeviceIntPtr pDev,
Bool ret;
Unwrap (as, pScreen, SetCursorPosition);
- if (animCurState[pDev->id].pCursor)
- animCurState[pDev->id].pScreen = pScreen;
+ if (pDev->spriteInfo->pCursor)
+ pDev->spriteInfo->pScreen = pScreen;
+
ret = (*pScreen->SetCursorPosition) (pDev, pScreen, x, y, generateEvent);
Wrap (as, pScreen, SetCursorPosition, AnimCurSetCursorPosition);
return ret;
@@ -322,7 +308,7 @@ AnimCurRecolorCursor (DeviceIntPtr pDev,
for (i = 0; i < ac->nelt; i++)
(*pScreen->RecolorCursor) (pDev, pScreen, ac->elts[i].pCursor,
displayed &&
- animCurState[pDev->id].elt == i);
+ pDev->spriteInfo->elt == i);
}
else
(*pScreen->RecolorCursor) (pDev, pScreen, pCursor, displayed);
@@ -334,17 +320,6 @@ AnimCurInit (ScreenPtr pScreen)
{
AnimCurScreenPtr as;
- if (AnimCurGeneration != serverGeneration)
- {
- int i;
- AnimCurGeneration = serverGeneration;
- for (i = 0; i < MAXDEVICES; i++) {
- animCurState[i].pCursor = 0;
- animCurState[i].pScreen = 0;
- animCurState[i].elt = 0;
- animCurState[i].time = 0;
- }
- }
as = (AnimCurScreenPtr) xalloc (sizeof (AnimCurScreenRec));
if (!as)
return FALSE;
--
1.6.0.4
More information about the xorg-devel
mailing list