xfree86: re-enable hardware cursor (for a single cursor)
This commit enables HW rendering for cursors again, but only for a single cursor. Other cursors can be created, however they will not be visible.
This commit is contained in:
parent
6f63724b28
commit
3df88c17e3
|
@ -26,12 +26,18 @@ static Bool xf86CursorRealizeCursor(DeviceIntPtr, ScreenPtr, CursorPtr);
|
||||||
static Bool xf86CursorUnrealizeCursor(DeviceIntPtr, ScreenPtr, CursorPtr);
|
static Bool xf86CursorUnrealizeCursor(DeviceIntPtr, ScreenPtr, CursorPtr);
|
||||||
static void xf86CursorSetCursor(DeviceIntPtr, ScreenPtr, CursorPtr, int, int);
|
static void xf86CursorSetCursor(DeviceIntPtr, ScreenPtr, CursorPtr, int, int);
|
||||||
static void xf86CursorMoveCursor(DeviceIntPtr, ScreenPtr, int, int);
|
static void xf86CursorMoveCursor(DeviceIntPtr, ScreenPtr, int, int);
|
||||||
|
static Bool xf86DeviceCursorInitialize(DeviceIntPtr, ScreenPtr);
|
||||||
|
static void xf86DeviceCursorCleanup(DeviceIntPtr, ScreenPtr);
|
||||||
|
static void xf86DeviceCursorUndisplay(DeviceIntPtr, ScreenPtr);
|
||||||
|
|
||||||
static miPointerSpriteFuncRec xf86CursorSpriteFuncs = {
|
static miPointerSpriteFuncRec xf86CursorSpriteFuncs = {
|
||||||
xf86CursorRealizeCursor,
|
xf86CursorRealizeCursor,
|
||||||
xf86CursorUnrealizeCursor,
|
xf86CursorUnrealizeCursor,
|
||||||
xf86CursorSetCursor,
|
xf86CursorSetCursor,
|
||||||
xf86CursorMoveCursor
|
xf86CursorMoveCursor,
|
||||||
|
xf86DeviceCursorInitialize,
|
||||||
|
xf86DeviceCursorCleanup,
|
||||||
|
xf86DeviceCursorUndisplay
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Screen functions */
|
/* Screen functions */
|
||||||
|
@ -420,3 +426,43 @@ xf86DestroyCursorInfoRec(xf86CursorInfoPtr infoPtr)
|
||||||
{
|
{
|
||||||
xfree(infoPtr);
|
xfree(infoPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* New cursor has been created. Do your initalizations here.
|
||||||
|
*/
|
||||||
|
static Bool
|
||||||
|
xf86DeviceCursorInitialize(DeviceIntPtr pDev, ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
xf86CursorScreenPtr ScreenPriv = (xf86CursorScreenPtr)dixLookupPrivate(
|
||||||
|
&pScreen->devPrivates, xf86CursorScreenKey);
|
||||||
|
|
||||||
|
/* Init SW cursor */
|
||||||
|
return (*ScreenPriv->spriteFuncs->DeviceCursorInitialize)(pDev, pScreen);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cursor has been removed. Clean up after yourself.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
xf86DeviceCursorCleanup(DeviceIntPtr pDev, ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
xf86CursorScreenPtr ScreenPriv = (xf86CursorScreenPtr)dixLookupPrivate(
|
||||||
|
&pScreen->devPrivates, xf86CursorScreenKey);
|
||||||
|
|
||||||
|
/* Clean up SW cursor */
|
||||||
|
(*ScreenPriv->spriteFuncs->DeviceCursorCleanup)(pDev, pScreen);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called on server shutdown to remove all cursors from the screen before
|
||||||
|
* bringing the server down.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
xf86DeviceCursorUndisplay(DeviceIntPtr pDev, ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
xf86CursorScreenPtr ScreenPriv = (xf86CursorScreenPtr)dixLookupPrivate(
|
||||||
|
&pScreen->devPrivates, xf86CursorScreenKey);
|
||||||
|
|
||||||
|
/* Undisplay SW cursor */
|
||||||
|
(*ScreenPriv->spriteFuncs->UndisplayCursor)(pDev, pScreen);
|
||||||
|
}
|
||||||
|
|
|
@ -73,10 +73,6 @@ static unsigned char* RealizeCursorInterleave64(xf86CursorInfoPtr, CursorPtr);
|
||||||
Bool
|
Bool
|
||||||
xf86InitHardwareCursor(ScreenPtr pScreen, xf86CursorInfoPtr infoPtr)
|
xf86InitHardwareCursor(ScreenPtr pScreen, xf86CursorInfoPtr infoPtr)
|
||||||
{
|
{
|
||||||
/* Graphics cards cannot render multiple cursors in hardware. We have to
|
|
||||||
software render them. */
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if ((infoPtr->MaxWidth <= 0) || (infoPtr->MaxHeight <= 0))
|
if ((infoPtr->MaxWidth <= 0) || (infoPtr->MaxHeight <= 0))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue