[FORMATTING]

- fix indentation
- remove the large file header, fix the small one

svn path=/trunk/; revision=40390
This commit is contained in:
Timo Kreuzer 2009-04-06 03:20:25 +00:00
parent 579dc0993e
commit f0179f8ce1

View file

@ -1,26 +1,7 @@
/*
* ReactOS W32 Subsystem
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 ReactOS Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* $Id$
*
* PROJECT: ReactOS kernel
* PURPOSE: Mouse
* FILE: subsys/win32k/eng/mouse.c
/*
* PROJECT: ReactOS win32 subsystem
* PURPOSE: Mouse pointer functions
* FILE: subsystems/win32k/eng/mouse.c
* PROGRAMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
* REVISION HISTORY:
* 06-06-2001 CSH Created
@ -34,495 +15,481 @@
/* FUNCTIONS *****************************************************************/
INT INTERNAL_CALL
MouseSafetyOnDrawStart(SURFOBJ *SurfObj, LONG HazardX1,
LONG HazardY1, LONG HazardX2, LONG HazardY2)
/*
* FUNCTION: Notify the mouse driver that drawing is about to begin in
* a rectangle on a particular surface.
*/
INT INTERNAL_CALL
MouseSafetyOnDrawStart(
SURFOBJ *SurfObj,
LONG HazardX1,
LONG HazardY1,
LONG HazardX2,
LONG HazardY2)
{
LONG tmp;
PDEVOBJ *ppdev;
GDIPOINTER *pgp;
LONG tmp;
PDEVOBJ *ppdev;
GDIPOINTER *pgp;
ASSERT(SurfObj != NULL);
ASSERT(SurfObj != NULL);
ppdev = GDIDEV(SurfObj);
if(ppdev == NULL)
ppdev = GDIDEV(SurfObj);
if (ppdev == NULL)
{
return(FALSE);
return(FALSE);
}
pgp = &ppdev->Pointer;
pgp = &ppdev->Pointer;
if (SPS_ACCEPT_NOEXCLUDE == pgp->Status ||
pgp->Exclude.right == -1)
if (SPS_ACCEPT_NOEXCLUDE == pgp->Status ||
pgp->Exclude.right == -1)
{
return(FALSE);
return(FALSE);
}
if (HazardX1 > HazardX2)
if (HazardX1 > HazardX2)
{
tmp = HazardX2; HazardX2 = HazardX1; HazardX1 = tmp;
tmp = HazardX2;
HazardX2 = HazardX1;
HazardX1 = tmp;
}
if (HazardY1 > HazardY2)
if (HazardY1 > HazardY2)
{
tmp = HazardY2; HazardY2 = HazardY1; HazardY1 = tmp;
tmp = HazardY2;
HazardY2 = HazardY1;
HazardY1 = tmp;
}
if (ppdev->SafetyRemoveLevel != 0)
if (ppdev->SafetyRemoveLevel != 0)
{
ppdev->SafetyRemoveCount++;
return FALSE;
ppdev->SafetyRemoveCount++;
return FALSE;
}
ppdev->SafetyRemoveCount++;
ppdev->SafetyRemoveCount++;
if (pgp->Exclude.right >= HazardX1
&& pgp->Exclude.left <= HazardX2
&& pgp->Exclude.bottom >= HazardY1
&& pgp->Exclude.top <= HazardY2)
if (pgp->Exclude.right >= HazardX1
&& pgp->Exclude.left <= HazardX2
&& pgp->Exclude.bottom >= HazardY1
&& pgp->Exclude.top <= HazardY2)
{
ppdev->SafetyRemoveLevel = ppdev->SafetyRemoveCount;
if (pgp->MovePointer)
pgp->MovePointer(SurfObj, -1, -1, NULL);
else
EngMovePointer(SurfObj, -1, -1, NULL);
ppdev->SafetyRemoveLevel = ppdev->SafetyRemoveCount;
if (pgp->MovePointer)
pgp->MovePointer(SurfObj, -1, -1, NULL);
else
EngMovePointer(SurfObj, -1, -1, NULL);
}
return(TRUE);
return(TRUE);
}
INT INTERNAL_CALL
MouseSafetyOnDrawEnd(SURFOBJ *SurfObj)
/*
* FUNCTION: Notify the mouse driver that drawing has finished on a surface.
*/
INT INTERNAL_CALL
MouseSafetyOnDrawEnd(
SURFOBJ *SurfObj)
{
PDEVOBJ *ppdev;
GDIPOINTER *pgp;
PDEVOBJ *ppdev;
GDIPOINTER *pgp;
ASSERT(SurfObj != NULL);
ASSERT(SurfObj != NULL);
ppdev = GDIDEV(SurfObj);
ppdev = GDIDEV(SurfObj);
if(ppdev == NULL)
if (ppdev == NULL)
{
return(FALSE);
return(FALSE);
}
pgp = &ppdev->Pointer;
pgp = &ppdev->Pointer;
if(SPS_ACCEPT_NOEXCLUDE == pgp->Status ||
pgp->Exclude.right == -1)
{
return FALSE;
}
if (SPS_ACCEPT_NOEXCLUDE == pgp->Status ||
pgp->Exclude.right == -1)
{
return FALSE;
}
if (--ppdev->SafetyRemoveCount >= ppdev->SafetyRemoveLevel)
{
return FALSE;
}
if (pgp->MovePointer)
pgp->MovePointer(SurfObj, gpsi->ptCursor.x, gpsi->ptCursor.y, &pgp->Exclude);
else
EngMovePointer(SurfObj, gpsi->ptCursor.x, gpsi->ptCursor.y, &pgp->Exclude);
if (--ppdev->SafetyRemoveCount >= ppdev->SafetyRemoveLevel)
{
return FALSE;
}
if (pgp->MovePointer)
pgp->MovePointer(SurfObj, gpsi->ptCursor.x, gpsi->ptCursor.y, &pgp->Exclude);
else
EngMovePointer(SurfObj, gpsi->ptCursor.x, gpsi->ptCursor.y, &pgp->Exclude);
ppdev->SafetyRemoveLevel = 0;
ppdev->SafetyRemoveLevel = 0;
return(TRUE);
return(TRUE);
}
/* SOFTWARE MOUSE POINTER IMPLEMENTATION **************************************/
VOID INTERNAL_CALL
IntHideMousePointer(PDEVOBJ *ppdev, SURFOBJ *psoDest)
IntHideMousePointer(
PDEVOBJ *ppdev,
SURFOBJ *psoDest)
{
GDIPOINTER *pgp;
POINTL pt;
GDIPOINTER *pgp;
POINTL pt;
ASSERT(ppdev);
ASSERT(psoDest);
ASSERT(ppdev);
ASSERT(psoDest);
pgp = &ppdev->Pointer;
pgp = &ppdev->Pointer;
if (!pgp->Enabled)
{
return;
}
if (!pgp->Enabled)
{
return;
}
pgp->Enabled = FALSE;
/* The mouse is hide from ShowCours and it is frist ?? */
if (pgp->ShowPointer < 0)
{
return ;
}
/* Hide the cours */
pt.x = gpsi->ptCursor.x - pgp->HotSpot.x;
pt.y = gpsi->ptCursor.y - pgp->HotSpot.y;
if (pgp->SaveSurface != NULL)
{
RECTL DestRect;
POINTL SrcPoint;
SURFOBJ *SaveSurface;
SURFOBJ *MaskSurface;
pgp->Enabled = FALSE;
DestRect.left = max(pt.x, 0);
DestRect.top = max(pt.y, 0);
DestRect.right = min(
pt.x + pgp->Size.cx,
psoDest->sizlBitmap.cx);
DestRect.bottom = min(
pt.y + pgp->Size.cy,
psoDest->sizlBitmap.cy);
/*
* The mouse is hide from ShowCours and it is frist ??
*/
if (pgp->ShowPointer < 0)
{
return ;
}
SrcPoint.x = max(-pt.x, 0);
SrcPoint.y = max(-pt.y, 0);
/*
* Hide the cours
*/
pt.x = gpsi->ptCursor.x - pgp->HotSpot.x;
pt.y = gpsi->ptCursor.y - pgp->HotSpot.y;
if (pgp->SaveSurface != NULL)
{
RECTL DestRect;
POINTL SrcPoint;
SURFOBJ *SaveSurface;
SURFOBJ *MaskSurface;
DestRect.left = max(pt.x, 0);
DestRect.top = max(pt.y, 0);
DestRect.right = min(
pt.x + pgp->Size.cx,
psoDest->sizlBitmap.cx);
DestRect.bottom = min(
pt.y + pgp->Size.cy,
psoDest->sizlBitmap.cy);
SrcPoint.x = max(-pt.x, 0);
SrcPoint.y = max(-pt.y, 0);
if((SaveSurface = EngLockSurface(pgp->SaveSurface)))
{
if((MaskSurface = EngLockSurface(pgp->MaskSurface)))
if ((SaveSurface = EngLockSurface(pgp->SaveSurface)))
{
IntEngBitBltEx(psoDest, SaveSurface, MaskSurface, NULL, NULL,
&DestRect, &SrcPoint, &SrcPoint, NULL, NULL,
ROP3_TO_ROP4(SRCCOPY), FALSE);
EngUnlockSurface(MaskSurface);
if ((MaskSurface = EngLockSurface(pgp->MaskSurface)))
{
IntEngBitBltEx(psoDest, SaveSurface, MaskSurface, NULL, NULL,
&DestRect, &SrcPoint, &SrcPoint, NULL, NULL,
ROP3_TO_ROP4(SRCCOPY), FALSE);
EngUnlockSurface(MaskSurface);
}
EngUnlockSurface(SaveSurface);
}
EngUnlockSurface(SaveSurface);
}
}
}
}
VOID INTERNAL_CALL
IntShowMousePointer(PDEVOBJ *ppdev, SURFOBJ *psoDest)
{
GDIPOINTER *pgp;
SURFOBJ *SaveSurface;
POINTL pt;
GDIPOINTER *pgp;
SURFOBJ *SaveSurface;
POINTL pt;
ASSERT(ppdev);
ASSERT(psoDest);
ASSERT(ppdev);
ASSERT(psoDest);
pgp = &ppdev->Pointer;
pgp = &ppdev->Pointer;
if (pgp->Enabled)
{
return;
}
if (pgp->Enabled)
{
return;
}
pgp->Enabled = TRUE;
pgp->Enabled = TRUE;
/*
* Do not blt the mouse if it in hide
*/
if (pgp->ShowPointer < 0)
{
return ;
}
/* Do not blt the mouse if it in hide */
if (pgp->ShowPointer < 0)
{
return ;
}
pt.x = gpsi->ptCursor.x - pgp->HotSpot.x;
pt.y = gpsi->ptCursor.y - pgp->HotSpot.y;
pt.x = gpsi->ptCursor.x - pgp->HotSpot.x;
pt.y = gpsi->ptCursor.y - pgp->HotSpot.y;
/*
* Copy the pixels under the cursor to temporary surface.
*/
/* Copy the pixels under the cursor to temporary surface. */
if (pgp->SaveSurface != NULL &&
(SaveSurface = EngLockSurface(pgp->SaveSurface)))
{
RECTL DestRect;
POINTL SrcPoint;
if (pgp->SaveSurface != NULL &&
(SaveSurface = EngLockSurface(pgp->SaveSurface)))
{
RECTL DestRect;
POINTL SrcPoint;
SrcPoint.x = max(pt.x, 0);
SrcPoint.y = max(pt.y, 0);
SrcPoint.x = max(pt.x, 0);
SrcPoint.y = max(pt.y, 0);
DestRect.left = SrcPoint.x - pt.x;
DestRect.top = SrcPoint.y - pt.y;
DestRect.right = min(
pgp->Size.cx,
psoDest->sizlBitmap.cx - pt.x);
DestRect.bottom = min(
pgp->Size.cy,
psoDest->sizlBitmap.cy - pt.y);
DestRect.left = SrcPoint.x - pt.x;
DestRect.top = SrcPoint.y - pt.y;
DestRect.right = min(
pgp->Size.cx,
psoDest->sizlBitmap.cx - pt.x);
DestRect.bottom = min(
pgp->Size.cy,
psoDest->sizlBitmap.cy - pt.y);
IntEngBitBltEx(SaveSurface, psoDest, NULL, NULL, NULL,
&DestRect, &SrcPoint, NULL, NULL, NULL,
ROP3_TO_ROP4(SRCCOPY), FALSE);
EngUnlockSurface(SaveSurface);
}
IntEngBitBltEx(SaveSurface, psoDest, NULL, NULL, NULL,
&DestRect, &SrcPoint, NULL, NULL, NULL,
ROP3_TO_ROP4(SRCCOPY), FALSE);
EngUnlockSurface(SaveSurface);
}
/*
* Blit the cursor on the screen.
*/
/* Blit the cursor on the screen. */
{
RECTL DestRect;
POINTL SrcPoint;
SURFOBJ *psoColor;
SURFOBJ *psoMask = NULL;
{
RECTL DestRect;
POINTL SrcPoint;
SURFOBJ *psoColor;
SURFOBJ *psoMask = NULL;
DestRect.left = max(pt.x, 0);
DestRect.top = max(pt.y, 0);
DestRect.right = min(
pt.x + pgp->Size.cx,
psoDest->sizlBitmap.cx);
DestRect.bottom = min(
pt.y + pgp->Size.cy,
psoDest->sizlBitmap.cy);
DestRect.left = max(pt.x, 0);
DestRect.top = max(pt.y, 0);
DestRect.right = min(
pt.x + pgp->Size.cx,
psoDest->sizlBitmap.cx);
DestRect.bottom = min(
pt.y + pgp->Size.cy,
psoDest->sizlBitmap.cy);
SrcPoint.x = max(-pt.x, 0);
SrcPoint.y = max(-pt.y, 0);
SrcPoint.x = max(-pt.x, 0);
SrcPoint.y = max(-pt.y, 0);
if (pgp->MaskSurface)
psoMask = EngLockSurface(pgp->MaskSurface);
if (pgp->MaskSurface)
psoMask = EngLockSurface(pgp->MaskSurface);
if (psoMask != NULL)
{
if (pgp->ColorSurface != NULL)
if (psoMask != NULL)
{
if((psoColor = EngLockSurface(pgp->ColorSurface)))
{
IntEngBitBltEx(psoDest, psoColor, psoMask, NULL,
pgp->XlateObject, &DestRect, &SrcPoint, &SrcPoint,
NULL, NULL, R4_MASK, FALSE);
EngUnlockSurface(psoColor);
}
if (pgp->ColorSurface != NULL)
{
if ((psoColor = EngLockSurface(pgp->ColorSurface)))
{
IntEngBitBltEx(psoDest, psoColor, psoMask, NULL,
pgp->XlateObject, &DestRect, &SrcPoint, &SrcPoint,
NULL, NULL, R4_MASK, FALSE);
EngUnlockSurface(psoColor);
}
}
else
{
IntEngBitBltEx(psoDest, psoMask, NULL, NULL, pgp->XlateObject,
&DestRect, &SrcPoint, NULL, NULL, NULL,
ROP3_TO_ROP4(SRCAND), FALSE);
SrcPoint.y += pgp->Size.cy;
IntEngBitBltEx(psoDest, psoMask, NULL, NULL, pgp->XlateObject,
&DestRect, &SrcPoint, NULL, NULL, NULL,
ROP3_TO_ROP4(SRCINVERT), FALSE);
}
EngUnlockSurface(psoMask);
}
else
{
IntEngBitBltEx(psoDest, psoMask, NULL, NULL, pgp->XlateObject,
&DestRect, &SrcPoint, NULL, NULL, NULL,
ROP3_TO_ROP4(SRCAND), FALSE);
SrcPoint.y += pgp->Size.cy;
IntEngBitBltEx(psoDest, psoMask, NULL, NULL, pgp->XlateObject,
&DestRect, &SrcPoint, NULL, NULL, NULL,
ROP3_TO_ROP4(SRCINVERT), FALSE);
}
EngUnlockSurface(psoMask);
}
}
}
}
/*
* @implemented
*/
ULONG APIENTRY
EngSetPointerShape(
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)
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)
{
PDEVOBJ *ppdev;
SURFOBJ *psoTemp;
GDIPOINTER *pgp;
PDEVOBJ *ppdev;
SURFOBJ *psoTemp;
GDIPOINTER *pgp;
ASSERT(pso);
ASSERT(pso);
ppdev = GDIDEV(pso);
pgp = &ppdev->Pointer;
ppdev = GDIDEV(pso);
pgp = &ppdev->Pointer;
IntHideMousePointer(ppdev, pso);
IntHideMousePointer(ppdev, pso);
if (pgp->ColorSurface != NULL)
{
/* FIXME: Is this really needed? */
if((psoTemp = EngLockSurface(pgp->ColorSurface)))
{
EngFreeMem(psoTemp->pvBits);
psoTemp->pvBits = 0;
EngUnlockSurface(psoTemp);
}
if (pgp->ColorSurface != NULL)
{
/* FIXME: Is this really needed? */
if ((psoTemp = EngLockSurface(pgp->ColorSurface)))
{
EngFreeMem(psoTemp->pvBits);
psoTemp->pvBits = 0;
EngUnlockSurface(psoTemp);
}
EngDeleteSurface(pgp->ColorSurface);
pgp->MaskSurface = NULL;
}
EngDeleteSurface(pgp->ColorSurface);
pgp->MaskSurface = NULL;
}
if (pgp->MaskSurface != NULL)
{
/* FIXME: Is this really needed? */
if((psoTemp = EngLockSurface(pgp->MaskSurface)))
{
EngFreeMem(psoTemp->pvBits);
psoTemp->pvBits = 0;
EngUnlockSurface(psoTemp);
}
if (pgp->MaskSurface != NULL)
{
/* FIXME: Is this really needed? */
if ((psoTemp = EngLockSurface(pgp->MaskSurface)))
{
EngFreeMem(psoTemp->pvBits);
psoTemp->pvBits = 0;
EngUnlockSurface(psoTemp);
}
EngDeleteSurface(pgp->MaskSurface);
pgp->MaskSurface = NULL;
}
EngDeleteSurface(pgp->MaskSurface);
pgp->MaskSurface = NULL;
}
if (pgp->SaveSurface != NULL)
{
EngDeleteSurface(pgp->SaveSurface);
pgp->SaveSurface = NULL;
}
if (pgp->SaveSurface != NULL)
{
EngDeleteSurface(pgp->SaveSurface);
pgp->SaveSurface = NULL;
}
if (pgp->XlateObject != NULL)
{
EngDeleteXlate(pgp->XlateObject);
pgp->XlateObject = NULL;
}
if (pgp->XlateObject != NULL)
{
EngDeleteXlate(pgp->XlateObject);
pgp->XlateObject = NULL;
}
/*
* See if we are being asked to hide the pointer.
*/
/* See if we are being asked to hide the pointer. */
if (psoMask == NULL)
{
return SPS_ACCEPT_NOEXCLUDE;
}
if (psoMask == NULL)
{
return SPS_ACCEPT_NOEXCLUDE;
}
pgp->HotSpot.x = xHot;
pgp->HotSpot.y = yHot;
pgp->HotSpot.x = xHot;
pgp->HotSpot.y = yHot;
/* Actually this should be set by 'the other side', but it would be
* done right after this. It helps IntShowMousePointer. */
if (x != -1)
{
gpsi->ptCursor.x = x;
gpsi->ptCursor.y = y;
}
/* Actually this should be set by 'the other side', but it would be
* done right after this. It helps IntShowMousePointer. */
if (x != -1)
{
gpsi->ptCursor.x = x;
gpsi->ptCursor.y = y;
}
pgp->Size.cx = abs(psoMask->lDelta) << 3;
pgp->Size.cy = (psoMask->cjBits / abs(psoMask->lDelta)) >> 1;
pgp->Size.cx = abs(psoMask->lDelta) << 3;
pgp->Size.cy = (psoMask->cjBits / abs(psoMask->lDelta)) >> 1;
if (psoColor != NULL)
{
PBYTE Bits;
if (psoColor != NULL)
{
PBYTE Bits;
Bits = EngAllocMem(0, psoColor->cjBits, TAG_MOUSE);
if (Bits == NULL)
{
return SPS_ERROR;
}
Bits = EngAllocMem(0, psoColor->cjBits, TAG_MOUSE);
if (Bits == NULL)
{
return SPS_ERROR;
}
memcpy(Bits, psoColor->pvBits, psoColor->cjBits);
memcpy(Bits, psoColor->pvBits, psoColor->cjBits);
pgp->ColorSurface = (HSURF)EngCreateBitmap(pgp->Size,
psoColor->lDelta, psoColor->iBitmapFormat,
psoColor->lDelta < 0 ? 0 : BMF_TOPDOWN, Bits);
}
else
{
pgp->ColorSurface = NULL;
}
pgp->ColorSurface = (HSURF)EngCreateBitmap(pgp->Size,
psoColor->lDelta, psoColor->iBitmapFormat,
psoColor->lDelta < 0 ? 0 : BMF_TOPDOWN, Bits);
}
else
{
pgp->ColorSurface = NULL;
}
{
SIZEL Size;
PBYTE Bits;
{
SIZEL Size;
PBYTE Bits;
Size.cx = pgp->Size.cx;
Size.cy = pgp->Size.cy << 1;
Bits = EngAllocMem(0, psoMask->cjBits, TAG_MOUSE);
if (Bits == NULL)
{
return SPS_ERROR;
}
Size.cx = pgp->Size.cx;
Size.cy = pgp->Size.cy << 1;
Bits = EngAllocMem(0, psoMask->cjBits, TAG_MOUSE);
if (Bits == NULL)
{
return SPS_ERROR;
}
memcpy(Bits, psoMask->pvBits, psoMask->cjBits);
memcpy(Bits, psoMask->pvBits, psoMask->cjBits);
pgp->MaskSurface = (HSURF)EngCreateBitmap(Size,
psoMask->lDelta, psoMask->iBitmapFormat,
psoMask->lDelta < 0 ? 0 : BMF_TOPDOWN, Bits);
}
pgp->MaskSurface = (HSURF)EngCreateBitmap(Size,
psoMask->lDelta, psoMask->iBitmapFormat,
psoMask->lDelta < 0 ? 0 : BMF_TOPDOWN, Bits);
}
/* Create an XLATEOBJ that will be used for drawing masks.
* FIXME: We should get this in pxlo parameter! */
if (pxlo == NULL)
{
HPALETTE BWPalette, DestPalette;
ULONG BWColors[] = {0, 0xFFFFFF};
/*
* Create an XLATEOBJ that will be used for drawing masks.
* FIXME: We should get this in pxlo parameter!
*/
BWPalette = EngCreatePalette(PAL_INDEXED, sizeof(BWColors) / sizeof(ULONG),
BWColors, 0, 0, 0);
if (pxlo == NULL)
{
HPALETTE BWPalette, DestPalette;
ULONG BWColors[] = {0, 0xFFFFFF};
DestPalette = ppdev->DevInfo.hpalDefault;
pgp->XlateObject = IntEngCreateXlate(0, PAL_INDEXED,
DestPalette, BWPalette);
EngDeletePalette(BWPalette);
}
else
{
pgp->XlateObject = pxlo;
}
BWPalette = EngCreatePalette(PAL_INDEXED, sizeof(BWColors) / sizeof(ULONG),
BWColors, 0, 0, 0);
/* Create surface for saving the pixels under the cursor. */
{
LONG lDelta;
DestPalette = ppdev->DevInfo.hpalDefault;
pgp->XlateObject = IntEngCreateXlate(0, PAL_INDEXED,
DestPalette, BWPalette);
EngDeletePalette(BWPalette);
}
else
{
pgp->XlateObject = pxlo;
}
switch (pso->iBitmapFormat)
{
case BMF_1BPP:
lDelta = pgp->Size.cx >> 3;
break;
case BMF_4BPP:
lDelta = pgp->Size.cx >> 1;
break;
case BMF_8BPP:
lDelta = pgp->Size.cx;
break;
case BMF_16BPP:
lDelta = pgp->Size.cx << 1;
break;
case BMF_24BPP:
lDelta = pgp->Size.cx * 3;
break;
case BMF_32BPP:
lDelta = pgp->Size.cx << 2;
break;
default:
lDelta = 0;
break;
}
/*
* Create surface for saving the pixels under the cursor.
*/
pgp->SaveSurface = (HSURF)EngCreateBitmap(pgp->Size,
lDelta,
pso->iBitmapFormat,
BMF_TOPDOWN | BMF_NOZEROINIT, NULL);
}
{
LONG lDelta;
if (x != -1)
{
IntShowMousePointer(ppdev, pso);
switch (pso->iBitmapFormat)
{
case BMF_1BPP:
lDelta = pgp->Size.cx >> 3;
break;
case BMF_4BPP:
lDelta = pgp->Size.cx >> 1;
break;
case BMF_8BPP:
lDelta = pgp->Size.cx;
break;
case BMF_16BPP:
lDelta = pgp->Size.cx << 1;
break;
case BMF_24BPP:
lDelta = pgp->Size.cx * 3;
break;
case BMF_32BPP:
lDelta = pgp->Size.cx << 2;
break;
default:
lDelta = 0;
break;
}
if (prcl != NULL)
{
prcl->left = x - pgp->HotSpot.x;
prcl->top = y - pgp->HotSpot.x;
prcl->right = prcl->left + pgp->Size.cx;
prcl->bottom = prcl->top + pgp->Size.cy;
}
} else if (prcl != NULL)
prcl->left = prcl->top = prcl->right = prcl->bottom = -1;
pgp->SaveSurface = (HSURF)EngCreateBitmap(
pgp->Size, lDelta, pso->iBitmapFormat, BMF_TOPDOWN | BMF_NOZEROINIT, NULL);
}
if(x != -1)
{
IntShowMousePointer(ppdev, pso);
if (prcl != NULL)
{
prcl->left = x - pgp->HotSpot.x;
prcl->top = y - pgp->HotSpot.x;
prcl->right = prcl->left + pgp->Size.cx;
prcl->bottom = prcl->top + pgp->Size.cy;
}
} else if (prcl != NULL)
prcl->left = prcl->top = prcl->right = prcl->bottom = -1;
return SPS_ACCEPT_EXCLUDE;
return SPS_ACCEPT_EXCLUDE;
}
/*
@ -531,61 +498,61 @@ EngSetPointerShape(
VOID APIENTRY
EngMovePointer(
IN SURFOBJ *pso,
IN LONG x,
IN LONG y,
IN RECTL *prcl)
IN SURFOBJ *pso,
IN LONG x,
IN LONG y,
IN RECTL *prcl)
{
PDEVOBJ *ppdev;
GDIPOINTER *pgp;
PDEVOBJ *ppdev;
GDIPOINTER *pgp;
ASSERT(pso);
ASSERT(pso);
ppdev = GDIDEV(pso);
ppdev = GDIDEV(pso);
ASSERT(ppdev);
ASSERT(ppdev);
pgp = &ppdev->Pointer;
pgp = &ppdev->Pointer;
IntHideMousePointer(ppdev, pso);
if (x != -1)
{
/* Actually this should be set by 'the other side', but it would be
* done right after this. It helps IntShowMousePointer. */
gpsi->ptCursor.x = x;
gpsi->ptCursor.y = y;
IntShowMousePointer(ppdev, pso);
if (prcl != NULL)
{
prcl->left = x - pgp->HotSpot.x;
prcl->top = y - pgp->HotSpot.x;
prcl->right = prcl->left + pgp->Size.cx;
prcl->bottom = prcl->top + pgp->Size.cy;
}
} else if (prcl != NULL)
prcl->left = prcl->top = prcl->right = prcl->bottom = -1;
IntHideMousePointer(ppdev, pso);
if (x != -1)
{
/* Actually this should be set by 'the other side', but it would be
* done right after this. It helps IntShowMousePointer. */
gpsi->ptCursor.x = x;
gpsi->ptCursor.y = y;
IntShowMousePointer(ppdev, pso);
if (prcl != NULL)
{
prcl->left = x - pgp->HotSpot.x;
prcl->top = y - pgp->HotSpot.x;
prcl->right = prcl->left + pgp->Size.cx;
prcl->bottom = prcl->top + pgp->Size.cy;
}
} else if (prcl != NULL)
prcl->left = prcl->top = prcl->right = prcl->bottom = -1;
}
VOID APIENTRY
IntEngMovePointer(
IN SURFOBJ *pso,
IN LONG x,
IN LONG y,
IN RECTL *prcl)
IN SURFOBJ *pso,
IN LONG x,
IN LONG y,
IN RECTL *prcl)
{
SURFACE *psurf = CONTAINING_RECORD(pso, SURFACE, SurfObj);
SURFACE *psurf = CONTAINING_RECORD(pso, SURFACE, SurfObj);
SURFACE_LockBitmapBits(psurf);
if (GDIDEV(pso)->Pointer.MovePointer)
SURFACE_LockBitmapBits(psurf);
if (GDIDEV(pso)->Pointer.MovePointer)
{
GDIDEV(pso)->Pointer.MovePointer(pso, x, y, prcl);
GDIDEV(pso)->Pointer.MovePointer(pso, x, y, prcl);
}
else
else
{
EngMovePointer(pso, x, y, prcl);
EngMovePointer(pso, x, y, prcl);
}
SURFACE_UnlockBitmapBits(psurf);
SURFACE_UnlockBitmapBits(psurf);
}
/* EOF */