[WIN32SS:ENG] Call display mouse functions only when using hardware pointer

Otherwise, use software pointer functions.

This fixes graphical glitches on cursor change, when the display driver
provides accelerated pointer functions (DrvSetPointerShape/DrvMovePointer),
but refuses to handle a certain cursor.

These graphical glitches may be reproduced:
- by using Voodoo driver SFFT 1.9
- by using framebuf_new.dll instead of framebuf.dll
- by using the panning driver (setting DefaultSettings.XPanning and
  DefaultSettings.YPanning in registry)
This commit is contained in:
Hervé Poussineau 2022-10-11 18:56:04 +02:00
parent e6841944b8
commit 162de4a0d8

View File

@ -84,7 +84,10 @@ MouseSafetyOnDrawStart(
&& pgp->Exclude.top <= HazardY2)
{
ppdev->SafetyRemoveLevel = ppdev->SafetyRemoveCount;
ppdev->pfnMovePointer(&ppdev->pSurface->SurfObj, -1, -1, NULL);
if (ppdev->flFlags & PDEV_HARDWARE_POINTER)
ppdev->pfnMovePointer(&ppdev->pSurface->SurfObj, -1, -1, NULL);
else if (ppdev->flFlags & PDEV_SOFTWARE_POINTER)
EngMovePointer(&ppdev->pSurface->SurfObj, -1, -1, NULL);
}
return TRUE;
@ -116,10 +119,16 @@ MouseSafetyOnDrawEnd(
return FALSE;
}
ppdev->pfnMovePointer(&ppdev->pSurface->SurfObj,
gpsi->ptCursor.x,
gpsi->ptCursor.y,
&pgp->Exclude);
if (ppdev->flFlags & PDEV_HARDWARE_POINTER)
ppdev->pfnMovePointer(&ppdev->pSurface->SurfObj,
gpsi->ptCursor.x,
gpsi->ptCursor.y,
&pgp->Exclude);
else if (ppdev->flFlags & PDEV_SOFTWARE_POINTER)
EngMovePointer(&ppdev->pSurface->SurfObj,
gpsi->ptCursor.x,
gpsi->ptCursor.y,
&pgp->Exclude);
ppdev->SafetyRemoveLevel = 0;