3 #include "../../drivers/input/include/mouse.h"
6 static BOOLEAN SafetySwitch
= FALSE
;
7 static BOOLEAN SafetySwitch2
= FALSE
;
8 static BOOLEAN MouseEnabled
= FALSE
;
9 static LONG mouse_x
, mouse_y
;
10 static UINT mouse_width
= 0, mouse_height
= 0;
12 INT
MouseSafetyOnDrawStart(PSURFOBJ SurfObj
, PSURFGDI SurfGDI
, LONG HazardX1
, LONG HazardY1
, LONG HazardX2
, LONG HazardY2
)
17 if(SurfObj
== NULL
) return 0;
19 if((SurfObj
->iType
!= STYPE_DEVICE
) || (MouseEnabled
== FALSE
)) return 0;
21 if(HazardX1
> HazardX2
) { tmp
= HazardX2
; HazardX2
= HazardX1
; HazardX1
= tmp
; }
22 if(HazardY1
> HazardY2
) { tmp
= HazardY2
; HazardY2
= HazardY1
; HazardY1
= tmp
; }
24 if( (mouse_x
+ mouse_width
>= HazardX1
) && (mouse_x
<= HazardX2
) &&
25 (mouse_y
+ mouse_height
>= HazardY1
) && (mouse_y
<= HazardY2
) )
27 SurfGDI
->MovePointer(SurfObj
, -1, -1, &MouseRect
);
31 // Mouse is not allowed to move if GDI is busy drawing
37 INT
MouseSafetyOnDrawEnd(PSURFOBJ SurfObj
, PSURFGDI SurfGDI
)
41 if(SurfObj
== NULL
) return 0;
43 if((SurfObj
->iType
!= STYPE_DEVICE
) || (MouseEnabled
== FALSE
)) return 0;
45 if(SafetySwitch
== TRUE
)
47 SurfGDI
->MovePointer(SurfObj
, mouse_x
, mouse_y
, &MouseRect
);
51 SafetySwitch2
= FALSE
;
56 VOID
MouseGDICallBack(PMOUSE_INPUT_DATA Data
, ULONG InputCount
)
59 LONG mouse_cx
= 0, mouse_cy
= 0;
60 HDC hDC
= W32kGetScreenDC();
66 PDEVICE_OBJECT ClassDeviceObject
= NULL
;
67 PFILE_OBJECT FileObject
= NULL
;
69 UNICODE_STRING ClassName
;
70 IO_STATUS_BLOCK ioStatus
;
79 dc
= DC_HandleToPtr(hDC
);
80 SurfObj
= (PSURFOBJ
)AccessUserObject(dc
->Surface
);
81 SurfGDI
= (PSURFGDI
)AccessInternalObject(dc
->Surface
);
83 // Compile the total mouse movement change
84 for (i
=0; i
<InputCount
; i
++)
86 mouse_cx
+= Data
[i
].LastX
;
87 mouse_cy
+= Data
[i
].LastY
;
90 if((mouse_cx
!= 0) || (mouse_cy
!= 0))
95 if(mouse_x
< 0) mouse_x
= 0;
96 if(mouse_y
< 0) mouse_y
= 0;
97 if(mouse_x
> 620) mouse_x
= 620;
98 if(mouse_y
> 460) mouse_y
= 460;
100 if((SafetySwitch
== FALSE
) && (SafetySwitch2
== FALSE
)) ;
101 SurfGDI
->MovePointer(SurfObj
, mouse_x
, mouse_y
, &MouseRect
);
105 VOID
EnableMouse(HDC hDisplayDC
)
107 PDC dc
= DC_HandleToPtr(hDisplayDC
);
108 PSURFOBJ SurfObj
= (PSURFOBJ
)AccessUserObject(dc
->Surface
);
109 PSURFGDI SurfGDI
= (PSURFGDI
)AccessInternalObject(dc
->Surface
);
120 // Draw a test mouse cursor
124 // Draw transparent colored rectangle
125 Brush
.iSolidColor
= 5;
126 for (i
= 0; i
< 17; i
++)
127 EngLineTo(SurfObj
, NULL
, &Brush
, 0, i
, 17, i
, NULL
, 0);
129 // Draw white interior
130 Brush
.iSolidColor
= 15;
131 for (i
= 1; i
< 16; i
++)
132 EngLineTo(SurfObj
, NULL
, &Brush
, 0, i
-1, 16-i
, i
-1, NULL
, 0);
134 // Draw black outline
135 Brush
.iSolidColor
= 0;
136 EngLineTo(SurfObj
, NULL
, &Brush
, 0, 0, 15, 0, NULL
, 0);
137 EngLineTo(SurfObj
, NULL
, &Brush
, 0, 16, 15, 0, NULL
, 0);
138 EngLineTo(SurfObj
, NULL
, &Brush
, 0, 15, 0, 0, NULL
, 0);
140 // Create the bitmap for the mouse cursor data
143 hMouseSurf
= EngCreateBitmap(MouseSize
, 16, BMF_4BPP
, 0, NULL
);
144 MouseSurf
= (PSURFOBJ
)AccessUserObject(hMouseSurf
);
146 // Capture the cursor we drew in the mouse cursor buffer
151 MouseRect
.bottom
= 16;
152 MouseRect
.right
= 16;
153 EngBitBlt(MouseSurf
, SurfObj
, NULL
, NULL
, NULL
, &MouseRect
, &ZeroPoint
, NULL
, NULL
, NULL
, SRCCOPY
);
154 SurfGDI
->SetPointerShape(SurfObj
, MouseSurf
, NULL
, NULL
, 0, 0, 50, 50, &MouseRect
, 0);