Subversion Repositories Kolibri OS

Rev

Rev 6887 | Rev 7422 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5674 pavelyakov 1
#ifndef INCLUDE_MOUSE_H
2
#define INCLUDE_MOUSE_H
3
 
4
//Button MOUSE
5
#define MOUSE_LEFT   001b
6
#define MOUSE_RIGHT  010b
7
#define MOUSE_LR     011b
8
#define MOUSE_CENTER 100b
9
 
10
/**
11
 *  The structure of the MOUSE
12
 *  x - coordinate X
13
 *  y - coordinate Y
14
 *  xx and yy - time coordinates
15
 *  lkm - left MOUSE button
16
 *  pkm - right MOUSE button
17
 *  mkm - MOUSE wheel
18
 *  key - keycode button
19
 *  tmp - time keycode
20
 *  down - key event press
21
 *  up - key release events
22
 *  move - event MOUSE movements
23
 *  click - when clicked
5996 leency 24
 *  dblclick - double-click get system value
5674 pavelyakov 25
 *  drag - drag the element event
26
 */
27
 
28
:struct MOUSE
29
{
30
	signed x,y,xx,yy,lkm,mkm,pkm,key,tmp,tmp_time,hor,vert,down,up,move,click,dblclick,drag,left,top;
31
	dword handle,_;
32
	byte cmd;
33
	void get();
34
	void set();
35
	void center();
36
	dword hide();
37
	void slider();
38
	void show();
39
} mouse;
7182 leency 40
 
5674 pavelyakov 41
:void MOUSE::show()
42
{
43
	if(!handle)return;
44
	ECX = handle;
45
	EAX = 37;
46
	EBX = 5;
47
	$int 0x40;
48
}
49
:dword MOUSE::hide()
50
{
51
	if(!_)
52
	{
53
		EAX = 68;
54
		EBX = 12;
55
		ECX = 32*32*4;
56
		$int 0x40
57
		ECX = EAX;
58
		_ = EAX;
59
	} else ECX = _;
60
	EAX = 37;
61
	EBX = 4;
62
	DX  = 2;
63
	$int 0x40;
64
	handle = EAX;
65
	ECX = EAX;
66
	EAX = 37;
67
	EBX = 5;
68
	$int 0x40;
69
	handle = EAX;
70
}
71
 
72
//set new attributes MOUSE
73
:void MOUSE::set()
74
{
75
	if((xx!=x)||(yy!=y))
76
	{
77
		EAX = 18;
78
		EBX = 19;
79
		ECX = 4;
80
		EDX = (x<<16)+y;
81
		$int 0x40
82
		//move = true;
83
	}
84
	if((key)||(lkm|mkm|pkm))&&(down|up|click|dblclick|move)
85
	{
86
		if(lkm|mkm|pkm)key=(lkm)|(pkm<<1)|(2<
87
		EAX = 18;
88
		EBX = 19;
89
		ECX = key;
90
		EDX = (x<<16)+y;
91
		$int 0x40
92
	}
93
}
94
 
95
:void MOUSE::center()
96
{
97
	EAX = 18;
98
	EBX = 15;
99
	$int 0x40
100
}
101
 
102
//get new attributes MOUSE
103
:void MOUSE::get()
104
{
105
	EAX = 37;
106
	EBX = 1;
107
	$int	0x40
108
	$mov	ebx, eax
109
	$shr	eax, 16
110
	$and	ebx,0x0000FFFF
111
	x = EAX;
112
	y = EBX;
113
	if (x>6000) x-=65535;
114
	if (y>6000) y-=65535;
115
	EAX = 37;
116
	EBX = 2;
117
	$int	0x40
118
	$mov	ebx, eax
119
	$mov	ecx, eax
120
	key = EAX;
121
	$and	eax, 0x00000001
122
	$shr	ebx, 1
123
	$and	ebx, 0x00000001
124
	$shr	ecx, 2
125
	$and	ecx, 0x00000001
126
	lkm = EAX;
127
	pkm = EBX;
128
	mkm = ECX;
129
 
130
	//when you release the MOUSE button
131
	// Mouse Move Event
132
	if(xx!=x)||(yy!=y)
133
	{
134
		move = true;
135
		xx = x;
136
		yy = y;
137
	}
138
	else move = false;
139
	// Mouse Up Event
140
	if(cmd)&&(!key){
141
		up   = true;
142
		down = false;
143
		drag = false;
144
		if(!move) click = true;
7182 leency 145
		if(GetStartTime()-GetMouseDoubleClickDelay()<=tmp_time)
5674 pavelyakov 146
		{
147
			dblclick = true;
148
			click    = false;
149
		}
7182 leency 150
		tmp_time = GetStartTime();
5674 pavelyakov 151
		//returns the key code
152
		key = tmp;
153
		lkm = 1&tmp;
154
		pkm = 2&tmp;
155
		pkm >>= 1;
156
		mkm = 4&tmp;
157
		mkm >>= 2;
158
		cmd = false;
159
	}
160
 
161
	//when you press the MOUSE button
162
	// Mouse Down Event/Move Event
163
	else
164
	{
165
	    up       = false;
166
		click    = false;
167
		dblclick = false;
168
		down     = false;
169
		// Mouse Move Event
170
		if(key)if(!cmd)
171
		{
172
			down = true;
173
			if(move)drag = true;
174
			cmd = true;
175
			tmp=key;
176
		}
177
	}
178
 
179
	//scroll
180
	EAX = 37;
181
	EBX = 7;
182
	$int	0x40
183
	$mov	ebx, eax
184
	$shr	eax, 16
185
	$and	ebx,0x0000FFFF
186
	//hor = EAX;
187
	vert = EBX;
188
}
189
 
190
 
191
 
192
:void MOUSE::slider()
193
{
194
	signed _x,_y;
195
	if(!handle)hide();
196
	get();
197
	_x = x;_y = y;
198
	pause(5);
199
	get();
200
	left = _x - x;
201
	top  = _y - y;
202
	center();
203
	get();
204
	_x = x;_y = y;
205
	pause(5);
206
}
207
 
5996 leency 208
 
209
/*=====================================================================================
210
===========================                                 ===========================
211
===========================              SYSTEM             ===========================
212
===========================                                 ===========================
213
=====================================================================================*/
214
 
215
 
216
inline fastcall int GetMouseSpeed() {
217
	$mov eax,18
218
	$mov ebx,19
219
	$mov ecx,0
220
	$int 0x40
221
}
222
 
223
inline fastcall void SetMouseSpeed(EDX) {
224
	$mov eax,18
225
	$mov ebx,19
226
	$mov ecx,1
227
	$int 0x40
228
}
229
 
230
inline fastcall int GetMouseAcceleration() {
231
	$mov eax,18
232
	$mov ebx,19
233
	$mov ecx,2
234
	$int 0x40
235
}
236
 
237
inline fastcall void SetMouseAcceleration(EDX) {
238
	$mov eax,18
239
	$mov ebx,19
240
	$mov ecx,3
241
	$int 0x40
242
}
243
 
244
inline fastcall int GetMouseDoubleClickDelay() {
245
	$mov eax,18
246
	$mov ebx,19
247
	$mov ecx,6
248
	$int 0x40
249
}
250
 
251
inline fastcall void SetMouseDoubleClickDelay(DL) {
252
	$mov eax,18
253
	$mov ebx,19
254
	$mov ecx,7
255
	$int 0x40
256
}
257
 
5674 pavelyakov 258
#endif