Subversion Repositories Kolibri OS

Rev

Rev 2538 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2538 mario79 1
;------------------------------------------------------------------------------
2
align 4
3
START_mouse_thread:
4
	mcall	40,100000b	; only Event 6 - Mouse
5
;------------------------------------------------------------------------------
6
align 4
7
still_mouse:
8
	mcall	10
9
align 4
10
mouse:
11
	mcall	37,2
12
	cmp	eax,1	; если не левая, возврат
13
	jne	still_mouse
14
; координаты курсора
15
	xor	ebx,ebx
16
	mcall	37
17
 
18
	mov	ebx,eax		; eax = cursor_x
19
	shr	eax,16		; ebx = cursor_y
20
	and	ebx,0xffff
21
	mov	[curx1],eax	; curx1 = cursor_x
22
	mov	[cury1],ebx	; cury1 = cursor_y
23
 
24
; кому принадлежит точка?
25
	mcall	34,[curx1],[cury1]
26
	cmp	al,1 ; 1 - ядро
27
	jne	still_mouse
2548 mario79 28
 
29
; check for icon by click down
30
	call	check_icons_position
31
	mov	eax,[click_pos]
32
	test	eax,eax
33
	jz	still_mouse
34
 
35
	mov	eax,[current_X_mouse_thread]
36
	mov	[curx_restore],eax
37
	mov	eax,[current_Y_mouse_thread]
38
	mov	[cury_restore],eax
39
 
40
	call	draw_select
2538 mario79 41
;--------------------------------------
42
align 4
43
@@:		; подождём, пока пользователь не отпустил правую кнопку мыши
44
	mcall	37,2    ;   нажаты ли кнопки мыши?
45
	test	eax,1   ; если отпустил
46
	jz	@f	;   идём в начало главного цикла
47
 
48
	mcall	68,1	; иначе переключимся на следующий поток системы и когда
49
	jmp	@b	; выполнение вернется этому потоку, проверим мышь опять
50
;--------------------------------------
51
align 4
52
@@:
53
; координаты курсора
54
	xor	ebx,ebx
55
	mcall	37
56
 
57
	mov	ebx,eax		; eax = cursor_x
58
	shr	eax,16		; ebx = cursor_y
59
	and	ebx,0xffff
60
	mov	[curx2],eax	; curx1 = cursor_x
61
	mov	[cury2],ebx	; cury1 = cursor_y
62
 
63
; кому принадлежит точка?
64
	mcall	34,[curx2],[cury2]
65
	cmp	al,1 ; 1 - ядро
2548 mario79 66
	je	@f
67
	call	restore_background
68
	jmp	still_mouse
69
;--------------------------------------
70
align 4
71
@@:
2538 mario79 72
; check for icon by click down
73
	call	check_icons_position
74
	mov	eax,[click_pos]
75
	test	eax,eax
76
	jz	still_mouse
77
 
78
	push	eax
79
	mov	eax,[curx2]
80
	mov	[curx1],eax
81
	mov	eax,[cury2]
82
	mov	[cury1],eax
83
; check for icon by click up
84
	call	check_icons_position
85
	pop	eax
86
 
2548 mario79 87
	call	restore_background
88
 
2538 mario79 89
	mov	ebx,[click_pos]
90
 
91
	test	ebx,ebx
92
	jz	still_mouse
93
 
94
	cmp	eax,ebx
95
	jne	still_mouse
96
;--------------------------------------
2548 mario79 97
;start_appl:
98
	mov	esi,[adress_of_icon_data_2]
2538 mario79 99
	mov	ebx,1
100
	mov	edi,finfo.path
101
	call	fill_paths
102
	inc	ebx
103
	mov	edi,param_str
104
	mov	dword[finfo_start+8],edi
105
	call	fill_paths
106
	cmp	byte[edi],0
107
	jne	.no0
108
	and	dword[finfo_start+8],0
109
;--------------------------------------
110
align 4
111
.no0:
112
	mov	ebx,finfo_start
113
	mcall	70
114
	jmp	still_mouse
115
;------------------------------------------------------------------------------
116
align 4
117
fill_paths:
118
	push	esi edi
119
	movzx	ecx,byte[str_lens+ebx]
120
	add	esi,[positions+ebx*4]
121
	push	esi
122
	add	esi,ecx
123
;--------------------------------------
124
align 4
125
.l1:
126
	dec	esi
127
	cmp	byte[esi],' '
128
	jnz	.found
129
	loop	.l1
130
	pop	esi
131
	jmp	.noms
132
;--------------------------------------
133
align 4
134
.found:
135
	lea	ecx,[esi+1]
136
	pop	esi
137
	sub	ecx,esi
138
	rep	movsb
139
;--------------------------------------
140
align 4
141
.noms:
142
	and	byte[edi],0
143
	pop	edi esi
144
	ret
145
;------------------------------------------------------------------------------
146
align 4
147
check_icons_position:
148
	mov	ecx,[icons]
149
	mov	ebx,icon_data
150
;--------------------------------------
151
align 4
152
.loop:
153
	push	ebx ecx
154
	mov	[adress_of_icon_data_2],ebx
155
	mov	eax,[ebx]
156
	call	calc_icon_pos
157
 
158
	mov	[current_X_mouse_thread],ebx
159
	mov	[current_Y_mouse_thread],eax
160
	mov	eax,[curx1]
161
	mov	ebx,[current_X_mouse_thread]
162
	cmp	eax,ebx
163
	jb	.next
164
 
165
	add	ebx,52
166
	cmp	eax,ebx
167
	ja	.next
168
 
169
	mov	eax,[cury1]
170
	mov	ebx,[current_Y_mouse_thread]
171
	cmp	eax,ebx
172
	jb	.next
173
 
174
	add	ebx,52
175
	cmp	eax,ebx
176
	ja	.next
177
 
178
	pop	ecx ebx
179
	mov	eax,[adress_of_icon_data_2]
180
	mov	[click_pos],eax
181
	ret
182
;--------------------------------------
183
align 4
184
.next:
185
	pop	ecx ebx
186
	add	ebx,REC_SIZE
187
	dec	ecx
188
	jnz	.loop
189
; all icons survived!
190
	xor	eax,eax
191
	mov	[click_pos],eax
192
	ret
193
;------------------------------------------------------------------------------
2548 mario79 194
align 4
195
draw_select:
196
	mcall	68,12,52*52*4+8
197
	mov	[draw_area_2],eax
198
	mov	ebx,52
199
	mov	[eax],ebx
200
	mov	[eax+4],ebx
201
;--------------------------------------
202
; draw black square
203
	mov	eax,-1
204
	mov	edi,[draw_area_2]
205
	add	edi,8
206
	cld
207
	mov	ecx,52*52
208
	rep	stosd
209
;--------------------------------------
210
; draw white square
211
	mov	eax,0xff000000
212
	mov	edi,[draw_area_2]
213
	add	edi,8+(4*1)+(52*4*1)
214
	mov	ebx,50
215
	cld
216
;--------------------------------------
217
align 4
218
@@:
219
	mov	ecx,50
220
	rep	stosd
221
 
222
	add	edi,2*4
223
	dec	ebx
224
	jnz	@b
225
;--------------------------------------
226
; draw black square
227
	xor	eax,eax
228
	mov	edi,[draw_area_2]
229
	add	edi,8+(4*2)+(52*4*2)
230
	mov	ebx,48
231
	cld
232
;--------------------------------------
233
align 4
234
@@:
235
	mov	ecx,48
236
	rep	stosd
237
 
238
	add	edi,4*4
239
	dec	ebx
240
	jnz	@b
241
;--------------------------------------
242
	mov	edx,[current_X_mouse_thread]
243
	shl	edx,16
244
	add	edx,[current_Y_mouse_thread]
245
	mov	ebx,[draw_area_2]
246
	add	ebx,8
247
	mcall	25,,<52,52>
248
	mcall	68,13,[draw_area_2]
249
	ret
250
;------------------------------------------------------------------------------
251
align 4
252
restore_background:
253
	pusha
254
	mov	eax,[curx_restore]
255
	mov	ecx,eax
256
	shl	ecx,16
257
	add	ecx,eax
258
	add	ecx,52
259
 
260
	mov	eax,[cury_restore]
261
	mov	edx,eax
262
	shl	edx,16
263
	add	edx,eax
264
	add	edx,52
265
 
266
	mcall	15,9
267
	popa
268
	ret
269
;------------------------------------------------------------------------------