Subversion Repositories Kolibri OS

Rev

Rev 8330 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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