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 <[email protected]> --- 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 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
