mirror of
https://github.com/reactos/reactos.git
synced 2025-05-31 15:08:14 +00:00
[WIN32K]
Annotate mouse.c, move some prototypes to the proper location. Fix bugs in EngSetPointerShape and IntEngSetPointerShape, where the passed in XLATEOBJ could be NULL. Found by MSVC static analyzer. svn path=/trunk/; revision=66649
This commit is contained in:
parent
af94181e04
commit
eebc6ac87d
3 changed files with 119 additions and 85 deletions
|
@ -147,19 +147,6 @@ IntEngPaint(
|
||||||
_In_ POINTL *pptlBrushOrg,
|
_In_ POINTL *pptlBrushOrg,
|
||||||
_In_ __in_data_source(USER_MODE) MIX mix);
|
_In_ __in_data_source(USER_MODE) MIX mix);
|
||||||
|
|
||||||
ULONG APIENTRY
|
|
||||||
IntEngSetPointerShape(
|
|
||||||
IN SURFOBJ *pso,
|
|
||||||
IN SURFOBJ *psoMask,
|
|
||||||
IN SURFOBJ *psoColor,
|
|
||||||
IN XLATEOBJ *pxlo,
|
|
||||||
IN LONG xHot,
|
|
||||||
IN LONG yHot,
|
|
||||||
IN LONG x,
|
|
||||||
IN LONG y,
|
|
||||||
IN RECTL *prcl,
|
|
||||||
IN FLONG fl);
|
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
APIENTRY
|
APIENTRY
|
||||||
IntEngAlphaBlend(
|
IntEngAlphaBlend(
|
||||||
|
|
|
@ -15,14 +15,15 @@
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
|
__drv_preferredFunction("(see documentation)", "Obsolete, always returns false. ")
|
||||||
BOOL
|
BOOL
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngSetPointerTag(
|
EngSetPointerTag(
|
||||||
IN HDEV hdev,
|
_In_ HDEV hdev,
|
||||||
IN SURFOBJ *psoMask,
|
_In_opt_ SURFOBJ *psoMask,
|
||||||
IN SURFOBJ *psoColor,
|
_In_opt_ SURFOBJ *psoColor,
|
||||||
IN XLATEOBJ *pxlo,
|
_Reserved_ XLATEOBJ *pxlo,
|
||||||
IN FLONG fl)
|
_In_ FLONG fl)
|
||||||
{
|
{
|
||||||
// This function is obsolete for Windows 2000 and later.
|
// This function is obsolete for Windows 2000 and later.
|
||||||
// This function is still supported, but always returns FALSE.
|
// This function is still supported, but always returns FALSE.
|
||||||
|
@ -34,13 +35,15 @@ EngSetPointerTag(
|
||||||
* FUNCTION: Notify the mouse driver that drawing is about to begin in
|
* FUNCTION: Notify the mouse driver that drawing is about to begin in
|
||||||
* a rectangle on a particular surface.
|
* a rectangle on a particular surface.
|
||||||
*/
|
*/
|
||||||
INT NTAPI
|
_Requires_lock_held_(*ppdev->hsemDevLock)
|
||||||
|
BOOL
|
||||||
|
NTAPI
|
||||||
MouseSafetyOnDrawStart(
|
MouseSafetyOnDrawStart(
|
||||||
PPDEVOBJ ppdev,
|
_Inout_ PPDEVOBJ ppdev,
|
||||||
LONG HazardX1,
|
_In_ LONG HazardX1,
|
||||||
LONG HazardY1,
|
_In_ LONG HazardY1,
|
||||||
LONG HazardX2,
|
_In_ LONG HazardX2,
|
||||||
LONG HazardY2)
|
_In_ LONG HazardY2)
|
||||||
{
|
{
|
||||||
LONG tmp;
|
LONG tmp;
|
||||||
GDIPOINTER *pgp;
|
GDIPOINTER *pgp;
|
||||||
|
@ -84,15 +87,17 @@ MouseSafetyOnDrawStart(
|
||||||
ppdev->pfnMovePointer(&ppdev->pSurface->SurfObj, -1, -1, NULL);
|
ppdev->pfnMovePointer(&ppdev->pSurface->SurfObj, -1, -1, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(TRUE);
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* FUNCTION: Notify the mouse driver that drawing has finished on a surface.
|
* FUNCTION: Notify the mouse driver that drawing has finished on a surface.
|
||||||
*/
|
*/
|
||||||
INT NTAPI
|
_Requires_lock_held_(*ppdev->hsemDevLock)
|
||||||
|
BOOL
|
||||||
|
NTAPI
|
||||||
MouseSafetyOnDrawEnd(
|
MouseSafetyOnDrawEnd(
|
||||||
PPDEVOBJ ppdev)
|
_Inout_ PPDEVOBJ ppdev)
|
||||||
{
|
{
|
||||||
GDIPOINTER *pgp;
|
GDIPOINTER *pgp;
|
||||||
|
|
||||||
|
@ -118,7 +123,7 @@ MouseSafetyOnDrawEnd(
|
||||||
|
|
||||||
ppdev->SafetyRemoveLevel = 0;
|
ppdev->SafetyRemoveLevel = 0;
|
||||||
|
|
||||||
return(TRUE);
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SOFTWARE MOUSE POINTER IMPLEMENTATION **************************************/
|
/* SOFTWARE MOUSE POINTER IMPLEMENTATION **************************************/
|
||||||
|
@ -126,8 +131,8 @@ MouseSafetyOnDrawEnd(
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
IntHideMousePointer(
|
IntHideMousePointer(
|
||||||
PDEVOBJ *ppdev,
|
_Inout_ PDEVOBJ *ppdev,
|
||||||
SURFOBJ *psoDest)
|
_Inout_ SURFOBJ *psoDest)
|
||||||
{
|
{
|
||||||
GDIPOINTER *pgp;
|
GDIPOINTER *pgp;
|
||||||
POINTL pt;
|
POINTL pt;
|
||||||
|
@ -179,7 +184,9 @@ IntHideMousePointer(
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
IntShowMousePointer(PDEVOBJ *ppdev, SURFOBJ *psoDest)
|
IntShowMousePointer(
|
||||||
|
_Inout_ PDEVOBJ *ppdev,
|
||||||
|
_Inout_ SURFOBJ *psoDest)
|
||||||
{
|
{
|
||||||
GDIPOINTER *pgp;
|
GDIPOINTER *pgp;
|
||||||
POINTL pt;
|
POINTL pt;
|
||||||
|
@ -309,18 +316,19 @@ IntShowMousePointer(PDEVOBJ *ppdev, SURFOBJ *psoDest)
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
ULONG APIENTRY
|
ULONG
|
||||||
|
APIENTRY
|
||||||
EngSetPointerShape(
|
EngSetPointerShape(
|
||||||
IN SURFOBJ *pso,
|
_In_ SURFOBJ *pso,
|
||||||
IN SURFOBJ *psoMask,
|
_In_opt_ SURFOBJ *psoMask,
|
||||||
IN SURFOBJ *psoColor,
|
_In_opt_ SURFOBJ *psoColor,
|
||||||
IN XLATEOBJ *pxlo,
|
_In_opt_ XLATEOBJ *pxlo,
|
||||||
IN LONG xHot,
|
_In_ LONG xHot,
|
||||||
IN LONG yHot,
|
_In_ LONG yHot,
|
||||||
IN LONG x,
|
_In_ LONG x,
|
||||||
IN LONG y,
|
_In_ LONG y,
|
||||||
IN RECTL *prcl,
|
_In_ RECTL *prcl,
|
||||||
IN FLONG fl)
|
_In_ FLONG fl)
|
||||||
{
|
{
|
||||||
PDEVOBJ *ppdev;
|
PDEVOBJ *ppdev;
|
||||||
GDIPOINTER *pgp;
|
GDIPOINTER *pgp;
|
||||||
|
@ -335,6 +343,10 @@ EngSetPointerShape(
|
||||||
ppdev = GDIDEV(pso);
|
ppdev = GDIDEV(pso);
|
||||||
pgp = &ppdev->Pointer;
|
pgp = &ppdev->Pointer;
|
||||||
|
|
||||||
|
/* Handle the case where we have no XLATEOBJ */
|
||||||
|
if (pxlo == NULL)
|
||||||
|
pxlo = &gexloTrivial.xlo;
|
||||||
|
|
||||||
/* Do we have any bitmap at all? */
|
/* Do we have any bitmap at all? */
|
||||||
if (psoColor || psoMask)
|
if (psoColor || psoMask)
|
||||||
{
|
{
|
||||||
|
@ -549,13 +561,13 @@ failure:
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
VOID
|
||||||
VOID APIENTRY
|
APIENTRY
|
||||||
EngMovePointer(
|
EngMovePointer(
|
||||||
IN SURFOBJ *pso,
|
_In_ SURFOBJ *pso,
|
||||||
IN LONG x,
|
_In_ LONG x,
|
||||||
IN LONG y,
|
_In_ LONG y,
|
||||||
IN RECTL *prcl)
|
_In_ RECTL *prcl)
|
||||||
{
|
{
|
||||||
PDEVOBJ *ppdev;
|
PDEVOBJ *ppdev;
|
||||||
GDIPOINTER *pgp;
|
GDIPOINTER *pgp;
|
||||||
|
@ -589,18 +601,19 @@ EngMovePointer(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ULONG APIENTRY
|
ULONG
|
||||||
|
NTAPI
|
||||||
IntEngSetPointerShape(
|
IntEngSetPointerShape(
|
||||||
IN SURFOBJ *pso,
|
_In_ SURFOBJ *pso,
|
||||||
IN SURFOBJ *psoMask,
|
_In_opt_ SURFOBJ *psoMask,
|
||||||
IN SURFOBJ *psoColor,
|
_In_opt_ SURFOBJ *psoColor,
|
||||||
IN XLATEOBJ *pxlo,
|
_In_opt_ XLATEOBJ *pxlo,
|
||||||
IN LONG xHot,
|
_In_ LONG xHot,
|
||||||
IN LONG yHot,
|
_In_ LONG yHot,
|
||||||
IN LONG x,
|
_In_ LONG x,
|
||||||
IN LONG y,
|
_In_ LONG y,
|
||||||
IN RECTL *prcl,
|
_In_ RECTL *prcl,
|
||||||
IN FLONG fl)
|
_In_ FLONG fl)
|
||||||
{
|
{
|
||||||
ULONG ulResult = SPS_DECLINE;
|
ULONG ulResult = SPS_DECLINE;
|
||||||
PFN_DrvSetPointerShape pfnSetPointerShape;
|
PFN_DrvSetPointerShape pfnSetPointerShape;
|
||||||
|
@ -610,6 +623,11 @@ IntEngSetPointerShape(
|
||||||
|
|
||||||
if (pfnSetPointerShape)
|
if (pfnSetPointerShape)
|
||||||
{
|
{
|
||||||
|
/* Drivers expect to get an XLATEOBJ */
|
||||||
|
if (pxlo == NULL)
|
||||||
|
pxlo = &gexloTrivial.xlo;
|
||||||
|
|
||||||
|
/* Call the driver */
|
||||||
ulResult = pfnSetPointerShape(pso,
|
ulResult = pfnSetPointerShape(pso,
|
||||||
psoMask,
|
psoMask,
|
||||||
psoColor,
|
psoColor,
|
||||||
|
@ -651,14 +669,14 @@ IntEngSetPointerShape(
|
||||||
ULONG
|
ULONG
|
||||||
NTAPI
|
NTAPI
|
||||||
GreSetPointerShape(
|
GreSetPointerShape(
|
||||||
HDC hdc,
|
_In_ HDC hdc,
|
||||||
HBITMAP hbmMask,
|
_In_opt_ HBITMAP hbmMask,
|
||||||
HBITMAP hbmColor,
|
_In_opt_ HBITMAP hbmColor,
|
||||||
LONG xHot,
|
_In_ LONG xHot,
|
||||||
LONG yHot,
|
_In_ LONG yHot,
|
||||||
LONG x,
|
_In_ LONG x,
|
||||||
LONG y,
|
_In_ LONG y,
|
||||||
FLONG fl)
|
_In_ FLONG fl)
|
||||||
{
|
{
|
||||||
PDC pdc;
|
PDC pdc;
|
||||||
PSURFACE psurf, psurfMask, psurfColor;
|
PSURFACE psurf, psurfMask, psurfColor;
|
||||||
|
@ -686,7 +704,9 @@ GreSetPointerShape(
|
||||||
|
|
||||||
/* Lock the mask bitmap */
|
/* Lock the mask bitmap */
|
||||||
if (hbmMask)
|
if (hbmMask)
|
||||||
|
{
|
||||||
psurfMask = SURFACE_ShareLockSurface(hbmMask);
|
psurfMask = SURFACE_ShareLockSurface(hbmMask);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//ASSERT(fl & SPS_ALPHA);
|
//ASSERT(fl & SPS_ALPHA);
|
||||||
|
@ -707,9 +727,9 @@ GreSetPointerShape(
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
psurfColor = NULL;
|
psurfColor = NULL;
|
||||||
|
|
||||||
/* We must have a valid surface in case of alpha bitmap */
|
/* We must have a valid surface in case of alpha bitmap */
|
||||||
ASSERT(((fl & SPS_ALPHA) && psurfColor) || !(fl & SPS_ALPHA));
|
ASSERT(((fl & SPS_ALPHA) && psurfColor) || !(fl & SPS_ALPHA));
|
||||||
|
|
||||||
/* Call the driver or eng function */
|
/* Call the driver or eng function */
|
||||||
ulResult = IntEngSetPointerShape(&psurf->SurfObj,
|
ulResult = IntEngSetPointerShape(&psurf->SurfObj,
|
||||||
|
@ -745,9 +765,9 @@ GreSetPointerShape(
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
GreMovePointer(
|
GreMovePointer(
|
||||||
HDC hdc,
|
_In_ HDC hdc,
|
||||||
LONG x,
|
_In_ LONG x,
|
||||||
LONG y)
|
_In_ LONG y)
|
||||||
{
|
{
|
||||||
PDC pdc;
|
PDC pdc;
|
||||||
PRECTL prcl;
|
PRECTL prcl;
|
||||||
|
|
|
@ -1,24 +1,51 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
INT NTAPI MouseSafetyOnDrawStart(PPDEVOBJ ppdev, LONG HazardX1, LONG HazardY1, LONG HazardX2, LONG HazardY2);
|
_Requires_lock_held_(*ppdev->hsemDevLock)
|
||||||
INT NTAPI MouseSafetyOnDrawEnd(PPDEVOBJ ppdev);
|
BOOL
|
||||||
|
NTAPI
|
||||||
|
MouseSafetyOnDrawStart(
|
||||||
|
_Inout_ PPDEVOBJ ppdev,
|
||||||
|
_In_ LONG HazardX1,
|
||||||
|
_In_ LONG HazardY1,
|
||||||
|
_In_ LONG HazardX2,
|
||||||
|
_In_ LONG HazardY2);
|
||||||
|
|
||||||
|
_Requires_lock_held_(*ppdev->hsemDevLock)
|
||||||
|
BOOL
|
||||||
|
NTAPI
|
||||||
|
MouseSafetyOnDrawEnd(
|
||||||
|
_Inout_ PPDEVOBJ ppdev);
|
||||||
|
|
||||||
|
ULONG
|
||||||
|
NTAPI
|
||||||
|
IntEngSetPointerShape(
|
||||||
|
_In_ SURFOBJ *pso,
|
||||||
|
_In_opt_ SURFOBJ *psoMask,
|
||||||
|
_In_opt_ SURFOBJ *psoColor,
|
||||||
|
_In_opt_ XLATEOBJ *pxlo,
|
||||||
|
_In_ LONG xHot,
|
||||||
|
_In_ LONG yHot,
|
||||||
|
_In_ LONG x,
|
||||||
|
_In_ LONG y,
|
||||||
|
_In_ RECTL *prcl,
|
||||||
|
_In_ FLONG fl);
|
||||||
|
|
||||||
ULONG
|
ULONG
|
||||||
NTAPI
|
NTAPI
|
||||||
GreSetPointerShape(
|
GreSetPointerShape(
|
||||||
HDC hdc,
|
_In_ HDC hdc,
|
||||||
HBITMAP hbmMask,
|
_In_opt_ HBITMAP hbmMask,
|
||||||
HBITMAP hbmColor,
|
_In_opt_ HBITMAP hbmColor,
|
||||||
LONG xHot,
|
_In_ LONG xHot,
|
||||||
LONG yHot,
|
_In_ LONG yHot,
|
||||||
LONG x,
|
_In_ LONG x,
|
||||||
LONG y,
|
_In_ LONG y,
|
||||||
FLONG fl);
|
_In_ FLONG fl);
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
GreMovePointer(
|
GreMovePointer(
|
||||||
HDC hdc,
|
_In_ HDC hdc,
|
||||||
LONG x,
|
_In_ LONG x,
|
||||||
LONG y);
|
_In_ LONG y);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue