Subversion Repositories Kolibri OS

Rev

Rev 4665 | Rev 5838 | 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
4665 gtament 142
 
143
	call draw_main_menu
178 heavyiron 144
 
145
	jmp	still.skip_write
146
 
147
 
148
  .r_down:
149
    @@: cmp	[popup_active],0
150
	je	@f
151
	mcall	5,1
152
	jmp	@b
153
    @@: cmp	[mouse_captured],0
154
	jne	still.skip_write
155
	call	check_mouse_in_edit_area
156
	jnc	still.skip_write
157
	mcall	37,0
259 mikedld 158
	mov	[mm.Edit+POPUP.pos],eax
178 heavyiron 159
    @@: mcall	37,2
160
	cmp	eax,ebx
161
	jnz	@f
162
	mcall	5,1
163
	jmp	@b
164
    @@: and	[mst],0xFD
165
	call	onshow.edit
259 mikedld 166
	mov	dword[POPUP_STACK],mm.Edit
178 heavyiron 167
	mcall	51,1,popup_thread_start,POPUP_STACK
168
	mov	[h_popup],eax
169
	jmp	still.skip_write
170
 
171
  .r_up:
172
	jmp	still.skip_write
173
 
174
  .l_down:
175
	call	check_mouse_in_edit_area
176
	jnc	.check_vscroll
177
	mov	[mouse_captured],1
178
	mov	[body_capt],1
179
 
180
	call	clear_selection
181
 
182
  .check_body.2:
297 mikedld 183
	sub	eax,[cur_editor.Bounds.Left]
184
	sub	ebx,[cur_editor.Bounds.Top]
280 mikedld 185
	sub	eax,[cur_editor.Gutter.Width]
186
	sub	eax,LCHGW
187
	sub	ebx,2
178 heavyiron 188
	push	eax
189
	mov	eax,ebx
297 mikedld 190
	cdq
178 heavyiron 191
	mov	ecx,LINEH
192
	idiv	ecx
297 mikedld 193
    @@: add	eax,[cur_editor.TopLeft.Y]
178 heavyiron 194
	mov	ebx,eax
195
	pop	eax
297 mikedld 196
	cdq
178 heavyiron 197
	mov	ecx,6
198
	idiv	ecx
297 mikedld 199
    @@: add	eax,[cur_editor.TopLeft.X]
5579 Pathoswith 200
	mov	ecx, ebx
201
	call	get_line_offset
202
	cmp	eax,[esi]
178 heavyiron 203
	jl	@f
5579 Pathoswith 204
	mov	eax,[esi]
297 mikedld 205
    @@: cmp	ebx,[cur_editor.Lines.Count]
178 heavyiron 206
	jl	@f
297 mikedld 207
	mov	ebx,[cur_editor.Lines.Count]
178 heavyiron 208
	dec	ebx
209
    @@:
297 mikedld 210
	cmp	[cur_editor.Caret.X],eax
178 heavyiron 211
	jne	.change_cur_pos
297 mikedld 212
	cmp	[cur_editor.Caret.Y],ebx
213
	jne	.change_cur_pos
214
	call	editor_check_for_changes
215
	jmp	still.skip_write
178 heavyiron 216
 
217
  .change_cur_pos:
297 mikedld 218
	mov	[cur_editor.Caret.X],eax
219
	mov	[cur_editor.Caret.Y],ebx
220
	call	editor_check_for_changes
178 heavyiron 221
	jmp	still
222
 
223
  .check_vscroll:
280 mikedld 224
	mov	ecx,[cur_editor.Bounds.Right]
297 mikedld 225
	sub	ecx,SCRLW-1
226
	pushd	ecx [cur_editor.Bounds.Top] ecx [cur_editor.Bounds.Bottom]
178 heavyiron 227
	popd	[__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
297 mikedld 228
	add	[__rc+0x8],SCRLW-2
229
	add	[__rc+0x4],SCRLW-1
230
	sub	[__rc+0xC],SCRLW*2+1
178 heavyiron 231
	mov	ecx,__rc
232
	call	pt_in_rect
233
	jnc	.check_hscroll
234
 
235
  .check_vscroll.2:
297 mikedld 236
	sub	ebx,[cur_editor.Bounds.Top]
237
	sub	ebx,SCRLW
178 heavyiron 238
	cmp	[vscrl_capt],0
239
	jge	.vcaptured
297 mikedld 240
	mov	eax,[cur_editor.VScroll.Top]
178 heavyiron 241
	cmp	ebx,eax
242
	jb	.center_vcapture
297 mikedld 243
	add	eax,[cur_editor.VScroll.Size]
178 heavyiron 244
	cmp	ebx,eax
245
	jae	.center_vcapture
246
	mov	eax,ebx
297 mikedld 247
	sub	eax,[cur_editor.VScroll.Top]
178 heavyiron 248
	dec	eax
249
	mov	[vscrl_capt],eax
250
	dec	ebx
251
	jmp	.vcaptured
252
  .center_vcapture:
297 mikedld 253
	mov	eax,[cur_editor.VScroll.Size]
178 heavyiron 254
	shr	eax,1
255
	mov	[vscrl_capt],eax
256
  .vcaptured:
257
	sub	ebx,[vscrl_capt]
258
	jns	@f
259
	xor	ebx,ebx
260
    @@: mov	[mouse_captured],1
297 mikedld 261
	mov	eax,[cur_editor.Bounds.Bottom]
262
	sub	eax,[cur_editor.Bounds.Top]
263
	sub	eax,[cur_editor.VScroll.Size]
264
	sub	eax,SCRLW*3
178 heavyiron 265
	cmp	eax,ebx
266
	jge	@f
267
	mov	ebx,eax
268
    @@:
297 mikedld 269
	mov	[cur_editor.VScroll.Top],ebx
270
	mov	eax,[cur_editor.Lines.Count]
178 heavyiron 271
	sub	eax,[lines.scr]
272
	imul	ebx
297 mikedld 273
	mov	ebx,[cur_editor.Bounds.Bottom]
274
	sub	ebx,[cur_editor.Bounds.Top]
275
	sub	ebx,SCRLW*3
276
	sub	ebx,[cur_editor.VScroll.Size]
178 heavyiron 277
	idiv	ebx
297 mikedld 278
	cmp	eax,[cur_editor.TopLeft.Y]
178 heavyiron 279
	je	still.skip_write
297 mikedld 280
	mov	[cur_editor.TopLeft.Y],eax
178 heavyiron 281
	call	check_bottom_right
297 mikedld 282
	call	draw_editor
178 heavyiron 283
	jmp	still.skip_write
284
 
285
  .check_hscroll:
297 mikedld 286
	pushd	[cur_editor.Bounds.Left] [cur_editor.Bounds.Bottom] [cur_editor.Bounds.Right] [cur_editor.Bounds.Bottom]
178 heavyiron 287
	popd	[__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
280 mikedld 288
	add	[__rc+0x8],-SCRLW*2-1
289
	add	[__rc+0x4],-SCRLW+1
290
	add	[__rc+0xC],-1
291
	add	[__rc+0x0],SCRLW+1
178 heavyiron 292
	mov	ecx,__rc
293
	call	pt_in_rect
294
	jnc	.check_main_menu
295
 
296
  .check_hscroll.2:
297
	mov	ebx,eax
280 mikedld 298
	sub	ebx,SCRLW+1
299
	sub	ebx,[cur_editor.Bounds.Left]
178 heavyiron 300
	cmp	[hscrl_capt],0
301
	jge	.hcaptured
297 mikedld 302
	mov	eax,[cur_editor.HScroll.Top]
178 heavyiron 303
	cmp	ebx,eax
304
	jl	.center_hcapture
297 mikedld 305
	add	eax,[cur_editor.HScroll.Size]
178 heavyiron 306
	cmp	ebx,eax
307
	jge	.center_hcapture
308
	mov	eax,ebx
297 mikedld 309
	sub	eax,[cur_editor.HScroll.Top]
178 heavyiron 310
	dec	eax
311
	mov	[hscrl_capt],eax
312
	dec	ebx
313
	jmp	.hcaptured
314
  .center_hcapture:
297 mikedld 315
	mov	eax,[cur_editor.HScroll.Size]
178 heavyiron 316
	shr	eax,1
317
	mov	[hscrl_capt],eax
318
  .hcaptured:
319
	sub	ebx,[hscrl_capt]
320
	jns	@f
321
	xor	ebx,ebx
322
    @@: mov	[mouse_captured],1
297 mikedld 323
	mov	eax,[cur_editor.Bounds.Right]
324
	sub	eax,[cur_editor.HScroll.Size]
325
	sub	eax,SCRLW*3+1
178 heavyiron 326
	cmp	eax,ebx
327
	jge	@f
328
	mov	ebx,eax
329
    @@:
297 mikedld 330
	mov	[cur_editor.HScroll.Top],ebx
331
	mov	eax,[cur_editor.Columns.Count]
178 heavyiron 332
	sub	eax,[columns.scr]
333
	imul	ebx
297 mikedld 334
	mov	ebx,[cur_editor.Bounds.Right]
335
	sub	ebx,SCRLW*3+1
336
	sub	ebx,[cur_editor.HScroll.Size]
178 heavyiron 337
	idiv	ebx
297 mikedld 338
	cmp	eax,[cur_editor.TopLeft.X]
178 heavyiron 339
	je	still.skip_write
297 mikedld 340
	mov	[cur_editor.TopLeft.X],eax
178 heavyiron 341
	call	check_bottom_right
297 mikedld 342
	call	draw_editor
178 heavyiron 343
	jmp	still.skip_write
344
 
345
  .check_main_menu:
346
	cmp	[do_not_draw],0
347
	jne	.capture_off
348
 
349
    @@: mcall	37,2
350
	test	eax,0x01
351
	jz	@f
352
	mcall	5,1
353
	jmp	@b
354
    @@: and	[mst],0xFE
355
 
356
	cmp	[mi_cur],0
357
	jle	.capture_off
358
	mov	ecx,[mi_cur]
359
	mov	eax,[main_menu.popups+ecx*4-4]
360
	mov	edx,main_menu
361
	call	dword[main_menu.onshow+ecx*4-4]
362
	call	setup_main_menu_popup
363
	mcall	51,1,popup_thread_start,POPUP_STACK
364
	mov	[h_popup],eax
365
 
366
  .l_up:
367
  .capture_off:
368
	or	eax,-1
369
	mov	[vscrl_capt],eax
370
	mov	[hscrl_capt],eax
371
	mov	[body_capt],eax
372
	mov	[mouse_captured],0
297 mikedld 373
;!!!        mov     [just_from_popup],0
178 heavyiron 374
	jmp	still.skip_write