diff --git a/reactos/drivers/video/displays/directory.rbuild b/reactos/drivers/video/displays/directory.rbuild index eb650854819..a3779382b32 100644 --- a/reactos/drivers/video/displays/directory.rbuild +++ b/reactos/drivers/video/displays/directory.rbuild @@ -4,6 +4,9 @@ + + + diff --git a/reactos/drivers/video/displays/framebuf_acc/dd.c b/reactos/drivers/video/displays/framebufacc/dd.c similarity index 100% rename from reactos/drivers/video/displays/framebuf_acc/dd.c rename to reactos/drivers/video/displays/framebufacc/dd.c diff --git a/reactos/drivers/video/displays/framebuf_acc/ddenable.c b/reactos/drivers/video/displays/framebufacc/ddenable.c similarity index 100% rename from reactos/drivers/video/displays/framebuf_acc/ddenable.c rename to reactos/drivers/video/displays/framebufacc/ddenable.c diff --git a/reactos/drivers/video/displays/framebuf_acc/enable.c b/reactos/drivers/video/displays/framebufacc/enable.c similarity index 100% rename from reactos/drivers/video/displays/framebuf_acc/enable.c rename to reactos/drivers/video/displays/framebufacc/enable.c diff --git a/reactos/drivers/video/displays/framebuf_acc/framebuf_acc.def b/reactos/drivers/video/displays/framebufacc/framebuf_acc.def similarity index 100% rename from reactos/drivers/video/displays/framebuf_acc/framebuf_acc.def rename to reactos/drivers/video/displays/framebufacc/framebuf_acc.def diff --git a/reactos/drivers/video/displays/framebuf_acc/framebuf_acc.h b/reactos/drivers/video/displays/framebufacc/framebuf_acc.h similarity index 98% rename from reactos/drivers/video/displays/framebuf_acc/framebuf_acc.h rename to reactos/drivers/video/displays/framebufacc/framebuf_acc.h index 901b5234a1e..1cb2accd2ff 100644 --- a/reactos/drivers/video/displays/framebuf_acc/framebuf_acc.h +++ b/reactos/drivers/video/displays/framebufacc/framebuf_acc.h @@ -52,6 +52,9 @@ typedef struct _PDEV BYTE PaletteShift; PVOID ScreenPtr; + /* Vitual desktop stuff */ + POINTL ScreenOffsetXY; + /* Palette data */ HPALETTE DefaultPalette; PALETTEENTRY *PaletteEntries; diff --git a/reactos/drivers/video/displays/framebuf_acc/framebuf_acc.rbuild b/reactos/drivers/video/displays/framebufacc/framebuf_acc.rbuild similarity index 100% rename from reactos/drivers/video/displays/framebuf_acc/framebuf_acc.rbuild rename to reactos/drivers/video/displays/framebufacc/framebuf_acc.rbuild diff --git a/reactos/drivers/video/displays/framebuf_acc/framebuf_acc.rc b/reactos/drivers/video/displays/framebufacc/framebuf_acc.rc similarity index 100% rename from reactos/drivers/video/displays/framebuf_acc/framebuf_acc.rc rename to reactos/drivers/video/displays/framebufacc/framebuf_acc.rc diff --git a/reactos/drivers/video/displays/framebuf_acc/palette.c b/reactos/drivers/video/displays/framebufacc/palette.c similarity index 100% rename from reactos/drivers/video/displays/framebuf_acc/palette.c rename to reactos/drivers/video/displays/framebufacc/palette.c diff --git a/reactos/drivers/video/displays/framebuf_acc/pointer.c b/reactos/drivers/video/displays/framebufacc/pointer.c similarity index 52% rename from reactos/drivers/video/displays/framebuf_acc/pointer.c rename to reactos/drivers/video/displays/framebufacc/pointer.c index 989da33ae9e..68e5121fde9 100644 --- a/reactos/drivers/video/displays/framebuf_acc/pointer.c +++ b/reactos/drivers/video/displays/framebufacc/pointer.c @@ -1,7 +1,7 @@ /* * ReactOS Generic Framebuffer display driver * - * Copyright (C) 2004 Filip Navara + * Copyright (C) 2007 Magnus Olsen * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -21,6 +21,53 @@ #include "framebuf_acc.h" +/* + * DrvMovePointer + * + * Moves the pointer to a new position and ensures that GDI does not interfere + * with the display of the pointer. + * + * Status + * @implemented + */ + +VOID APIENTRY +DrvMovePointer(IN SURFOBJ *pso, + IN LONG x, + IN LONG y, + IN RECTL *prcl) +{ + PPDEV ppdev = (PPDEV) pso->dhpdev; + DWORD returnedDataLength; + VIDEO_POINTER_POSITION NewPointerPosition; + + x -= ppdev->ScreenOffsetXY.x; + y -= ppdev->ScreenOffsetXY.y; + + /* position of (-1,-1) hide the pointer */ + if ((x == -1) || (y == -1)) + { + if (EngDeviceIoControl(ppdev->hDriver, IOCTL_VIDEO_DISABLE_POINTER, NULL, 0, NULL, 0, &returnedDataLength)) + { + /* hw did not disable the mouse, we try then with software */ + EngMovePointer(pso, x, y, prcl); + } + } + else + { + /* Calc the mouse positions and set it to the new positions */ + NewPointerPosition.Column = (SHORT) x - (SHORT) (ppdev->PointerHotSpot.x); + NewPointerPosition.Row = (SHORT) y - (SHORT) (ppdev->PointerHotSpot.y); + + if (EngDeviceIoControl(ppdev->hDriver, IOCTL_VIDEO_SET_POINTER_POSITION, &NewPointerPosition, + sizeof(VIDEO_POINTER_POSITION), NULL, 0, &returnedDataLength)) + { + /* hw did not disable the mouse, we try then with software */ + EngMovePointer(pso, x, y, prcl); + } + } +} + /* * DrvSetPointerShape @@ -48,24 +95,6 @@ DrvSetPointerShape( return EngSetPointerShape(pso, psoMask, psoColor, pxlo, xHot, yHot, x, y, prcl, fl); } -/* - * DrvMovePointer - * - * Moves the pointer to a new position and ensures that GDI does not interfere - * with the display of the pointer. - * - * Status - * @unimplemented - */ - -VOID APIENTRY -DrvMovePointer( - IN SURFOBJ *pso, - IN LONG x, - IN LONG y, - IN RECTL *prcl) -{ - return EngMovePointer(pso, x, y, prcl); -} + diff --git a/reactos/drivers/video/displays/framebuf_acc/screen.c b/reactos/drivers/video/displays/framebufacc/screen.c similarity index 100% rename from reactos/drivers/video/displays/framebuf_acc/screen.c rename to reactos/drivers/video/displays/framebufacc/screen.c diff --git a/reactos/drivers/video/displays/framebuf_acc/surface.c b/reactos/drivers/video/displays/framebufacc/surface.c similarity index 99% rename from reactos/drivers/video/displays/framebuf_acc/surface.c rename to reactos/drivers/video/displays/framebufacc/surface.c index 470153d36bf..0d04451c9ae 100644 --- a/reactos/drivers/video/displays/framebuf_acc/surface.c +++ b/reactos/drivers/video/displays/framebufacc/surface.c @@ -155,6 +155,9 @@ DrvEnableSurface( return FALSE; } + /* Rest the desktop vitual position */ + ppdev->ScreenOffsetXY = {0,0}; + switch (ppdev->BitsPerPixel) {