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;
11 static UCHAR DefaultCursor
[256] = {
12 0x00, 0x00, 0x00, 0x00,
13 0x00, 0x00, 0x00, 0x00,
14 0x00, 0x00, 0x00, 0x00,
15 0x00, 0x00, 0x00, 0x00,
16 0x00, 0x00, 0x00, 0x00,
17 0x00, 0x00, 0x00, 0x00,
18 0x00, 0x00, 0x00, 0x00,
19 0x00, 0x00, 0x00, 0x00,
20 0x00, 0x00, 0x00, 0x00,
21 0x00, 0x00, 0x00, 0x00,
22 0x00, 0x00, 0x00, 0x00,
23 0x00, 0x00, 0x00, 0x00,
24 0x00, 0x00, 0x00, 0x00,
25 0x00, 0xC0, 0x00, 0x00,
26 0x00, 0xC0, 0x00, 0x00,
27 0x01, 0x80, 0x00, 0x00,
28 0x01, 0x80, 0x00, 0x00,
29 0x03, 0x00, 0x00, 0x00,
30 0x43, 0x00, 0x00, 0x00,
31 0x66, 0x00, 0x00, 0x00,
32 0x76, 0x00, 0x00, 0x00,
33 0x7E, 0x00, 0x00, 0x00,
34 0x7F, 0xC0, 0x00, 0x00,
35 0x7F, 0x80, 0x00, 0x00,
36 0x7F, 0x00, 0x00, 0x00,
37 0x7E, 0x00, 0x00, 0x00,
38 0x7C, 0x00, 0x00, 0x00,
39 0x78, 0x00, 0x00, 0x00,
40 0x70, 0x00, 0x00, 0x00,
41 0x60, 0x00, 0x00, 0x00,
42 0x40, 0x00, 0x00, 0x00,
43 0x00, 0x00, 0x00, 0x00,
45 0xFF, 0xFF, 0xFF, 0xFF,
46 0xFF, 0xFF, 0xFF, 0xFF,
47 0xFF, 0xFF, 0xFF, 0xFF,
48 0xFF, 0xFF, 0xFF, 0xFF,
49 0xFF, 0xFF, 0xFF, 0xFF,
50 0xFF, 0xFF, 0xFF, 0xFF,
51 0xFF, 0xFF, 0xFF, 0xFF,
52 0xFF, 0xFF, 0xFF, 0xFF,
53 0xFF, 0xFF, 0xFF, 0xFF,
54 0xFF, 0xFF, 0xFF, 0xFF,
55 0xFF, 0xFF, 0xFF, 0xFF,
56 0xFF, 0xFF, 0xFF, 0xFF,
57 0xFF, 0x3F, 0xFF, 0xFF,
58 0xFE, 0x1F, 0xFF, 0xFF,
59 0xFE, 0x1F, 0xFF, 0xFF,
60 0xFC, 0x3F, 0xFF, 0xFF,
61 0x7C, 0x3F, 0xFF, 0xFF,
62 0x38, 0x7F, 0xFF, 0xFF,
63 0x18, 0x7F, 0xFF, 0xFF,
64 0x00, 0xFF, 0xFF, 0xFF,
65 0x00, 0xFF, 0xFF, 0xFF,
66 0x00, 0x0F, 0xFF, 0xFF,
67 0x00, 0x1F, 0xFF, 0xFF,
68 0x00, 0x3F, 0xFF, 0xFF,
69 0x00, 0x7F, 0xFF, 0xFF,
70 0x00, 0xFF, 0xFF, 0xFF,
71 0x01, 0xFF, 0xFF, 0xFF,
72 0x03, 0xFF, 0xFF, 0xFF,
73 0x07, 0xFF, 0xFF, 0xFF,
74 0x0F, 0xFF, 0xFF, 0xFF,
75 0x1F, 0xFF, 0xFF, 0xFF,
76 0x3F, 0xFF, 0xFF, 0xFF};
78 INT
MouseSafetyOnDrawStart(PSURFOBJ SurfObj
, PSURFGDI SurfGDI
, LONG HazardX1
, LONG HazardY1
, LONG HazardX2
, LONG HazardY2
)
83 if(SurfObj
== NULL
) return 0;
85 if((SurfObj
->iType
!= STYPE_DEVICE
) || (MouseEnabled
== FALSE
)) return 0;
87 if(HazardX1
> HazardX2
) { tmp
= HazardX2
; HazardX2
= HazardX1
; HazardX1
= tmp
; }
88 if(HazardY1
> HazardY2
) { tmp
= HazardY2
; HazardY2
= HazardY1
; HazardY1
= tmp
; }
90 if( (mouse_x
+ mouse_width
>= HazardX1
) && (mouse_x
<= HazardX2
) &&
91 (mouse_y
+ mouse_height
>= HazardY1
) && (mouse_y
<= HazardY2
) )
93 SurfGDI
->MovePointer(SurfObj
, -1, -1, &MouseRect
);
97 // Mouse is not allowed to move if GDI is busy drawing
103 INT
MouseSafetyOnDrawEnd(PSURFOBJ SurfObj
, PSURFGDI SurfGDI
)
107 if(SurfObj
== NULL
) return 0;
109 if((SurfObj
->iType
!= STYPE_DEVICE
) || (MouseEnabled
== FALSE
)) return 0;
111 if(SafetySwitch
== TRUE
)
113 SurfGDI
->MovePointer(SurfObj
, mouse_x
, mouse_y
, &MouseRect
);
114 SafetySwitch
= FALSE
;
117 SafetySwitch2
= FALSE
;
122 VOID
MouseGDICallBack(PMOUSE_INPUT_DATA Data
, ULONG InputCount
)
125 LONG mouse_cx
= 0, mouse_cy
= 0;
126 HDC hDC
= W32kGetScreenDC();
132 PDEVICE_OBJECT ClassDeviceObject
= NULL
;
133 PFILE_OBJECT FileObject
= NULL
;
135 UNICODE_STRING ClassName
;
136 IO_STATUS_BLOCK ioStatus
;
145 dc
= DC_HandleToPtr(hDC
);
146 SurfObj
= (PSURFOBJ
)AccessUserObject(dc
->Surface
);
147 SurfGDI
= (PSURFGDI
)AccessInternalObject(dc
->Surface
);
149 // Compile the total mouse movement change
150 for (i
=0; i
<InputCount
; i
++)
152 mouse_cx
+= Data
[i
].LastX
;
153 mouse_cy
+= Data
[i
].LastY
;
156 if((mouse_cx
!= 0) || (mouse_cy
!= 0))
161 if(mouse_x
< 0) mouse_x
= 0;
162 if(mouse_y
< 0) mouse_y
= 0;
163 if(mouse_x
> 620) mouse_x
= 620;
164 if(mouse_y
> 460) mouse_y
= 460;
166 if((SafetySwitch
== FALSE
) && (SafetySwitch2
== FALSE
)) ;
167 SurfGDI
->MovePointer(SurfObj
, mouse_x
, mouse_y
, &MouseRect
);
171 VOID
EnableMouse(HDC hDisplayDC
)
173 PDC dc
= DC_HandleToPtr(hDisplayDC
);
174 PSURFOBJ SurfObj
= (PSURFOBJ
)AccessUserObject(dc
->Surface
);
175 PSURFGDI SurfGDI
= (PSURFGDI
)AccessInternalObject(dc
->Surface
);
186 /* Create the default mouse cursor. */
191 hMouseSurf
= EngCreateBitmap(MouseSize
, 4, BMF_1BPP
, 0, DefaultCursor
);
192 MouseSurf
= (PSURFOBJ
)AccessUserObject(hMouseSurf
);
194 /* Tell the display driver to set the pointer shape. */
195 SurfGDI
->SetPointerShape(SurfObj
, MouseSurf
, NULL
, NULL
, 0, 0, 320, 240,