[ros-diffs] [greatlrd] 30049: rename framebuf_acc to framebufacc to make rbuild happy implement hw support for DrvMovePointer, it mean if a driver have this function implement our framebufacc will use it

greatlrd at svn.reactos.org greatlrd at svn.reactos.org
Thu Nov 1 21:32:39 CET 2007


Author: greatlrd
Date: Thu Nov  1 23:32:39 2007
New Revision: 30049

URL: http://svn.reactos.org/svn/reactos?rev=30049&view=rev
Log:
rename framebuf_acc to framebufacc to make rbuild happy
implement hw support for DrvMovePointer, it mean if a driver have this function implement our framebufacc will use it 

Added:
    trunk/reactos/drivers/video/displays/framebufacc/
      - copied from r30044, trunk/reactos/drivers/video/displays/framebuf_acc/
Removed:
    trunk/reactos/drivers/video/displays/framebuf_acc/
Modified:
    trunk/reactos/drivers/video/displays/directory.rbuild
    trunk/reactos/drivers/video/displays/framebufacc/framebuf_acc.h
    trunk/reactos/drivers/video/displays/framebufacc/pointer.c
    trunk/reactos/drivers/video/displays/framebufacc/surface.c

Modified: trunk/reactos/drivers/video/displays/directory.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/video/displays/directory.rbuild?rev=30049&r1=30048&r2=30049&view=diff
==============================================================================
--- trunk/reactos/drivers/video/displays/directory.rbuild (original)
+++ trunk/reactos/drivers/video/displays/directory.rbuild Thu Nov  1 23:32:39 2007
@@ -4,6 +4,9 @@
 	<directory name="framebuf">
 		<xi:include href="framebuf/framebuf.rbuild" />
 	</directory>
+	<directory name="framebufacc">
+		<xi:include href="framebufacc/framebuf_acc.rbuild" />
+	</directory>
 	<directory name="vga">
 		<xi:include href="vga/vgaddi.rbuild" />
 	</directory>

Modified: trunk/reactos/drivers/video/displays/framebufacc/framebuf_acc.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/video/displays/framebufacc/framebuf_acc.h?rev=30049&r1=30044&r2=30049&view=diff
==============================================================================
--- trunk/reactos/drivers/video/displays/framebufacc/framebuf_acc.h (original)
+++ trunk/reactos/drivers/video/displays/framebufacc/framebuf_acc.h Thu Nov  1 23:32:39 2007
@@ -51,6 +51,9 @@
    ULONG BlueMask;
    BYTE PaletteShift;
    PVOID ScreenPtr;
+
+   /* Vitual desktop stuff */
+   POINTL ScreenOffsetXY;
 
    /* Palette data */
    HPALETTE DefaultPalette;

Modified: trunk/reactos/drivers/video/displays/framebufacc/pointer.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/video/displays/framebufacc/pointer.c?rev=30049&r1=30044&r2=30049&view=diff
==============================================================================
--- trunk/reactos/drivers/video/displays/framebufacc/pointer.c (original)
+++ trunk/reactos/drivers/video/displays/framebufacc/pointer.c Thu Nov  1 23:32:39 2007
@@ -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
@@ -20,6 +20,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);
+        }
+    }
+}
 
 
 /*
@@ -48,24 +95,6 @@
    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);
-}
 
 
+

Modified: trunk/reactos/drivers/video/displays/framebufacc/surface.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/video/displays/framebufacc/surface.c?rev=30049&r1=30044&r2=30049&view=diff
==============================================================================
--- trunk/reactos/drivers/video/displays/framebufacc/surface.c (original)
+++ trunk/reactos/drivers/video/displays/framebufacc/surface.c Thu Nov  1 23:32:39 2007
@@ -154,6 +154,9 @@
    {
        return FALSE;
    }
+
+   /* Rest the desktop vitual position */
+   ppdev->ScreenOffsetXY = {0,0};
 
 
    switch (ppdev->BitsPerPixel)




More information about the Ros-diffs mailing list