Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
824 mikedld 1
diff16 'tp-mouse.asm',0,$
2
 
617 mikedld 3
proc check_mouse_in_edit_area
178 heavyiron 4
	mcall	37,1
5
	mov	ebx,eax
6
	and	ebx,0x0000FFFF
7
	shr	eax,16
297 mikedld 8
	mov	ecx,[cur_editor.Bounds.Top]
178 heavyiron 9
	inc	ecx
297 mikedld 10
	pushd	[cur_editor.Bounds.Left] ecx [cur_editor.Bounds.Right] ecx
178 heavyiron 11
	popd	[__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
12
	sub	[__rc+0x8],SCRLW+6
280 mikedld 13
	mov	ecx,[cur_editor.Gutter.Width]
14
	add	[__rc+0x0],ecx
178 heavyiron 15
	imul	ecx,[lines.scr],LINEH
16
	dec	ecx
17
	add	[__rc+0xC],ecx
18
	mov	ecx,__rc
19
	call	pt_in_rect
20
	ret
617 mikedld 21
endp
178 heavyiron 22
 
617 mikedld 23
proc get_mouse_event
178 heavyiron 24
	mcall	37,2
25
	and	al,3
26
	mov	bl,[ecx]
27
	cmp	[ecx],al
28
	mov	[ecx],al
29
	jne	@f
617 mikedld 30
	mcall	37,7
31
	or	eax,eax
32
	jz	.mv
33
	add	[ecx+6],ax
34
	shr	eax,16
35
	add	[ecx+4],ax
36
	mov	eax,MEV_WHEEL
178 heavyiron 37
	ret
617 mikedld 38
  .mv:	mov	eax,MEV_MOVE
39
	ret
178 heavyiron 40
    @@: mov	bh,al
41
	and	ebx,0x0101
42
	cmp	bl,bh
43
	je	.rb
44
	test	al,1
45
	jz	@f
46
	mov	eax,MEV_LDOWN
47
	ret
48
    @@: mov	eax,MEV_LUP
49
	ret
50
  .rb:	test	al,2
51
	jz	@f
52
	mov	eax,MEV_RDOWN
53
	ret
54
    @@: mov	eax,MEV_RUP
55
	ret
617 mikedld 56
endp
178 heavyiron 57
 
617 mikedld 58
mouse_ev dd mouse.l_down,mouse.l_up,mouse.r_down,mouse.r_up,mouse.wheel,mouse.move
178 heavyiron 59
 
60
mouse:
2065 mario79 61
 
62
	mcall	9,p_info,-1
63
 
64
	mov	eax,[p_info+70] ;status of window
65
	test	eax,100b
66
	jne	still.skip_write
67
 
178 heavyiron 68
	mov	ecx,mst
69
	call	get_mouse_event
70
	cmp	[bot_mode],0
71
	je	@f
72
	mov	ah,al
73
	mov	al,4
74
	call	[bot_dlg_handler]
1480 mikedld 75
	jmp	still.skip_write
178 heavyiron 76
    @@: cmp	al,MEV_MOVE
77
	jne	.no_move
78
	cmp	[popup_active],1
79
	je	@f
80
  .no_move:
81
	mov	[s_status],0
82
 
83
	push	eax
84
	mcall	9,p_info,-1
85
	cmp	ax,[p_info.window_stack_position]
86
	pop	eax
87
	jne	still.skip_write
88
    @@:
297 mikedld 89
;!!!        cmp     [just_from_popup],0
90
;!!!        je      @f
91
;!!!        cmp     al,MEV_LUP
92
;!!!        jne     still.skip_write
178 heavyiron 93
    @@: mov	[mev],al
94
	jmp	[mouse_ev+eax*4-4]
95
 
617 mikedld 96
  .wheel:
97
	movsx	eax,word[mst+4]
98
	lea	eax,[eax*3]
99
	add	[cur_editor.TopLeft.X],eax
100
	movsx	eax,word[mst+6]
101
	lea	eax,[eax*3]
102
	add	[cur_editor.TopLeft.Y],eax
103
	xor	eax,eax
104
	mov	[mst+4],eax
105
	call	check_bottom_right
106
	call	draw_editor
107
	jmp	still.skip_write
108
 
178 heavyiron 109
  .move:
110
	mcall	37,1
111
	movsx	ebx,ax
112
	sar	eax,16
113
	cmp	[body_capt],0
114
	jge	.check_body.2
115
	cmp	[vscrl_capt],0
116
	jge	.check_vscroll.2
117
	cmp	[hscrl_capt],0
118
	jge	.check_hscroll.2
119
 
120
	cmp	[do_not_draw],0
121
	jne	still.skip_write
122
	mov	eax,[mi_cur]
123
	call	get_active_menu_item
124
	cmp	eax,[mi_cur]
125
	je	still.skip_write
126
	push	[mi_cur]
127
	cmp	[popup_active],0
128
	je	@f
129
	mov	[mi_cur],eax
130
    @@: call	draw_main_menu
131
	pop	[mi_cur]
132
	cmp	[popup_active],0
133
	je	still.skip_write
134
	mov	ecx,[mi_cur]
135
	or	ecx,ecx
136
	js	still.skip_write
137
	mov	eax,[main_menu.popups+ecx*4-4]
138
	mov	edx,main_menu
139
	call	dword[main_menu.onshow+ecx*4-4]
140
	call	setup_main_menu_popup
141
	mcall	60,2,[h_popup],POPUP_STACK,4
142
 
143
	jmp	still.skip_write
144
 
145
 
146
  .r_down:
147
    @@: cmp	[popup_active],0
148
	je	@f
149
	mcall	5,1
150
	jmp	@b
151
    @@: cmp	[mouse_captured],0
152
	jne	still.skip_write
153
	call	check_mouse_in_edit_area
154
	jnc	still.skip_write
155
	mcall	37,0
259 mikedld 156
	mov	[mm.Edit+POPUP.pos],eax
178 heavyiron 157
    @@: mcall	37,2
158
	cmp	eax,ebx
159
	jnz	@f
160
	mcall	5,1
161
	jmp	@b
162
    @@: and	[mst],0xFD
163
	call	onshow.edit
259 mikedld 164
	mov	dword[POPUP_STACK],mm.Edit
178 heavyiron 165
	mcall	51,1,popup_thread_start,POPUP_STACK
166
	mov	[h_popup],eax
167
	jmp	still.skip_write
168
 
169
  .r_up:
170
	jmp	still.skip_write
171
 
172
  .l_down:
173
	call	check_mouse_in_edit_area
174
	jnc	.check_vscroll
175
	mov	[mouse_captured],1
176
	mov	[body_capt],1
177
 
178
	call	clear_selection
179
 
180
  .check_body.2:
297 mikedld 181
	sub	eax,[cur_editor.Bounds.Left]
182
	sub	ebx,[cur_editor.Bounds.Top]
280 mikedld 183
	sub	eax,[cur_editor.Gutter.Width]
184
	sub	eax,LCHGW
185
	sub	ebx,2
178 heavyiron 186
	push	eax
187
	mov	eax,ebx
297 mikedld 188
	cdq
178 heavyiron 189
	mov	ecx,LINEH
190
	idiv	ecx
297 mikedld 191
    @@: add	eax,[cur_editor.TopLeft.Y]
178 heavyiron 192
	mov	ebx,eax
193
	pop	eax
297 mikedld 194
	cdq
178 heavyiron 195
	mov	ecx,6
196
	idiv	ecx
297 mikedld 197
    @@: add	eax,[cur_editor.TopLeft.X]
178 heavyiron 198
 
297 mikedld 199
	cmp	eax,[cur_editor.Columns.Count]
178 heavyiron 200
	jl	@f
297 mikedld 201
	mov	eax,[cur_editor.Columns.Count]
202
    @@: cmp	ebx,[cur_editor.Lines.Count]
178 heavyiron 203
	jl	@f
297 mikedld 204
	mov	ebx,[cur_editor.Lines.Count]
178 heavyiron 205
	dec	ebx
206
    @@:
297 mikedld 207
	cmp	[cur_editor.Caret.X],eax
178 heavyiron 208
	jne	.change_cur_pos
297 mikedld 209
	cmp	[cur_editor.Caret.Y],ebx
210
	jne	.change_cur_pos
211
	call	editor_check_for_changes
212
	jmp	still.skip_write
178 heavyiron 213
 
214
  .change_cur_pos:
297 mikedld 215
	mov	[cur_editor.Caret.X],eax
216
	mov	[cur_editor.Caret.Y],ebx
217
	call	editor_check_for_changes
178 heavyiron 218
	jmp	still
219
 
220
  .check_vscroll:
280 mikedld 221
	mov	ecx,[cur_editor.Bounds.Right]
297 mikedld 222
	sub	ecx,SCRLW-1
223
	pushd	ecx [cur_editor.Bounds.Top] ecx [cur_editor.Bounds.Bottom]
178 heavyiron 224
	popd	[__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
297 mikedld 225
	add	[__rc+0x8],SCRLW-2
226
	add	[__rc+0x4],SCRLW-1
227
	sub	[__rc+0xC],SCRLW*2+1
178 heavyiron 228
	mov	ecx,__rc
229
	call	pt_in_rect
230
	jnc	.check_hscroll
231
 
232
  .check_vscroll.2:
297 mikedld 233
	sub	ebx,[cur_editor.Bounds.Top]
234
	sub	ebx,SCRLW
178 heavyiron 235
	cmp	[vscrl_capt],0
236
	jge	.vcaptured
297 mikedld 237
	mov	eax,[cur_editor.VScroll.Top]
178 heavyiron 238
	cmp	ebx,eax
239
	jb	.center_vcapture
297 mikedld 240
	add	eax,[cur_editor.VScroll.Size]
178 heavyiron 241
	cmp	ebx,eax
242
	jae	.center_vcapture
243
	mov	eax,ebx
297 mikedld 244
	sub	eax,[cur_editor.VScroll.Top]
178 heavyiron 245
	dec	eax
246
	mov	[vscrl_capt],eax
247
	dec	ebx
248
	jmp	.vcaptured
249
  .center_vcapture:
297 mikedld 250
	mov	eax,[cur_editor.VScroll.Size]
178 heavyiron 251
	shr	eax,1
252
	mov	[vscrl_capt],eax
253
  .vcaptured:
254
	sub	ebx,[vscrl_capt]
255
	jns	@f
256
	xor	ebx,ebx
257
    @@: mov	[mouse_captured],1
297 mikedld 258
	mov	eax,[cur_editor.Bounds.Bottom]
259
	sub	eax,[cur_editor.Bounds.Top]
260
	sub	eax,[cur_editor.VScroll.Size]
261
	sub	eax,SCRLW*3
178 heavyiron 262
	cmp	eax,ebx
263
	jge	@f
264
	mov	ebx,eax
265
    @@:
297 mikedld 266
	mov	[cur_editor.VScroll.Top],ebx
267
	mov	eax,[cur_editor.Lines.Count]
178 heavyiron 268
	sub	eax,[lines.scr]
269
	imul	ebx
297 mikedld 270
	mov	ebx,[cur_editor.Bounds.Bottom]
271
	sub	ebx,[cur_editor.Bounds.Top]
272
	sub	ebx,SCRLW*3
273
	sub	ebx,[cur_editor.VScroll.Size]
178 heavyiron 274
	idiv	ebx
297 mikedld 275
	cmp	eax,[cur_editor.TopLeft.Y]
178 heavyiron 276
	je	still.skip_write
297 mikedld 277
	mov	[cur_editor.TopLeft.Y],eax
178 heavyiron 278
	call	check_bottom_right
297 mikedld 279
	call	draw_editor
178 heavyiron 280
	jmp	still.skip_write
281
 
282
  .check_hscroll:
297 mikedld 283
	pushd	[cur_editor.Bounds.Left] [cur_editor.Bounds.Bottom] [cur_editor.Bounds.Right] [cur_editor.Bounds.Bottom]
178 heavyiron 284
	popd	[__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
280 mikedld 285
	add	[__rc+0x8],-SCRLW*2-1
286
	add	[__rc+0x4],-SCRLW+1
287
	add	[__rc+0xC],-1
288
	add	[__rc+0x0],SCRLW+1
178 heavyiron 289
	mov	ecx,__rc
290
	call	pt_in_rect
291
	jnc	.check_main_menu
292
 
293
  .check_hscroll.2:
294
	mov	ebx,eax
280 mikedld 295
	sub	ebx,SCRLW+1
296
	sub	ebx,[cur_editor.Bounds.Left]
178 heavyiron 297
	cmp	[hscrl_capt],0
298
	jge	.hcaptured
297 mikedld 299
	mov	eax,[cur_editor.HScroll.Top]
178 heavyiron 300
	cmp	ebx,eax
301
	jl	.center_hcapture
297 mikedld 302
	add	eax,[cur_editor.HScroll.Size]
178 heavyiron 303
	cmp	ebx,eax
304
	jge	.center_hcapture
305
	mov	eax,ebx
297 mikedld 306
	sub	eax,[cur_editor.HScroll.Top]
178 heavyiron 307
	dec	eax
308
	mov	[hscrl_capt],eax
309
	dec	ebx
310
	jmp	.hcaptured
311
  .center_hcapture:
297 mikedld 312
	mov	eax,[cur_editor.HScroll.Size]
178 heavyiron 313
	shr	eax,1
314
	mov	[hscrl_capt],eax
315
  .hcaptured:
316
	sub	ebx,[hscrl_capt]
317
	jns	@f
318
	xor	ebx,ebx
319
    @@: mov	[mouse_captured],1
297 mikedld 320
	mov	eax,[cur_editor.Bounds.Right]
321
	sub	eax,[cur_editor.HScroll.Size]
322
	sub	eax,SCRLW*3+1
178 heavyiron 323
	cmp	eax,ebx
324
	jge	@f
325
	mov	ebx,eax
326
    @@:
297 mikedld 327
	mov	[cur_editor.HScroll.Top],ebx
328
	mov	eax,[cur_editor.Columns.Count]
178 heavyiron 329
	sub	eax,[columns.scr]
330
	imul	ebx
297 mikedld 331
	mov	ebx,[cur_editor.Bounds.Right]
332
	sub	ebx,SCRLW*3+1
333
	sub	ebx,[cur_editor.HScroll.Size]
178 heavyiron 334
	idiv	ebx
297 mikedld 335
	cmp	eax,[cur_editor.TopLeft.X]
178 heavyiron 336
	je	still.skip_write
297 mikedld 337
	mov	[cur_editor.TopLeft.X],eax
178 heavyiron 338
	call	check_bottom_right
297 mikedld 339
	call	draw_editor
178 heavyiron 340
	jmp	still.skip_write
341
 
342
  .check_main_menu:
343
	cmp	[do_not_draw],0
344
	jne	.capture_off
345
 
346
    @@: mcall	37,2
347
	test	eax,0x01
348
	jz	@f
349
	mcall	5,1
350
	jmp	@b
351
    @@: and	[mst],0xFE
352
 
353
	cmp	[mi_cur],0
354
	jle	.capture_off
355
	mov	ecx,[mi_cur]
356
	mov	eax,[main_menu.popups+ecx*4-4]
357
	mov	edx,main_menu
358
	call	dword[main_menu.onshow+ecx*4-4]
359
	call	setup_main_menu_popup
360
	mcall	51,1,popup_thread_start,POPUP_STACK
361
	mov	[h_popup],eax
362
 
363
  .l_up:
364
  .capture_off:
365
	or	eax,-1
366
	mov	[vscrl_capt],eax
367
	mov	[hscrl_capt],eax
368
	mov	[body_capt],eax
369
	mov	[mouse_captured],0
297 mikedld 370
;!!!        mov     [just_from_popup],0
178 heavyiron 371
	jmp	still.skip_write