mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
fixed problems with mouse cursor handling
svn path=/trunk/; revision=12051
This commit is contained in:
parent
e3bd28c5ae
commit
0ced40be8e
8 changed files with 131 additions and 149 deletions
|
@ -1,9 +1,9 @@
|
|||
/*
|
||||
* entry.c
|
||||
*
|
||||
* $Revision: 1.4 $
|
||||
* $Author: chorns $
|
||||
* $Date: 2004/11/27 00:46:24 $
|
||||
* $Revision: 1.5 $
|
||||
* $Author: weiden $
|
||||
* $Date: 2004/12/12 17:56:51 $
|
||||
*
|
||||
*/
|
||||
|
||||
|
@ -258,12 +258,6 @@ DrvEnablePDEV(IN DEVMODEW *DM,
|
|||
}
|
||||
PDev->KMDriver = Driver;
|
||||
DPRINT( "PDev: %x, Driver: %x\n", PDev, PDev->KMDriver );
|
||||
PDev->xyCursor.x = 320;
|
||||
PDev->xyCursor.y = 240;
|
||||
PDev->ptlExtent.x = 0;
|
||||
PDev->ptlExtent.y = 0;
|
||||
PDev->cExtent = 0;
|
||||
PDev->flCursor = CURSOR_DOWN;
|
||||
|
||||
gaulCap.ulHorzRes = 640;
|
||||
gaulCap.ulVertRes = 480;
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: pointer.c,v 1.3 2004/07/03 13:45:42 navaraf Exp $
|
||||
/* $Id: pointer.c,v 1.4 2004/12/12 17:56:52 weiden Exp $
|
||||
*
|
||||
* PROJECT: ReactOS VGA16 display driver
|
||||
* FILE: drivers/dd/vga/display/objects/pointer.c
|
||||
|
@ -33,8 +33,6 @@
|
|||
|
||||
/* GLOBALS *******************************************************************/
|
||||
|
||||
static LONG oldx, oldy;
|
||||
static PSAVED_SCREEN_BITS ImageBehindCursor = NULL;
|
||||
static VOID VGADDI_HideCursor(PPDEV ppdev);
|
||||
static VOID VGADDI_ShowCursor(PPDEV ppdev, PRECTL prcl);
|
||||
|
||||
|
@ -166,6 +164,9 @@ BOOL InitPointer(PPDEV ppdev)
|
|||
ULONG CursorWidth = 32, CursorHeight = 32;
|
||||
ULONG PointerAttributesSize;
|
||||
ULONG SavedMemSize;
|
||||
|
||||
ppdev->xyHotSpot.x = 0;
|
||||
ppdev->xyHotSpot.y = 0;
|
||||
|
||||
/* Determine the size of the pointer attributes */
|
||||
PointerAttributesSize = sizeof(VIDEO_POINTER_ATTRIBUTES) +
|
||||
|
@ -184,7 +185,7 @@ BOOL InitPointer(PPDEV ppdev)
|
|||
|
||||
/* Allocate memory for the pixels behind the cursor */
|
||||
SavedMemSize = ((((CursorWidth + 7) & ~0x7) + 16) * CursorHeight) >> 3;
|
||||
ImageBehindCursor = VGADDI_AllocSavedScreenBits(SavedMemSize);
|
||||
ppdev->ImageBehindCursor = VGADDI_AllocSavedScreenBits(SavedMemSize);
|
||||
|
||||
return(TRUE);
|
||||
}
|
||||
|
@ -197,20 +198,15 @@ DrvMovePointer(IN SURFOBJ* pso,
|
|||
{
|
||||
PPDEV ppdev = (PPDEV)pso->dhpdev;
|
||||
|
||||
if (x < 0 && 0 == (ppdev->flCursor & CURSOR_DOWN))
|
||||
{
|
||||
/* x < 0 and y < 0 indicates we must hide the cursor */
|
||||
VGADDI_HideCursor(ppdev);
|
||||
return;
|
||||
}
|
||||
VGADDI_HideCursor(ppdev);
|
||||
|
||||
ppdev->xyCursor.x = x;
|
||||
ppdev->xyCursor.y = y;
|
||||
if(x != -1)
|
||||
{
|
||||
ppdev->pPointerAttributes->Column = x;
|
||||
ppdev->pPointerAttributes->Row = y;
|
||||
|
||||
if (0 == (ppdev->flCursor & CURSOR_DOWN))
|
||||
{
|
||||
VGADDI_ShowCursor(ppdev, prcl);
|
||||
}
|
||||
VGADDI_ShowCursor(ppdev, prcl);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -230,20 +226,14 @@ DrvSetPointerShape(SURFOBJ* pso,
|
|||
ULONG NewWidth, NewHeight;
|
||||
PUCHAR Src, Dest;
|
||||
ULONG i;
|
||||
|
||||
/* Hide the cursor */
|
||||
if (ppdev->pPointerAttributes->Enable != 0
|
||||
&& 0 == (ppdev->flCursor & CURSOR_DOWN))
|
||||
{
|
||||
VGADDI_HideCursor(ppdev);
|
||||
}
|
||||
|
||||
|
||||
if (! psoMask)
|
||||
{
|
||||
ppdev->flCursor = CURSOR_DOWN;
|
||||
return SPS_ACCEPT_EXCLUDE;
|
||||
return SPS_DECLINE;
|
||||
}
|
||||
ppdev->flCursor = ppdev->flCursor & (~ CURSOR_DOWN);
|
||||
|
||||
/* Hide the cursor */
|
||||
VGADDI_HideCursor(ppdev);
|
||||
|
||||
NewWidth = abs(psoMask->lDelta) << 3;
|
||||
NewHeight = (psoMask->cjBits / abs(psoMask->lDelta)) / 2;
|
||||
|
@ -270,9 +260,9 @@ DrvSetPointerShape(SURFOBJ* pso,
|
|||
ppdev->pPointerAttributes = NewPointerAttributes;
|
||||
|
||||
/* Reallocate the space for the saved bits. */
|
||||
VGADDI_FreeSavedScreenBits(ImageBehindCursor);
|
||||
VGADDI_FreeSavedScreenBits(ppdev->ImageBehindCursor);
|
||||
SavedMemSize = ((((NewWidth + 7) & ~0x7) + 16) * NewHeight) >> 3;
|
||||
ImageBehindCursor = VGADDI_AllocSavedScreenBits(SavedMemSize);
|
||||
ppdev->ImageBehindCursor = VGADDI_AllocSavedScreenBits(SavedMemSize);
|
||||
}
|
||||
|
||||
Src = (PUCHAR)psoMask->pvScan0;
|
||||
|
@ -293,13 +283,17 @@ DrvSetPointerShape(SURFOBJ* pso,
|
|||
}
|
||||
|
||||
/* Set the new cursor position */
|
||||
ppdev->xyCursor.x = x;
|
||||
ppdev->xyCursor.y = y;
|
||||
ppdev->xyHotSpot.x = xHot;
|
||||
ppdev->xyHotSpot.y = yHot;
|
||||
|
||||
/* Show the cursor */
|
||||
VGADDI_ShowCursor(ppdev, prcl);
|
||||
if(x != -1)
|
||||
{
|
||||
ppdev->pPointerAttributes->Column = x;
|
||||
ppdev->pPointerAttributes->Row = y;
|
||||
|
||||
/* show the cursor */
|
||||
VGADDI_ShowCursor(ppdev, prcl);
|
||||
}
|
||||
|
||||
return SPS_ACCEPT_EXCLUDE;
|
||||
}
|
||||
|
@ -322,18 +316,25 @@ VGADDI_ComputePointerRect(PPDEV ppdev, LONG X, LONG Y, PRECTL Rect)
|
|||
static VOID
|
||||
VGADDI_HideCursor(PPDEV ppdev)
|
||||
{
|
||||
RECTL Rect;
|
||||
if(ppdev->pPointerAttributes->Enable)
|
||||
{
|
||||
LONG cx, cy;
|
||||
RECTL Rect;
|
||||
|
||||
ppdev->pPointerAttributes->Enable = 0;
|
||||
|
||||
cx = ppdev->pPointerAttributes->Column - ppdev->xyHotSpot.x;
|
||||
cy = ppdev->pPointerAttributes->Row - ppdev->xyHotSpot.y;
|
||||
|
||||
VGADDI_ComputePointerRect(ppdev, cx, cy, &Rect);
|
||||
|
||||
VGADDI_ComputePointerRect(ppdev, oldx, oldy, &Rect);
|
||||
|
||||
/* Display what was behind cursor */
|
||||
VGADDI_BltFromSavedScreenBits(Rect.left,
|
||||
Rect.top,
|
||||
ImageBehindCursor,
|
||||
Rect.right - Rect.left,
|
||||
Rect.bottom - Rect.top);
|
||||
|
||||
ppdev->pPointerAttributes->Enable = 0;
|
||||
/* Display what was behind cursor */
|
||||
VGADDI_BltFromSavedScreenBits(Rect.left,
|
||||
Rect.top,
|
||||
ppdev->ImageBehindCursor,
|
||||
Rect.right - Rect.left,
|
||||
Rect.bottom - Rect.top);
|
||||
}
|
||||
}
|
||||
|
||||
static VOID
|
||||
|
@ -343,19 +344,21 @@ VGADDI_ShowCursor(PPDEV ppdev, PRECTL prcl)
|
|||
PUCHAR AndMask, XorMask;
|
||||
ULONG SizeX, SizeY;
|
||||
RECTL Rect;
|
||||
|
||||
if(ppdev->pPointerAttributes->Enable)
|
||||
{
|
||||
return;
|
||||
}
|
||||
/* Mark the cursor as currently displayed. */
|
||||
ppdev->pPointerAttributes->Enable = 1;
|
||||
|
||||
if (ppdev->pPointerAttributes->Enable != 0)
|
||||
{
|
||||
VGADDI_HideCursor(ppdev);
|
||||
}
|
||||
|
||||
cx = ppdev->xyCursor.x - ppdev->xyHotSpot.x;
|
||||
cy = ppdev->xyCursor.y - ppdev->xyHotSpot.y;
|
||||
cx = ppdev->pPointerAttributes->Column - ppdev->xyHotSpot.x;
|
||||
cy = ppdev->pPointerAttributes->Row - ppdev->xyHotSpot.y;
|
||||
|
||||
/* Capture pixels behind the cursor */
|
||||
VGADDI_ComputePointerRect(ppdev, cx, cy, &Rect);
|
||||
|
||||
VGADDI_BltToSavedScreenBits(ImageBehindCursor,
|
||||
VGADDI_BltToSavedScreenBits(ppdev->ImageBehindCursor,
|
||||
Rect.left,
|
||||
Rect.top,
|
||||
Rect.right - Rect.left,
|
||||
|
@ -384,13 +387,6 @@ VGADDI_ShowCursor(PPDEV ppdev, PRECTL prcl)
|
|||
ppdev->pPointerAttributes->WidthInBytes,
|
||||
VGA_XOR);
|
||||
|
||||
/* Save the new cursor location. */
|
||||
oldx = cx;
|
||||
oldy = cy;
|
||||
|
||||
/* Mark the cursor as currently displayed. */
|
||||
ppdev->pPointerAttributes->Enable = 1;
|
||||
|
||||
if (NULL != prcl)
|
||||
{
|
||||
*prcl = Rect;
|
||||
|
|
|
@ -25,8 +25,15 @@ typedef struct _XYPAIR
|
|||
USHORT y;
|
||||
} XYPAIR;
|
||||
|
||||
typedef struct _SAVED_SCREEN_BITS
|
||||
{
|
||||
BOOL Free;
|
||||
DWORD Offset;
|
||||
ULONG Size;
|
||||
LIST_ENTRY ListEntry;
|
||||
} SAVED_SCREEN_BITS, *PSAVED_SCREEN_BITS;
|
||||
|
||||
// Cursor states
|
||||
#define CURSOR_DOWN 0x00000001
|
||||
#define CURSOR_COLOR 0x00000004
|
||||
#define CURSOR_HW 0x00000010
|
||||
#define CURSOR_HW_ACTIVE 0x00000020
|
||||
|
@ -43,14 +50,11 @@ typedef struct _PDEV
|
|||
PVOID AssociatedSurf; // associated surface
|
||||
|
||||
// Cursor
|
||||
XYPAIR xyCursor; // cursor position
|
||||
XYPAIR xyHotSpot; // cursor hotspot
|
||||
POINTL ptlExtent; // cursor extent
|
||||
ULONG cExtent; // effective cursor extent
|
||||
ULONG flCursor; // cursor status
|
||||
|
||||
// Pointer
|
||||
PVIDEO_POINTER_ATTRIBUTES pPointerAttributes; // HW Pointer Attributes
|
||||
PSAVED_SCREEN_BITS ImageBehindCursor;
|
||||
ULONG XorMaskStartOffset; // Start offset of hardware pointer
|
||||
// XOR mask relative to AND mask for
|
||||
// passing to HW pointer
|
||||
|
@ -92,32 +96,6 @@ typedef enum {
|
|||
//typedef VOID (*PFN_BankControl)(PDEVSURF, ULONG, BANK_JUST);
|
||||
typedef VOID (*PFN_BankControl)(PVOID, ULONG, BANK_JUST);
|
||||
|
||||
#if 0
|
||||
// descriptor for a saved screen bits block
|
||||
|
||||
typedef struct _SAVED_SCREEN_BITS
|
||||
{
|
||||
BOOL bFlags;
|
||||
PBYTE pjBuffer; // pointer to save buffer start
|
||||
ULONG ulSize; // size of save buffer (per plane; display memory only)
|
||||
ULONG ulSaveWidthInBytes; // # of bytes across save area (including
|
||||
// partial edge bytes, if any)
|
||||
ULONG ulDelta; // # of bytes from end of one saved scan's saved bits to
|
||||
// start of next (system memory only)
|
||||
PVOID pvNextSSB; // pointer to next saved screen bits block
|
||||
// for system memory blocks, saved bits start immediately
|
||||
// after this structure
|
||||
} SAVED_SCREEN_BITS, *PSAVED_SCREEN_BITS;
|
||||
#else
|
||||
typedef struct _SAVED_SCREEN_BITS
|
||||
{
|
||||
BOOL Free;
|
||||
DWORD Offset;
|
||||
ULONG Size;
|
||||
LIST_ENTRY ListEntry;
|
||||
} SAVED_SCREEN_BITS, *PSAVED_SCREEN_BITS;
|
||||
#endif
|
||||
|
||||
// DEVSURF -- definition of a surface as seen and used by the various VGA
|
||||
// drivers
|
||||
|
||||
|
|
|
@ -108,22 +108,22 @@ typedef struct _DC
|
|||
WIN_DC_INFO w;
|
||||
} DC, *PDC;
|
||||
|
||||
typedef struct _GDIPOINTER
|
||||
typedef struct _GDIPOINTER /* should stay private to ENG */
|
||||
{
|
||||
/* private GDI pointer handling information, required for software emulation */
|
||||
BOOL Enabled;
|
||||
POINTL Pos;
|
||||
SIZEL Size;
|
||||
POINTL HotSpot;
|
||||
|
||||
PGD_MOVEPOINTER MovePointer;
|
||||
|
||||
XLATEOBJ *XlateObject;
|
||||
HSURF ColorSurface;
|
||||
HSURF MaskSurface;
|
||||
HSURF SaveSurface;
|
||||
|
||||
|
||||
/* public pointer information */
|
||||
RECTL Exclude; /* required publicly for SPS_ACCEPT_EXCLUDE */
|
||||
PGD_MOVEPOINTER MovePointer;
|
||||
ULONG Status;
|
||||
|
||||
BOOL SafetySwitch;
|
||||
UINT SafetyRemoveCount;
|
||||
} GDIPOINTER, *PGDIPOINTER;
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: mouse.c,v 1.78 2004/12/12 01:40:36 weiden Exp $
|
||||
/* $Id: mouse.c,v 1.79 2004/12/12 17:56:52 weiden Exp $
|
||||
*
|
||||
* PROJECT: ReactOS kernel
|
||||
* PURPOSE: Mouse
|
||||
|
@ -41,7 +41,6 @@ MouseSafetyOnDrawStart(SURFOBJ *SurfObj, LONG HazardX1,
|
|||
LONG tmp;
|
||||
GDIDEVICE *ppdev;
|
||||
GDIPOINTER *pgp;
|
||||
POINTL pt;
|
||||
|
||||
ASSERT(SurfObj != NULL);
|
||||
|
||||
|
@ -54,7 +53,8 @@ MouseSafetyOnDrawStart(SURFOBJ *SurfObj, LONG HazardX1,
|
|||
|
||||
pgp = &ppdev->Pointer;
|
||||
|
||||
if (SPS_ACCEPT_NOEXCLUDE == pgp->Status)
|
||||
if (SPS_ACCEPT_NOEXCLUDE == pgp->Status ||
|
||||
pgp->Exclude.right == -1)
|
||||
{
|
||||
return(FALSE);
|
||||
}
|
||||
|
@ -68,13 +68,10 @@ MouseSafetyOnDrawStart(SURFOBJ *SurfObj, LONG HazardX1,
|
|||
tmp = HazardY2; HazardY2 = HazardY1; HazardY1 = tmp;
|
||||
}
|
||||
|
||||
pt.x = pgp->Pos.x - pgp->HotSpot.x;
|
||||
pt.y = pgp->Pos.y - pgp->HotSpot.y;
|
||||
|
||||
if (pt.x + pgp->Size.cx >= HazardX1
|
||||
&& pt.x <= HazardX2
|
||||
&& pt.y + pgp->Size.cy >= HazardY1
|
||||
&& pt.y <= HazardY2)
|
||||
if (pgp->Exclude.right >= HazardX1
|
||||
&& pgp->Exclude.left <= HazardX2
|
||||
&& pgp->Exclude.bottom >= HazardY1
|
||||
&& pgp->Exclude.top <= HazardY2)
|
||||
{
|
||||
if (0 != pgp->SafetyRemoveCount++)
|
||||
{
|
||||
|
@ -110,7 +107,8 @@ MouseSafetyOnDrawEnd(SURFOBJ *SurfObj)
|
|||
|
||||
pgp = &ppdev->Pointer;
|
||||
|
||||
if(SPS_ACCEPT_NOEXCLUDE == pgp->Status)
|
||||
if(SPS_ACCEPT_NOEXCLUDE == pgp->Status ||
|
||||
pgp->Exclude.right == -1)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -122,10 +120,16 @@ MouseSafetyOnDrawEnd(SURFOBJ *SurfObj)
|
|||
/* Someone else removed it too, let them restore it */
|
||||
return FALSE;
|
||||
}
|
||||
/* FIXME - this is wrong!!!!!! we must NOT access pgp->Pos from here, it's
|
||||
a private field for ENG/driver. This will paint the cursor to the
|
||||
wrong screen coordinates when a driver overrides DrvMovePointer()!
|
||||
We should store the coordinates before calling Drv/EngMovePointer()
|
||||
and Drv/EngSetPointerShape() separately in the GDIDEVICE structure
|
||||
or somewhere where ntuser can access it! */
|
||||
if (pgp->MovePointer)
|
||||
pgp->MovePointer(SurfObj, pgp->Pos.x, pgp->Pos.y, NULL);
|
||||
pgp->MovePointer(SurfObj, pgp->Pos.x, pgp->Pos.y, &pgp->Exclude);
|
||||
else
|
||||
EngMovePointer(SurfObj, pgp->Pos.x, pgp->Pos.y, NULL);
|
||||
EngMovePointer(SurfObj, pgp->Pos.x, pgp->Pos.y, &pgp->Exclude);
|
||||
pgp->SafetySwitch = FALSE;
|
||||
}
|
||||
|
||||
|
@ -152,11 +156,6 @@ IntHideMousePointer(GDIDEVICE *ppdev, SURFOBJ *DestSurface)
|
|||
|
||||
pgp->Enabled = FALSE;
|
||||
|
||||
if(pgp->Pos.x == -1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
pt.x = pgp->Pos.x - pgp->HotSpot.x;
|
||||
pt.y = pgp->Pos.y - pgp->HotSpot.y;
|
||||
|
||||
|
@ -368,20 +367,15 @@ EngSetPointerShape(
|
|||
pgp->HotSpot.x = xHot;
|
||||
pgp->HotSpot.y = yHot;
|
||||
|
||||
pgp->Pos.x = x;
|
||||
pgp->Pos.y = y;
|
||||
if (x != -1)
|
||||
{
|
||||
pgp->Pos.x = x;
|
||||
pgp->Pos.y = y;
|
||||
}
|
||||
|
||||
pgp->Size.cx = abs(psoMask->lDelta) << 3;
|
||||
pgp->Size.cy = (psoMask->cjBits / abs(psoMask->lDelta)) >> 1;
|
||||
|
||||
if (prcl != NULL)
|
||||
{
|
||||
/* FIXME - right rectangle when x == -1? */
|
||||
prcl->left = pgp->Pos.x - pgp->HotSpot.x;
|
||||
prcl->top = pgp->Pos.y - pgp->HotSpot.x;
|
||||
prcl->right = prcl->left + pgp->Size.cx;
|
||||
prcl->bottom = prcl->top + pgp->Size.cy;
|
||||
}
|
||||
|
||||
if (psoColor != NULL)
|
||||
{
|
||||
PBYTE Bits;
|
||||
|
@ -474,7 +468,17 @@ EngSetPointerShape(
|
|||
if(x != -1)
|
||||
{
|
||||
IntShowMousePointer(ppdev, pso);
|
||||
|
||||
if (prcl != NULL)
|
||||
{
|
||||
prcl->left = pgp->Pos.x - pgp->HotSpot.x;
|
||||
prcl->top = pgp->Pos.y - pgp->HotSpot.x;
|
||||
prcl->right = prcl->left + pgp->Size.cx;
|
||||
prcl->bottom = prcl->top + pgp->Size.cy;
|
||||
}
|
||||
}
|
||||
|
||||
/* FIXME - touch prcl when x == -1? */
|
||||
|
||||
return SPS_ACCEPT_EXCLUDE;
|
||||
}
|
||||
|
@ -501,23 +505,22 @@ EngMovePointer(
|
|||
|
||||
pgp = &ppdev->Pointer;
|
||||
|
||||
|
||||
IntHideMousePointer(ppdev, pso);
|
||||
if (x != -1)
|
||||
{
|
||||
pgp->Pos.x = x;
|
||||
pgp->Pos.y = y;
|
||||
IntShowMousePointer(ppdev, pso);
|
||||
if (prcl != NULL)
|
||||
{
|
||||
prcl->left = pgp->Pos.x - pgp->HotSpot.x;
|
||||
prcl->top = pgp->Pos.y - pgp->HotSpot.x;
|
||||
prcl->right = prcl->left + pgp->Size.cx;
|
||||
prcl->bottom = prcl->top + pgp->Size.cy;
|
||||
}
|
||||
}
|
||||
|
||||
if (prcl != NULL)
|
||||
{
|
||||
/* FIXME - right rectangle when x == -1? */
|
||||
prcl->left = pgp->Pos.x - pgp->HotSpot.x;
|
||||
prcl->top = pgp->Pos.y - pgp->HotSpot.x;
|
||||
prcl->right = prcl->left + pgp->Size.cx;
|
||||
prcl->bottom = prcl->top + pgp->Size.cy;
|
||||
}
|
||||
|
||||
/* FIXME - touch prcl when x == -1? */
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: cursoricon.c,v 1.1 2004/12/12 01:40:38 weiden Exp $ */
|
||||
/* $Id: cursoricon.c,v 1.2 2004/12/12 17:56:52 weiden Exp $ */
|
||||
#include <w32k.h>
|
||||
|
||||
PCURICON_OBJECT FASTCALL
|
||||
|
@ -92,6 +92,9 @@ IntSetCursor(PWINSTATION_OBJECT WinStaObject, PCURICON_OBJECT NewCursor,
|
|||
/* Remove the cursor if it was displayed */
|
||||
if (GDIDEV(SurfObj)->Pointer.MovePointer)
|
||||
GDIDEV(SurfObj)->Pointer.MovePointer(SurfObj, -1, -1, NULL);
|
||||
else
|
||||
EngMovePointer(SurfObj, -1, -1, NULL);
|
||||
GDIDEV(SurfObj)->Pointer.Exclude.right = -1;
|
||||
}
|
||||
|
||||
GDIDEV(SurfObj)->Pointer.Status = SPS_ACCEPT_NOEXCLUDE;
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: input.c,v 1.39 2004/12/12 01:40:37 weiden Exp $
|
||||
/* $Id: input.c,v 1.40 2004/12/12 17:56:52 weiden Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -650,8 +650,13 @@ IntMouseInput(MOUSEINPUT *mi)
|
|||
|
||||
if (GDIDEV(SurfObj)->Pointer.MovePointer)
|
||||
{
|
||||
GDIDEV(SurfObj)->Pointer.MovePointer(SurfObj, MousePos.x, MousePos.y, NULL);
|
||||
GDIDEV(SurfObj)->Pointer.MovePointer(SurfObj, MousePos.x, MousePos.y, &(GDIDEV(SurfObj)->Pointer.Exclude));
|
||||
}
|
||||
/* FIXME - That's a bad thing! We should't access private gdi pointer fields
|
||||
from here. However it is required so MouseSafetyOnDrawEnd() can
|
||||
properly paint the mouse cursor to the screen again. See the
|
||||
comment in MouseSafetyOnDrawEnd() to fix this problem! */
|
||||
GDIDEV(SurfObj)->Pointer.Pos = MousePos;
|
||||
|
||||
BITMAPOBJ_UnlockBitmap(hBitmap);
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: dc.c,v 1.149 2004/12/12 01:40:38 weiden Exp $
|
||||
/* $Id: dc.c,v 1.150 2004/12/12 17:56:52 weiden Exp $
|
||||
*
|
||||
* DC.C - Device context functions
|
||||
*
|
||||
|
@ -622,6 +622,8 @@ IntCreatePrimarySurface()
|
|||
DPRINT("Adjusting GDIInfo.ulLogPixelsY\n");
|
||||
PrimarySurface.GDIInfo.ulLogPixelsY = 96;
|
||||
}
|
||||
|
||||
PrimarySurface.Pointer.Exclude.right = -1;
|
||||
|
||||
DPRINT("calling completePDev\n");
|
||||
|
||||
|
@ -659,7 +661,8 @@ IntCreatePrimarySurface()
|
|||
SurfaceRect.left = SurfaceRect.top = 0;
|
||||
SurfaceRect.right = SurfObj->sizlBitmap.cx;
|
||||
SurfaceRect.bottom = SurfObj->sizlBitmap.cy;
|
||||
EngEraseSurface(SurfObj, &SurfaceRect, 0);
|
||||
/* FIXME - why does EngEraseSurface() sometimes crash?
|
||||
EngEraseSurface(SurfObj, &SurfaceRect, 0); */
|
||||
EngUnlockSurface(SurfObj);
|
||||
IntShowDesktop(IntGetActiveDesktop(), SurfSize.cx, SurfSize.cy);
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue