Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1037 mario79 1
;**************************************************************
2
; ScrollBar Macro for Kolibri OS
1199 mario79 3
; Copyright (c) 2009, Marat Zakiyanov aka Mario79, aka Mario
1037 mario79 4
; All rights reserved.
5
;
6
; Redistribution and use in source and binary forms, with or without
7
; modification, are permitted provided that the following conditions are met:
1041 mario79 8
;	 * Redistributions of source code must retain the above copyright
9
;	   notice, this list of conditions and the following disclaimer.
10
;	 * Redistributions in binary form must reproduce the above copyright
11
;	   notice, this list of conditions and the following disclaimer in the
12
;	   documentation and/or other materials provided with the distribution.
13
;	 * Neither the name of the  nor the
14
;	   names of its contributors may be used to endorse or promote products
15
;	   derived from this software without specific prior written permission.
1037 mario79 16
;
1199 mario79 17
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY
1037 mario79 18
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
; DISCLAIMED. IN NO EVENT SHALL  BE LIABLE FOR ANY
21
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
;*****************************************************************************
28
macro scroll_bar_exit
29
{
30
popa
31
ret 4
32
}
33
;*****************************************************************************
34
macro draw_up_arrow_vertical
35
{
36
	push  ebx
37
 
38
	xor   eax,eax
39
	mov   ax,sb_size_x
40
	shr   eax,1
41
	shl   eax,16
42
	add   ebx,eax
43
 
44
	xor   eax,eax
45
	mov   ax,sb_btn_high
46
	shr   eax,1
47
	shl   eax,16
48
	add   ecx,eax
49
 
50
	mov   edx,sb_line_col
51
	sub   ebx,4 shl 16
52
	mov   bx,7
53
	mov   cx,1
54
	mov   eax,13
55
	int   0x40
56
	sub   ecx,1 shl 16
57
	add   ebx,1 shl 16
58
	mov   bx,5
59
	int   0x40
60
	sub   ecx,1 shl 16
61
	add   ebx,1 shl 16
62
	mov   bx,3
63
	int   0x40
64
	sub   ecx,1 shl 16
65
	add   ebx,1 shl 16
66
	mov   bx,1
67
	int   0x40
68
	pop   ebx
69
}
70
;*****************************************************************************
71
macro draw_down_arrow_vertical
72
{
73
	push  ebx
74
 
75
	xor   eax,eax
76
	mov   ax,sb_size_x
77
	shr   eax,1
78
	shl   eax,16
79
	add   ebx,eax
80
 
81
	xor   eax,eax
82
	mov   ax,sb_btn_high
83
	shr   eax,1
84
	shl   eax,16
85
	add   ecx,eax
86
 
87
	mov   edx,sb_line_col
88
	sub   ebx,4 shl 16
89
	mov   bx,7
1041 mario79 90
	sub   ecx,2 shl 16
1037 mario79 91
	mov   cx,1
92
	mov   eax,13
93
	int   0x40
94
	add   ecx,1 shl 16
95
	add   ebx,1 shl 16
96
	mov   bx,5
97
	int   0x40
98
	add   ecx,1 shl 16
99
	add   ebx,1 shl 16
100
	mov   bx,3
101
	int   0x40
102
	add   ecx,1 shl 16
103
	add   ebx,1 shl 16
104
	mov   bx,1
105
	int   0x40
106
	pop   ebx
107
}
108
;*****************************************************************************
109
macro draw_runner_center_vertical
110
{
111
	push  ebx
112
	push  ecx
113
 
114
	xor   eax,eax
115
	mov   ax,sb_size_x
116
	shr   eax,1
117
	shl   eax,16
118
	add   ebx,eax
119
 
120
	mov   edx,sb_run_size
121
	shr   edx,1
122
	shl   edx,16
123
	add   ecx,edx
124
	mov   edx,sb_line_col
125
	sub   ecx,8 shl 16
1041 mario79 126
	sub   ebx,5 shl 16
1037 mario79 127
	mov   bx,10
128
	add   ecx,4 shl 16
129
	mov   cx,1
130
	mov   eax,13
131
	int   0x40
132
	add   ecx,3 shl 16
133
	sub   ebx,1 shl 16
134
	mov   bx,12
135
	int   0x40
136
	add   ebx,1 shl 16
137
	mov   bx,10
138
	add   ecx,3 shl 16
139
	int   0x40
140
	pop   ecx
141
	pop   ebx
142
}
143
;*****************************************************************************
144
macro draw_up_arrow_horizontal
145
{
146
	push  ecx
147
 
148
	xor   eax,eax
149
	mov   ax,sb_btn_high
150
	shr   eax,1
151
	shl   eax,16
152
	add   ebx,eax
153
 
154
	xor   eax,eax
155
	mov   ax,sb_size_y
156
	shr   eax,1
157
	shl   eax,16
158
	add   ecx,eax
159
 
160
	mov   edx,sb_line_col
161
	sub   ecx,4 shl 16
162
	mov   cx,7
163
	mov   bx,1
164
 
165
	mov   eax,13
166
	int   0x40
167
	sub   ebx,1 shl 16
168
	add   ecx,1 shl 16
169
	mov   cx,5
170
	int   0x40
171
	sub   ebx,1 shl 16
172
	add   ecx,1 shl 16
173
	mov   cx,3
174
	int   0x40
175
	sub   ebx,1 shl 16
176
	add   ecx,1 shl 16
177
	mov   cx,1
178
	int   0x40
179
	pop   ecx
180
}
181
;*****************************************************************************
182
macro draw_down_arrow_horizontal
183
{
184
	push  ecx
185
 
186
	xor   eax,eax
187
	mov   ax,sb_btn_high
188
	shr   eax,1
189
	shl   eax,16
190
	add   ebx,eax
191
 
192
	xor   eax,eax
193
	mov   ax,sb_size_y
194
	shr   eax,1
195
	shl   eax,16
196
	add   ecx,eax
197
 
198
	mov   edx,sb_line_col
199
	sub   ecx,4 shl 16
200
	mov   cx,7
201
	sub   ebx,2 shl 16
202
	mov   bx,1
203
	mov   eax,13
204
	int   0x40
205
	add   ebx,1 shl 16
206
	add   ecx,1 shl 16
207
	mov   cx,5
208
	int   0x40
209
	add   ebx,1 shl 16
210
	add   ecx,1 shl 16
211
	mov   cx,3
212
	int   0x40
213
	add   ecx,1 shl 16
214
	add   ebx,1 shl 16
215
	mov   cx,1
216
	int   0x40
217
	pop   ecx
218
}
219
;*****************************************************************************
220
macro draw_runner_center_horizontal
221
{
222
	push  ebx
223
	push  ecx
224
 
225
	xor   eax,eax
226
	mov   ax,sb_size_y
227
	shr   eax,1
228
	shl   eax,16
229
	add   ecx,eax
230
 
231
	mov   edx,sb_run_size
232
	shr   edx,1
233
	shl   edx,16
234
	add   ebx,edx
235
	mov   edx,sb_line_col
236
	sub   ebx,8 shl 16
237
	sub   ecx,5 shl 16
238
	mov   cx,10
239
	add   ebx,4 shl 16
240
	mov   bx,1
241
	mov   eax,13
242
	int   0x40
243
	add   ebx,3 shl 16
244
	sub   ecx,1 shl 16
245
	mov   cx,12
246
	int   0x40
247
	add   ecx,1 shl 16
248
	mov   cx,10
249
	add   ebx,3 shl 16
250
	int   0x40
251
	pop   ecx
252
	pop   ebx
253
}
254
;*****************************************************************************
255
macro use_scroll_bar
256
{
257
scroll_bar:
1041 mario79 258
sb_size_x		equ [edi]
259
sb_start_x		equ [edi+2]
260
sb_size_y		equ [edi+4]
261
sb_start_y		equ [edi+6]
262
sb_btn_high		equ [edi+8]
263
sb_type			equ [edi+12]
264
sb_max_area		equ [edi+16]
265
sb_cur_area		equ [edi+20]
266
sb_position		equ [edi+24]
267
sb_bckg_col		equ [edi+28]
268
sb_frnt_col		equ [edi+32]
269
sb_line_col		equ [edi+36]
270
sb_redraw		equ [edi+40]
271
sb_delta		equ [edi+44]
272
sb_delta2		equ [edi+46]
273
sb_r_size_x		equ [edi+48]
274
sb_r_start_x	equ [edi+50]
275
sb_r_size_y		equ [edi+52]
276
sb_r_start_y	equ [edi+54]
277
sb_m_pos		equ [edi+56]
278
sb_m_pos_2		equ [edi+60]
279
sb_m_keys		equ [edi+64]
280
sb_run_size		equ [edi+68]
281
sb_position2	equ [edi+72]
282
sb_work_size	equ [edi+76]
283
sb_all_redraw	equ [edi+80]
284
sb_ar_offset	equ [edi+84]
1037 mario79 285
}
286
;*****************************************************************************
287
;*****************************************************************************
288
; draw event
289
;*****************************************************************************
290
;*****************************************************************************
291
macro use_scroll_bar_vertical
292
{
293
scroll_bar_vertical:
294
.draw:
295
	pusha
296
	mov   edi,dword [esp+36]
1041 mario79 297
	mov   sb_delta,word 0
1037 mario79 298
	call  .draw_1
299
	mov   sb_all_redraw,dword 0
300
scroll_bar_exit
301
.draw_1:
302
	pusha
303
;*********************************
304
	xor   eax,eax
305
	mov   ax,sb_size_y
306
	mov   edx,sb_btn_high
307
	shl   edx,1
308
	sub   eax,edx
309
	mov   sb_work_size,eax
310
;*********************************
1199 mario79 311
	mov   eax,sb_work_size
1037 mario79 312
	mov   ebx,sb_max_area
313
	cmp   ebx,sb_cur_area
1041 mario79 314
	ja	@f
1037 mario79 315
 
316
	jmp   .no_size
317
 
318
@@:
319
	imul  eax,sb_cur_area
320
	xor   edx,edx
321
	div   ebx
322
	cmp   eax,10
323
	jae   @f
324
	mov   eax,10
325
@@:
326
.no_size:
327
	mov   sb_run_size,eax
328
;*********************************
329
	cmp   sb_delta,word 1
1041 mario79 330
	je	.@@_3
1037 mario79 331
	mov   eax,sb_work_size
332
	sub   eax,sb_run_size
333
	mov   ebx,sb_max_area
334
	cmp   ebx,sb_cur_area
1041 mario79 335
	ja	@f
1037 mario79 336
	xor   eax,eax
337
	jmp   .@@_1
338
@@:
339
	sub   ebx,sb_cur_area
340
	imul  eax,sb_position
341
	xor   edx,edx
342
	div   ebx
343
.@@_1:
344
	mov   sb_position2,eax
345
	xor   edx,edx
346
	mov   dx,sb_size_y
347
	sub   edx,sb_btn_high
348
	sub   edx,sb_btn_high
349
	sub   edx,sb_run_size
350
	cmp   sb_position2,edx
351
	jbe   .@@_3
352
	mov   sb_position2,edx
353
.@@_3:
354
;*********************************
355
	mov   ebx,sb_start_x
356
	shl   ebx,16
357
	inc   ebx
358
	mov   ecx,sb_size_y
359
	mov   edx,sb_line_col
360
	mov   eax,13
361
	cmp  sb_all_redraw,dword 0
362
	je   @f
363
	int   0x40   ; left extreme line
364
@@:
365
	push  ebx
366
	ror   ebx,16
367
	add   bx,sb_size_x
368
	rol   ebx,16
369
	cmp  sb_all_redraw,dword 0
370
	je   @f
371
	int   0x40   ; right extreme line
372
@@:
373
	pop   ebx
374
 
375
	push  ecx
376
 
377
	add   ebx,1 shl 16
378
	mov   bx,sb_size_x
379
	dec   ebx
380
	mov   cx,1
381
	cmp  sb_all_redraw,dword 0
382
	je   @f
383
	int   0x40   ; top button - extreme line
384
@@:
385
	push  ecx
386
	add   ecx,1 shl 16
387
	add   ecx,sb_btn_high
388
	sub   ecx,2
389
	mov   edx,sb_frnt_col
390
	cmp  sb_all_redraw,dword 0
391
	je   @f
392
	int   0x40   ; top button filling
393
;*********************************
394
draw_up_arrow_vertical
395
;*********************************
396
@@:
397
	pop   ecx
398
 
399
	ror   ecx,16
400
	add   ecx,sb_btn_high  ;14 shl 16
401
	rol   ecx,16
402
	mov   edx,sb_line_col
403
	cmp  sb_all_redraw,dword 0
404
	je   @f
405
	int   0x40   ;  top button - bottom line
406
@@:
407
	pop   ecx
408
;*********************************
409
	ror   ecx,16
410
	add   ecx,sb_btn_high  ;15 shl 16
411
	inc   ecx
412
	rol   ecx,16
413
	sub   ecx,sb_btn_high  ;30
414
	sub   ecx,sb_btn_high
415
	push  ecx
416
	mov   cx,0
417
	add   ecx,sb_position2
418
	dec   cx
419
	mov   eax,13
420
	test  cx,0x8000
421
	jnz   @f
422
	mov   edx,sb_bckg_col
1041 mario79 423
	int   0x40	; top interval
1037 mario79 424
@@:
425
;*********************************
426
	shr   ecx,16
427
	add   ecx,sb_position2
428
	dec   ecx
429
	shl   ecx,16
430
	inc   ecx
431
	mov   edx,sb_line_col
1041 mario79 432
	int   0x40	; runner - top extreme line
1037 mario79 433
 
434
	add   ecx,1 shl 16
435
	mov   cx,0
436
	add   ecx,sb_run_size
437
	mov   sb_r_size_x,ebx
438
	mov   sb_r_size_y,ecx
439
	sub   ecx,2
440
	mov   edx,sb_frnt_col
441
	int   0x40   ; runner filling
442
;*********************************
443
draw_runner_center_vertical
444
;*********************************
445
	shr   ecx,16
446
	add   ecx,sb_run_size
447
	sub   ecx,2
448
	shl   ecx,16
449
	inc   ecx
450
	mov   edx,sb_line_col
451
	int   0x40   ; runner - bottom extreme line
452
 
453
	add   ecx,1 shl 16
454
	mov   cx,sb_start_y
455
	add   cx,sb_size_y
456
	sub   ecx,sb_btn_high
457
	dec   ecx
458
	mov   eax,ecx
459
	shr   eax,16
460
	sub   cx,ax
461
	test  cx,0x8000
462
	jnz	  @f
463
	mov   edx,sb_bckg_col
464
	mov   eax,13
465
	int   0x40   ; bottom interval
466
@@:
467
	pop   ecx
468
;*********************************
469
	mov   ax,cx
470
	shr   ecx,16
471
	add   cx,ax
472
	sub   ecx,2
473
	shl   ecx,16
474
	inc   ecx
475
	mov   edx,sb_line_col
476
	mov   eax,13
477
	cmp  sb_all_redraw,dword 0
478
	je   @f
479
	int   0x40   ; bottom button - top line
480
@@:
481
	push  ecx
482
	add   ecx,1 shl 16
483
	add   cx,sb_btn_high
484
	sub   ecx,2
485
	mov   edx,sb_frnt_col
486
	cmp  sb_all_redraw,dword 0
487
	je   @f
488
	int   0x40   ; bottom button filling
489
;*********************************
490
draw_down_arrow_vertical
491
;*********************************
492
@@:
493
	pop   ecx
494
 
495
	ror   ecx,16
1199 mario79 496
	add   ecx,sb_btn_high
1037 mario79 497
	rol   ecx,16
498
 
499
	mov   edx,sb_line_col
500
	mov   cx,1
501
	cmp  sb_all_redraw,dword 0
502
	je   @f
503
	int   0x40   ; bottom button - extreme line
504
@@:
505
	popa
506
	ret
507
;*****************************************************************************
508
;*****************************************************************************
509
; mouse event
510
;*****************************************************************************
511
;*****************************************************************************
512
.mouse:
513
	pusha
1041 mario79 514
	mov	 edi,dword [esp+36]
1037 mario79 515
	mcall 37,1
516
	mov   sb_m_pos,eax
517
	cmp   sb_m_pos_2,dword 0
518
	jne   @f
519
 
1041 mario79 520
	mov   sb_m_pos_2,eax
1037 mario79 521
@@:
522
	mcall 37,2
1041 mario79 523
	mov   sb_m_keys,eax
1037 mario79 524
 
525
	cmp   sb_m_keys,eax
526
	je	  @f
527
 
528
	mov   sb_m_keys,eax
529
 
530
	mov   sb_delta,dword 0
531
 
532
	mov   eax,sb_m_pos
533
	mov   sb_m_pos_2,eax
534
	jmp   .continue_2
535
 
536
@@:
537
	cmp   sb_m_keys,dword 0
1199 mario79 538
	jne	 @f
1037 mario79 539
	mov   eax,sb_m_pos
540
	mov   sb_m_pos_2,eax
1041 mario79 541
	jmp   .correct_1	;.exit_sb
1037 mario79 542
@@:
543
	mov   sb_delta,word 1
544
 
545
.continue_2:
546
	mov   eax,sb_m_pos
547
	test  eax,0x80000000
548
	jnz   .exit_sb
549
 
550
	test  eax,0x8000
551
	jnz   .exit_sb
552
 
553
	mov   ebx,eax
554
	shr   ebx,16   ; x position
555
	shl   eax,16
556
	shr   eax,16   ; y position
557
 
558
	mov   cx,sb_start_y
559
	cmp   ax,cx
1041 mario79 560
	jb	.exit_sb
1037 mario79 561
 
562
	cmp   sb_delta2,word 0
1041 mario79 563
	je	@f
1037 mario79 564
	push  ecx
565
	add   cx,sb_btn_high
566
	cmp   ax,cx
567
	pop   ecx
1041 mario79 568
	jb	.exit_sb
1037 mario79 569
 
570
@@:
571
	add   cx,sb_size_y
572
	cmp   ax,cx
1041 mario79 573
	ja	.exit_sb
1037 mario79 574
 
575
	cmp   sb_delta2,word 0
1041 mario79 576
	je	@f
1037 mario79 577
	sub   cx,sb_btn_high
578
	cmp   ax,cx
1041 mario79 579
	ja	.exit_sb
1037 mario79 580
 
581
@@:
582
	cmp   sb_delta2,word 1
1041 mario79 583
	je	@f
1037 mario79 584
 
585
	cmp   sb_m_keys,dword 0
1041 mario79 586
	je	.exit_sb
587
 
1037 mario79 588
	mov   cx,sb_start_x
589
	cmp   bx,cx
1041 mario79 590
	jb	.exit_sb
1037 mario79 591
 
592
	add   cx,sb_size_x
593
	cmp   bx,cx
1041 mario79 594
	ja	.exit_sb
1037 mario79 595
 
596
	mov   cx,sb_r_start_y
597
	cmp   ax,cx
1041 mario79 598
	jb	.no_runner
1037 mario79 599
 
600
	add   cx,sb_r_size_y
601
	cmp   ax,cx
1041 mario79 602
	ja	.no_runner
1037 mario79 603
 
604
	mov   sb_delta2,word 1
605
@@:
606
	push  eax
607
	mov   ax,sb_m_pos
608
	cmp   ax,sb_m_pos_2
1199 mario79 609
	je	.correct
1037 mario79 610
 
611
	shl   eax,16
612
	shr   eax,16
613
	mov   ebx,sb_m_pos_2
614
	shl   ebx,16
615
	shr   ebx,16
616
	cmp   eax,ebx
617
	jb   .sub
618
 
619
	sub   eax,ebx
620
	mov   ebx,eax
621
	add   sb_position2,ebx
622
	xor   eax,eax
623
	mov   ax,sb_size_y
624
	sub   eax,sb_btn_high
625
	sub   eax,sb_btn_high
626
	sub   eax,sb_run_size
627
	cmp   sb_position2,eax
628
	jbe   @f
629
 
630
	mov   sb_position2,eax
631
@@:
632
	mov   eax,sb_m_pos
633
	mov   sb_m_pos_2,eax
634
	pop   eax
635
	call  .draw_1
636
	jmp   .no_runner_1
637
 
638
.correct:
639
	pop   eax
640
	jmp   .exit_sb
641
.correct_1:
642
	mov   sb_delta,dword 0
643
	jmp   .exit_sb
644
 
645
.sub:
646
	sub   ebx,eax
647
	sub   sb_position2,ebx
648
	test  sb_position2,dword 0x80000000
649
	jz	  @f
650
 
651
	mov   sb_position2,dword 0
652
@@:
653
	mov   eax,sb_m_pos
654
	mov   sb_m_pos_2,eax
655
	pop   eax
656
	call  .draw_1
657
	jmp   .no_runner_1
658
 
659
;*****************************************************************************
660
.no_runner:
661
	mov   sb_delta,dword 0
662
.no_runner_1:
663
	xor   ecx,ecx
664
	mov   cx,sb_start_y
665
	add   cx,sb_btn_high   ;15
666
	cmp   sb_delta,word 1
1041 mario79 667
	je	.scroll_sb
1037 mario79 668
 
669
	cmp   ax,cx
1041 mario79 670
	ja	.scroll_sb
1037 mario79 671
 
672
	cmp   sb_m_keys,dword 0
673
	je   .exit_sb
674
 
1041 mario79 675
	mov   eax,sb_ar_offset
676
	cmp   sb_position,eax  ;dword 0
677
	jbe   @f
1037 mario79 678
 
1041 mario79 679
	sub   sb_position,eax
1037 mario79 680
	jmp   .all_sb
681
@@:
1041 mario79 682
	xor   eax,eax
683
	mov   sb_position,eax ;dword 0
684
	mov   sb_position2,eax ;dword 0
1037 mario79 685
	jmp   .all_sb
686
;*****************************************************************************
687
.scroll_sb:
688
	add   cx,sb_size_y
689
	sub   cx,sb_btn_high
690
	sub   cx,sb_btn_high
691
	cmp   sb_delta,word 1
1041 mario79 692
	je	@f
1037 mario79 693
 
694
	cmp   ax,cx
1041 mario79 695
	ja	.down_sb
1037 mario79 696
 
697
@@:
698
	mov   ebx,sb_btn_high   ;16  ;15
699
	add   bx,sb_start_y
700
	sub   cx,bx
701
	sub   ax,bx
702
 
703
.scroll_sb_1:
704
	mov   ebx,sb_run_size
705
;*****************************************************************************
706
	cmp   sb_delta,word 1
1041 mario79 707
	je	.continue
1037 mario79 708
 
709
@@:
710
	mov   edx,eax
711
	push  ebx
712
	shr   ebx,1
713
	sub   edx,ebx
714
	pop   ebx
715
	mov   sb_position2,edx
716
	test  sb_position2,dword 0x80000000
717
	jz	 .test_1
718
 
719
	mov   sb_position2,dword 0
720
	jmp   .continue
721
 
722
.test_1:
723
	xor   edx,edx
724
	mov   dx,sb_size_y
725
	sub   edx,sb_btn_high
726
	sub   edx,sb_btn_high
727
	sub   edx,sb_run_size
728
	cmp   sb_position2,edx
729
	jbe   .continue
730
 
731
	mov   sb_position2,edx
1199 mario79 732
 
1037 mario79 733
.continue:
734
	mov   eax,sb_position2
735
	sub   ecx,ebx
736
.continue_1:
737
;*****************************************************************************
738
	mov   ebx,eax
739
 
740
	mov   eax,sb_max_area
741
	cmp   eax,sb_cur_area
1041 mario79 742
	ja	@f
1037 mario79 743
 
744
	xor   eax,eax
745
	inc   eax
746
	mov   sb_position2,eax
1199 mario79 747
	jmp   .all_sb
1037 mario79 748
@@:
749
	sub   eax,sb_cur_area
750
	inc   eax
751
	shl   eax,10
752
	xor   edx,edx
753
	div   ecx
754
	shl   edx,1
755
	cmp   edx,ecx
1041 mario79 756
	jb	@f
1037 mario79 757
 
758
	inc   eax
759
 
760
@@:
761
	imul  eax,ebx
762
	shr   eax,10
763
 
764
	cmp   sb_position,eax
1041 mario79 765
	je	.exit_sb
1037 mario79 766
 
767
	cmp   eax,0
1041 mario79 768
	ja	@f
1037 mario79 769
 
770
	xor   eax,eax
771
 
772
@@:
773
.store_position:
774
	mov   sb_position,eax
775
.all_sb:
776
	mov   sb_redraw,dword 1
777
	call  .draw_1
778
	mov   eax,sb_m_pos
779
	mov   sb_m_pos_2,eax
780
	jmp   .exit_sb
781
;*****************************************************************************
782
.down_sb:
783
	cmp   sb_m_keys,dword 0
784
	je   .exit_sb
785
 
786
	mov   eax,sb_max_area
1041 mario79 787
	mov   ebx,sb_ar_offset
1037 mario79 788
	sub   eax,sb_cur_area
1041 mario79 789
	push  eax
790
	sub   eax,ebx
1037 mario79 791
	cmp   sb_position,eax
1041 mario79 792
	pop   eax
1037 mario79 793
	jae   @f
794
 
1041 mario79 795
	add   sb_position,ebx
1037 mario79 796
	jmp   .all_sb
797
@@:
1041 mario79 798
	mov   sb_position,eax
1037 mario79 799
	xor   eax,eax
800
	mov   ax,sb_size_y
801
	sub   eax,sb_btn_high
802
	sub   eax,sb_btn_high
803
	sub   eax,sb_run_size
804
	mov   sb_position2,eax
805
	jmp   .all_sb
1041 mario79 806
.exit_sb:
1037 mario79 807
scroll_bar_exit
808
}
809
 
810
;*****************************************************************************
811
;*****************************************************************************
812
;*****************************************************************************
813
;*****************************************************************************
814
;*****************************************************************************
815
macro use_scroll_bar_horizontal
816
{
817
scroll_bar_horizontal:
818
.draw:
819
	pusha
820
	mov   edi,dword [esp+36]
1041 mario79 821
	mov   sb_delta,word 0
1037 mario79 822
	call  .draw_1
823
	mov   sb_all_redraw,dword 0
824
scroll_bar_exit
825
.draw_1:
826
	pusha
827
;*********************************
828
	xor   eax,eax
829
	mov   ax,sb_size_x	;sb_size_y
830
	mov   edx,sb_btn_high
831
	shl   edx,1
832
	sub   eax,edx
833
	mov   sb_work_size,eax
834
;*********************************
835
	mov   eax,sb_work_size   ;sb_max_area
836
	mov   ebx,sb_max_area
837
	cmp   ebx,sb_cur_area
1041 mario79 838
	ja	@f
1037 mario79 839
 
840
	jmp   .no_size
841
 
842
@@:
843
	imul  eax,sb_cur_area
844
	xor   edx,edx
845
	div   ebx
846
	cmp   eax,10
847
	jae   @f
848
	mov   eax,10
849
@@:
850
.no_size:
851
	mov   sb_run_size,eax
852
;*********************************
853
	cmp   sb_delta,word 1
1041 mario79 854
	je	.@@_3
1037 mario79 855
	mov   eax,sb_work_size
856
	sub   eax,sb_run_size
857
	mov   ebx,sb_max_area
858
	cmp   ebx,sb_cur_area
1041 mario79 859
	ja	@f
1037 mario79 860
	xor   eax,eax
861
	jmp   .@@_1
862
@@:
863
	sub   ebx,sb_cur_area
864
	imul  eax,sb_position
865
	xor   edx,edx
866
	div   ebx
867
.@@_1:
868
	mov   sb_position2,eax
869
	xor   edx,edx
870
	mov   dx,sb_size_x
871
	sub   edx,sb_btn_high
872
	sub   edx,sb_btn_high
873
	sub   edx,sb_run_size
874
	cmp   sb_position2,edx
875
	jbe   .@@_3
876
	mov   sb_position2,edx
877
.@@_3:
878
;*********************************
879
	mov   ebx,sb_size_x
880
	mov   ecx,sb_start_y
881
	shl   ecx,16
882
	inc   ecx
883
	mov   edx,sb_line_col
884
	mov   eax,13
885
	cmp  sb_all_redraw,dword 0
886
	je   @f
887
	int   0x40   ; top extreme line
888
@@:
889
	push  ecx
890
	ror   ecx,16
891
	add   cx,sb_size_y
892
	rol   ecx,16
893
	cmp  sb_all_redraw,dword 0
894
	je   @f
895
	int   0x40   ; bottom extreme line
896
@@:
897
	pop   ecx
898
 
899
	push  ebx
900
 
901
	add   ecx,1 shl 16
902
	mov   cx,sb_size_y
903
	dec   ecx
904
	mov   bx,1
905
	cmp  sb_all_redraw,dword 0
906
	je   @f
907
	int   0x40   ; left button - extreme line
908
@@:
909
	push  ebx
910
	add   ebx,1 shl 16
911
	add   ebx,sb_btn_high
912
	sub   ebx,2
913
	mov   edx,sb_frnt_col
914
	cmp  sb_all_redraw,dword 0
915
	je   @f
916
	int   0x40   ; left  button filling
917
;*********************************
918
draw_up_arrow_horizontal
919
;*********************************
920
@@:
921
	pop   ebx
922
 
923
	ror   ebx,16
924
	add   ebx,sb_btn_high  ;14 shl 16
925
	rol   ebx,16
926
	mov   edx,sb_line_col
927
	cmp  sb_all_redraw,dword 0
928
	je   @f
929
	int   0x40   ;  left  button - right line
930
@@:
931
	pop   ebx
932
;*********************************
933
	ror   ebx,16
934
	add   ebx,sb_btn_high  ;15 shl 16
935
	  inc   ebx
936
	rol   ebx,16
937
	sub   ebx,sb_btn_high  ;30
938
	sub   ebx,sb_btn_high
939
	push  ebx
940
	mov   bx,0
941
	add   ebx,sb_position2
942
	  dec   bx
943
	mov   eax,13
944
	test  bx,0x8000
945
	jnz   @f
946
	mov   edx,sb_bckg_col
1041 mario79 947
	int   0x40	; left interval
1037 mario79 948
@@:
949
;*********************************
950
	shr   ebx,16
951
	add   ebx,sb_position2
952
	dec   ebx
953
	shl   ebx,16
954
	inc   ebx
955
	mov   edx,sb_line_col
1041 mario79 956
	int   0x40	; runner - left extreme line
1037 mario79 957
 
958
	add   ebx,1 shl 16
959
	mov   bx,0
960
	add   ebx,sb_run_size
961
	mov   sb_r_size_x,ebx
962
	mov   sb_r_size_y,ecx
963
	sub   ebx,2
964
	mov   edx,sb_frnt_col
965
	int   0x40   ; runner filling
966
;*********************************
967
draw_runner_center_horizontal
968
;*********************************
969
	shr   ebx,16
970
	add   ebx,sb_run_size
971
	sub   ebx,2
972
	shl   ebx,16
973
	inc   ebx
974
	mov   edx,sb_line_col
975
	int   0x40   ; runner - bottom extreme line
976
 
977
	add   ebx,1 shl 16
978
	mov   bx,sb_start_x
979
	add   bx,sb_size_x
980
	sub   ebx,sb_btn_high
981
	dec   ebx
982
	mov   eax,ebx
983
	shr   eax,16
984
	sub   bx,ax
985
	test  bx,0x8000
986
	jnz   @f
987
	mov   edx,sb_bckg_col
988
	mov   eax,13
989
	int   0x40   ; bottom interval
990
@@:
991
	pop   ebx
992
;*********************************
993
	mov   ax,bx
994
	shr   ebx,16
995
	add   bx,ax
996
	sub   ebx,2
997
	shl   ebx,16
998
	inc   ebx
999
	mov   edx,sb_line_col
1000
	mov   eax,13
1001
	cmp  sb_all_redraw,dword 0
1002
	je   @f
1041 mario79 1003
	int   0x40	; bottom button - top line
1037 mario79 1004
@@:
1005
	push  ebx
1006
	add   ebx,1 shl 16
1007
	add   bx,sb_btn_high
1008
	sub   ebx,2
1009
	mov   edx,sb_frnt_col
1010
	cmp  sb_all_redraw,dword 0
1011
	je   @f
1012
	int   0x40   ; bottom button filling
1013
;*********************************
1014
draw_down_arrow_horizontal
1015
;*********************************
1016
@@:
1017
	pop   ebx
1018
 
1019
	ror   ebx,16
1020
	add   ebx,sb_btn_high  ;14 shl 16
1021
	rol   ebx,16
1022
 
1023
	mov   edx,sb_line_col
1024
	mov   bx,1
1025
	cmp  sb_all_redraw,dword 0
1026
	je   @f
1027
	int   0x40   ; bottom button - extreme line
1028
@@:
1029
	popa
1030
	ret
1031
;*****************************************************************************
1032
; mouse event
1033
;*****************************************************************************
1034
.mouse:
1035
	pusha
1041 mario79 1036
	mov	 edi,dword [esp+36]
1037 mario79 1037
	mcall 37,1
1038
	mov   sb_m_pos,eax
1039
	cmp   sb_m_pos_2,dword 0
1040
	jne   @f
1041
 
1041 mario79 1042
	mov   sb_m_pos_2,eax
1037 mario79 1043
@@:
1044
	mcall 37,2
1041 mario79 1045
	mov   sb_m_keys,eax
1037 mario79 1046
 
1047
	cmp   sb_m_keys,eax
1048
	je	  @f
1049
 
1050
	mov   sb_m_keys,eax
1051
 
1052
	mov   sb_delta,dword 0
1053
 
1054
	mov   eax,sb_m_pos
1055
	mov   sb_m_pos_2,eax
1056
	jmp   .continue_2
1057
 
1058
@@:
1059
	cmp   sb_m_keys,dword 0
1199 mario79 1060
	jne	 @f
1037 mario79 1061
	mov   eax,sb_m_pos
1062
	mov   sb_m_pos_2,eax
1041 mario79 1063
	jmp   .correct_1	;.exit_sb
1037 mario79 1064
@@:
1065
	mov   sb_delta,word 1
1066
 
1067
.continue_2:
1068
	mov   eax,sb_m_pos
1069
	test  eax,0x80000000
1070
	jnz   .exit_sb
1071
 
1072
	test  eax,0x8000
1073
	jnz   .exit_sb
1074
 
1075
	mov   ebx,eax
1076
	shr   eax,16   ; x position
1077
	shl   ebx,16
1078
	shr   ebx,16   ; y position
1079
 
1080
	mov   cx,sb_start_x   ;y
1081
	cmp   ax,cx
1041 mario79 1082
	jb	.exit_sb
1037 mario79 1083
 
1084
	cmp   sb_delta2,word 0
1041 mario79 1085
	je	@f
1037 mario79 1086
	push  ecx
1087
	add   cx,sb_btn_high
1088
	cmp   ax,cx
1089
	pop   ecx
1041 mario79 1090
	jb	.exit_sb
1037 mario79 1091
 
1092
@@:
1041 mario79 1093
	add   cx,sb_size_x	;y
1037 mario79 1094
	cmp   ax,cx
1041 mario79 1095
	ja	.exit_sb
1037 mario79 1096
 
1097
	cmp   sb_delta2,word 0
1041 mario79 1098
	je	@f
1037 mario79 1099
	sub   cx,sb_btn_high
1100
	cmp   ax,cx
1041 mario79 1101
	ja	.exit_sb
1037 mario79 1102
 
1103
@@:
1104
	cmp   sb_delta2,word 1
1041 mario79 1105
	je	@f
1037 mario79 1106
 
1107
	cmp   sb_m_keys,dword 0
1041 mario79 1108
	je	.exit_sb
1109
 
1037 mario79 1110
	mov   cx,sb_start_y   ;x
1111
	cmp   bx,cx
1041 mario79 1112
	jb	.exit_sb
1037 mario79 1113
 
1041 mario79 1114
	add   cx,sb_size_y	;x
1037 mario79 1115
	cmp   bx,cx
1041 mario79 1116
	ja	.exit_sb
1037 mario79 1117
 
1118
	mov   cx,sb_r_start_x
1119
	cmp   ax,cx
1041 mario79 1120
	jb	.no_runner
1037 mario79 1121
 
1122
	add   cx,sb_r_size_x
1123
	cmp   ax,cx
1041 mario79 1124
	ja	.no_runner
1037 mario79 1125
 
1126
	mov   sb_delta2,word 1
1127
@@:
1128
	push  eax
1129
	mov   eax,sb_m_pos
1130
	mov   ebx,sb_m_pos_2
1131
	shr   eax,16
1132
	shr   ebx,16
1133
	cmp   eax,ebx
1199 mario79 1134
	je	.correct
1037 mario79 1135
 
1136
;	shl   eax,16
1137
;	shr   eax,16
1138
;	mov   ebx,sb_m_pos_2
1139
;	shl   ebx,16
1140
;	shr   ebx,16
1141
;	cmp   eax,ebx
1142
	jb   .sub
1143
 
1144
	sub   eax,ebx
1145
	mov   ebx,eax
1146
	add   sb_position2,ebx
1147
	xor   eax,eax
1041 mario79 1148
	mov   ax,sb_size_x	;y
1037 mario79 1149
	sub   eax,sb_btn_high
1150
	sub   eax,sb_btn_high
1151
	sub   eax,sb_run_size
1152
	cmp   sb_position2,eax
1153
	jbe   @f
1154
 
1155
	mov   sb_position2,eax
1156
@@:
1157
	mov   eax,sb_m_pos
1158
	mov   sb_m_pos_2,eax
1159
	pop   eax
1160
	call  .draw_1
1161
	jmp   .no_runner_1
1162
 
1163
.correct:
1164
	pop   eax
1165
	jmp   .exit_sb
1166
.correct_1:
1167
	mov   sb_delta,dword 0
1168
	jmp   .exit_sb
1169
 
1170
.sub:
1171
	sub   ebx,eax
1172
	sub   sb_position2,ebx
1173
	test  sb_position2,dword 0x80000000
1174
	jz	  @f
1175
 
1176
	mov   sb_position2,dword 0
1177
@@:
1178
	mov   eax,sb_m_pos
1179
	mov   sb_m_pos_2,eax
1180
	pop   eax
1181
	call  .draw_1
1182
	jmp   .no_runner_1
1183
 
1184
;*****************************************************************************
1185
.no_runner:
1186
	mov   sb_delta,dword 0
1187
.no_runner_1:
1188
	xor   ecx,ecx
1189
	mov   cx,sb_start_x   ;y
1190
	add   cx,sb_btn_high   ;15
1191
	cmp   sb_delta,word 1
1041 mario79 1192
	je	.scroll_sb
1037 mario79 1193
 
1194
	cmp   ax,cx
1041 mario79 1195
	ja	.scroll_sb
1037 mario79 1196
 
1197
	cmp   sb_m_keys,dword 0
1198
	je   .exit_sb
1199
 
1041 mario79 1200
	mov   eax,sb_ar_offset
1201
	cmp   sb_position,eax  ;dword 0
1202
	jbe   @f
1037 mario79 1203
 
1041 mario79 1204
	sub   sb_position,eax
1037 mario79 1205
	jmp   .all_sb
1206
@@:
1041 mario79 1207
	xor   eax,eax
1208
	mov   sb_position,eax ;dword 0
1209
	mov   sb_position2,eax  ;dword 0
1037 mario79 1210
	jmp   .all_sb
1211
;*****************************************************************************
1212
.scroll_sb:
1213
	add   cx,sb_size_x	;y
1214
	sub   cx,sb_btn_high
1215
	sub   cx,sb_btn_high
1216
	cmp   sb_delta,word 1
1041 mario79 1217
	je	@f
1037 mario79 1218
 
1219
	cmp   ax,cx
1041 mario79 1220
	ja	.down_sb
1037 mario79 1221
 
1222
@@:
1223
	mov   ebx,sb_btn_high   ;16  ;15
1224
	add   bx,sb_start_x	;y
1225
	sub   cx,bx
1226
	sub   ax,bx
1227
 
1228
.scroll_sb_1:
1229
	mov   ebx,sb_run_size
1230
;*****************************************************************************
1231
	cmp   sb_delta,word 1
1041 mario79 1232
	je	.continue
1037 mario79 1233
 
1234
@@:
1235
	mov   edx,eax
1199 mario79 1236
 
1037 mario79 1237
	push  ebx
1238
	shr   ebx,1
1239
	sub   edx,ebx
1240
	pop   ebx
1241
	mov   sb_position2,edx
1242
	test  sb_position2,dword 0x80000000
1243
	jz	 .test_1
1244
 
1245
	mov   sb_position2,dword 0
1246
	jmp   .continue
1247
 
1248
.test_1:
1249
	xor   edx,edx
1250
	mov   dx,sb_size_x	 ;y
1251
	sub   edx,sb_btn_high
1252
	sub   edx,sb_btn_high
1253
	sub   edx,sb_run_size
1254
	cmp   sb_position2,edx
1255
	jbe   .continue
1256
 
1257
	mov   sb_position2,edx
1199 mario79 1258
 
1037 mario79 1259
.continue:
1260
	mov   eax,sb_position2
1261
	sub   ecx,ebx
1262
.continue_1:
1263
;*****************************************************************************
1264
	mov   ebx,eax
1265
 
1266
	mov   eax,sb_max_area
1267
	cmp   eax,sb_cur_area
1041 mario79 1268
	ja	@f
1037 mario79 1269
 
1270
	xor   eax,eax
1271
	inc   eax
1272
	mov   sb_position2,eax
1199 mario79 1273
	jmp   .all_sb
1037 mario79 1274
@@:
1275
	sub   eax,sb_cur_area
1276
	inc   eax
1277
	shl   eax,10
1278
	xor   edx,edx
1279
	div   ecx
1280
	shl   edx,1
1281
	cmp   edx,ecx
1041 mario79 1282
	jb	@f
1037 mario79 1283
 
1284
	inc   eax
1285
 
1286
@@:
1287
	imul  eax,ebx
1288
	shr   eax,10
1289
 
1290
	cmp   sb_position,eax
1041 mario79 1291
	je	.exit_sb
1037 mario79 1292
 
1293
	cmp   eax,0
1041 mario79 1294
	ja	@f
1037 mario79 1295
 
1296
	xor   eax,eax
1297
 
1298
@@:
1299
.store_position:
1300
	mov   sb_position,eax
1301
.all_sb:
1302
	mov   sb_redraw,dword 1
1303
	call  .draw_1
1304
	mov   eax,sb_m_pos
1305
	mov   sb_m_pos_2,eax
1306
	jmp   .exit_sb
1307
;*****************************************************************************
1308
.down_sb:
1309
	cmp   sb_m_keys,dword 0
1310
	je   .exit_sb
1311
 
1312
	mov   eax,sb_max_area
1041 mario79 1313
	mov   ebx,sb_ar_offset
1037 mario79 1314
	sub   eax,sb_cur_area
1041 mario79 1315
	push  eax
1316
	sub   eax,ebx
1037 mario79 1317
	cmp   sb_position,eax
1041 mario79 1318
	pop   eax
1037 mario79 1319
	jae   @f
1320
 
1041 mario79 1321
	add   sb_position,ebx
1037 mario79 1322
	jmp   .all_sb
1323
@@:
1041 mario79 1324
	mov   sb_position,eax
1037 mario79 1325
	xor   eax,eax
1326
	mov   ax,sb_size_x
1327
	sub   eax,sb_btn_high
1328
	sub   eax,sb_btn_high
1329
	sub   eax,sb_run_size
1330
	mov   sb_position2,eax
1331
	jmp   .all_sb
1332
.exit_sb:
1333
scroll_bar_exit
1334
}