Subversion Repositories Kolibri OS

Rev

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