Subversion Repositories Kolibri OS

Rev

Rev 1666 | Go to most recent revision | Details | Compare with Previous | 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
;*********************************
1666 mario79 329
	cmp   word sb_delta,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
1666 mario79 361
	cmp  dword sb_all_redraw,0
1037 mario79 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
1666 mario79 369
	cmp  dword sb_all_redraw,0
1037 mario79 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
1666 mario79 381
	cmp  dword sb_all_redraw,0
1037 mario79 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
1666 mario79 390
	cmp  dword sb_all_redraw,0
1037 mario79 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
1666 mario79 403
	cmp  dword sb_all_redraw,0
1037 mario79 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
;*********************************
2317 IgorA 445
	cmp word sb_type,1
446
	jne @f
447
		push eax ebx ecx edx
448
		movzx eax,word sb_start_x
449
		xor ebx,ebx
450
		add bx,sb_r_start_y
451
		dec ebx
452
		movzx ecx,word sb_size_x
453
		mov edx,sb_run_size
454
		dec edx
455
		;à¨á®¢ ­¨¥ á⨫쭮© à ¬ª¨ ­  ¯®«§ã­ª¥
456
		stdcall draw_edge, eax,ebx,ecx,edx, sb_bckg_col, sb_frnt_col, sb_line_col
457
		pop edx ecx ebx eax
458
	@@:
1037 mario79 459
	shr   ecx,16
460
	add   ecx,sb_run_size
461
	sub   ecx,2
462
	shl   ecx,16
463
	inc   ecx
464
	mov   edx,sb_line_col
465
	int   0x40   ; runner - bottom extreme line
466
 
467
	add   ecx,1 shl 16
468
	mov   cx,sb_start_y
469
	add   cx,sb_size_y
470
	sub   ecx,sb_btn_high
471
	dec   ecx
472
	mov   eax,ecx
473
	shr   eax,16
474
	sub   cx,ax
475
	test  cx,0x8000
476
	jnz	  @f
477
	mov   edx,sb_bckg_col
478
	mov   eax,13
479
	int   0x40   ; bottom interval
480
@@:
481
	pop   ecx
482
;*********************************
483
	mov   ax,cx
484
	shr   ecx,16
485
	add   cx,ax
486
	sub   ecx,2
487
	shl   ecx,16
488
	inc   ecx
489
	mov   edx,sb_line_col
490
	mov   eax,13
1666 mario79 491
	cmp  dword sb_all_redraw,0
1037 mario79 492
	je   @f
493
	int   0x40   ; bottom button - top line
494
@@:
495
	push  ecx
496
	add   ecx,1 shl 16
497
	add   cx,sb_btn_high
498
	sub   ecx,2
499
	mov   edx,sb_frnt_col
1666 mario79 500
	cmp  dword sb_all_redraw,0
1037 mario79 501
	je   @f
502
	int   0x40   ; bottom button filling
503
;*********************************
504
draw_down_arrow_vertical
505
;*********************************
506
@@:
507
	pop   ecx
508
 
509
	ror   ecx,16
1199 mario79 510
	add   ecx,sb_btn_high
1037 mario79 511
	rol   ecx,16
512
 
513
	mov   edx,sb_line_col
514
	mov   cx,1
1666 mario79 515
	cmp  dword sb_all_redraw,0
1037 mario79 516
	je   @f
517
	int   0x40   ; bottom button - extreme line
2317 IgorA 518
	cmp word sb_type,1
519
	jne @f
520
		movzx eax,word sb_start_x
521
		movzx ebx,word sb_start_y
522
		movzx ecx,word sb_size_x
523
		;à¨á®¢ ­¨¥ á⨫쭮© à ¬ª¨ ­  ¢¥àå­¥© ª­®¯ª¥
524
		stdcall draw_edge, eax,ebx,ecx,sb_btn_high,\
525
			sb_bckg_col, sb_frnt_col, sb_line_col
526
 
527
		add bx,sb_size_y
528
		sub ebx,sb_btn_high
529
		dec ebx
530
		;à¨á®¢ ­¨¥ á⨫쭮© à ¬ª¨ ­  ­¨¦­¥© ª­®¯ª¥
531
		stdcall draw_edge, eax,ebx,ecx,sb_btn_high,\
532
			sb_bckg_col, sb_frnt_col, sb_line_col
1037 mario79 533
@@:
534
	popa
535
	ret
536
;*****************************************************************************
537
;*****************************************************************************
538
; mouse event
539
;*****************************************************************************
540
;*****************************************************************************
541
.mouse:
542
	pusha
1041 mario79 543
	mov	 edi,dword [esp+36]
1037 mario79 544
	mcall 37,1
545
	mov   sb_m_pos,eax
1666 mario79 546
	cmp   dword sb_m_pos_2,0
1037 mario79 547
	jne   @f
548
 
1041 mario79 549
	mov   sb_m_pos_2,eax
1037 mario79 550
@@:
551
	mcall 37,2
1041 mario79 552
	mov   sb_m_keys,eax
1037 mario79 553
 
554
	cmp   sb_m_keys,eax
555
	je	  @f
556
 
557
	mov   sb_m_keys,eax
558
 
559
	mov   sb_delta,dword 0
560
 
561
	mov   eax,sb_m_pos
562
	mov   sb_m_pos_2,eax
563
	jmp   .continue_2
564
 
565
@@:
1666 mario79 566
	cmp   dword sb_m_keys,0
1199 mario79 567
	jne	 @f
1037 mario79 568
	mov   eax,sb_m_pos
569
	mov   sb_m_pos_2,eax
1041 mario79 570
	jmp   .correct_1	;.exit_sb
1037 mario79 571
@@:
572
	mov   sb_delta,word 1
573
 
574
.continue_2:
575
	mov   eax,sb_m_pos
576
	test  eax,0x80000000
577
	jnz   .exit_sb
578
 
579
	test  eax,0x8000
580
	jnz   .exit_sb
581
 
582
	mov   ebx,eax
583
	shr   ebx,16   ; x position
584
	shl   eax,16
585
	shr   eax,16   ; y position
586
 
587
	mov   cx,sb_start_y
588
	cmp   ax,cx
1041 mario79 589
	jb	.exit_sb
1037 mario79 590
 
1666 mario79 591
	cmp   word sb_delta2,0
1041 mario79 592
	je	@f
1037 mario79 593
	push  ecx
594
	add   cx,sb_btn_high
595
	cmp   ax,cx
596
	pop   ecx
1041 mario79 597
	jb	.exit_sb
1037 mario79 598
 
599
@@:
600
	add   cx,sb_size_y
601
	cmp   ax,cx
1041 mario79 602
	ja	.exit_sb
1037 mario79 603
 
1666 mario79 604
	cmp   word sb_delta2,0
1041 mario79 605
	je	@f
1037 mario79 606
	sub   cx,sb_btn_high
607
	cmp   ax,cx
1041 mario79 608
	ja	.exit_sb
1037 mario79 609
 
610
@@:
1666 mario79 611
	cmp   word sb_delta2,1
1041 mario79 612
	je	@f
1037 mario79 613
 
1666 mario79 614
	cmp   dword sb_m_keys,0
1041 mario79 615
	je	.exit_sb
616
 
1037 mario79 617
	mov   cx,sb_start_x
618
	cmp   bx,cx
1041 mario79 619
	jb	.exit_sb
1037 mario79 620
 
621
	add   cx,sb_size_x
622
	cmp   bx,cx
1041 mario79 623
	ja	.exit_sb
1037 mario79 624
 
625
	mov   cx,sb_r_start_y
626
	cmp   ax,cx
1041 mario79 627
	jb	.no_runner
1037 mario79 628
 
629
	add   cx,sb_r_size_y
630
	cmp   ax,cx
1041 mario79 631
	ja	.no_runner
1037 mario79 632
 
633
	mov   sb_delta2,word 1
634
@@:
635
	push  eax
636
	mov   ax,sb_m_pos
637
	cmp   ax,sb_m_pos_2
1199 mario79 638
	je	.correct
1037 mario79 639
 
640
	shl   eax,16
641
	shr   eax,16
642
	mov   ebx,sb_m_pos_2
643
	shl   ebx,16
644
	shr   ebx,16
645
	cmp   eax,ebx
646
	jb   .sub
647
 
648
	sub   eax,ebx
649
	mov   ebx,eax
650
	add   sb_position2,ebx
651
	xor   eax,eax
652
	mov   ax,sb_size_y
653
	sub   eax,sb_btn_high
654
	sub   eax,sb_btn_high
655
	sub   eax,sb_run_size
656
	cmp   sb_position2,eax
657
	jbe   @f
658
 
659
	mov   sb_position2,eax
660
@@:
661
	mov   eax,sb_m_pos
662
	mov   sb_m_pos_2,eax
663
	pop   eax
664
	call  .draw_1
665
	jmp   .no_runner_1
666
 
667
.correct:
668
	pop   eax
669
	jmp   .exit_sb
670
.correct_1:
671
	mov   sb_delta,dword 0
672
	jmp   .exit_sb
673
 
674
.sub:
675
	sub   ebx,eax
676
	sub   sb_position2,ebx
677
	test  sb_position2,dword 0x80000000
678
	jz	  @f
679
 
680
	mov   sb_position2,dword 0
681
@@:
682
	mov   eax,sb_m_pos
683
	mov   sb_m_pos_2,eax
684
	pop   eax
685
	call  .draw_1
686
	jmp   .no_runner_1
687
 
688
;*****************************************************************************
689
.no_runner:
690
	mov   sb_delta,dword 0
691
.no_runner_1:
692
	xor   ecx,ecx
693
	mov   cx,sb_start_y
694
	add   cx,sb_btn_high   ;15
1666 mario79 695
	cmp   word sb_delta,1
1041 mario79 696
	je	.scroll_sb
1037 mario79 697
 
698
	cmp   ax,cx
1041 mario79 699
	ja	.scroll_sb
1037 mario79 700
 
1666 mario79 701
	cmp   dword sb_m_keys,0
1037 mario79 702
	je   .exit_sb
703
 
1041 mario79 704
	mov   eax,sb_ar_offset
705
	cmp   sb_position,eax  ;dword 0
706
	jbe   @f
1037 mario79 707
 
1041 mario79 708
	sub   sb_position,eax
1037 mario79 709
	jmp   .all_sb
710
@@:
1041 mario79 711
	xor   eax,eax
712
	mov   sb_position,eax ;dword 0
713
	mov   sb_position2,eax ;dword 0
1037 mario79 714
	jmp   .all_sb
715
;*****************************************************************************
716
.scroll_sb:
717
	add   cx,sb_size_y
718
	sub   cx,sb_btn_high
719
	sub   cx,sb_btn_high
1666 mario79 720
	cmp   word sb_delta,1
1041 mario79 721
	je	@f
1037 mario79 722
 
723
	cmp   ax,cx
1041 mario79 724
	ja	.down_sb
1037 mario79 725
 
726
@@:
727
	mov   ebx,sb_btn_high   ;16  ;15
728
	add   bx,sb_start_y
729
	sub   cx,bx
730
	sub   ax,bx
731
 
732
.scroll_sb_1:
733
	mov   ebx,sb_run_size
734
;*****************************************************************************
1666 mario79 735
	cmp   word sb_delta,1
1041 mario79 736
	je	.continue
1037 mario79 737
 
738
@@:
739
	mov   edx,eax
740
	push  ebx
741
	shr   ebx,1
742
	sub   edx,ebx
743
	pop   ebx
744
	mov   sb_position2,edx
745
	test  sb_position2,dword 0x80000000
746
	jz	 .test_1
747
 
748
	mov   sb_position2,dword 0
749
	jmp   .continue
750
 
751
.test_1:
752
	xor   edx,edx
753
	mov   dx,sb_size_y
754
	sub   edx,sb_btn_high
755
	sub   edx,sb_btn_high
756
	sub   edx,sb_run_size
757
	cmp   sb_position2,edx
758
	jbe   .continue
759
 
760
	mov   sb_position2,edx
1199 mario79 761
 
1037 mario79 762
.continue:
763
	mov   eax,sb_position2
764
	sub   ecx,ebx
765
.continue_1:
766
;*****************************************************************************
767
	mov   ebx,eax
768
 
769
	mov   eax,sb_max_area
770
	cmp   eax,sb_cur_area
1041 mario79 771
	ja	@f
1037 mario79 772
 
773
	xor   eax,eax
774
	inc   eax
775
	mov   sb_position2,eax
1199 mario79 776
	jmp   .all_sb
1037 mario79 777
@@:
778
	sub   eax,sb_cur_area
779
	inc   eax
780
	shl   eax,10
781
	xor   edx,edx
782
	div   ecx
783
	shl   edx,1
784
	cmp   edx,ecx
1041 mario79 785
	jb	@f
1037 mario79 786
 
787
	inc   eax
788
 
789
@@:
790
	imul  eax,ebx
791
	shr   eax,10
792
 
793
	cmp   sb_position,eax
1041 mario79 794
	je	.exit_sb
1037 mario79 795
 
796
	cmp   eax,0
1041 mario79 797
	ja	@f
1037 mario79 798
 
799
	xor   eax,eax
800
 
801
@@:
802
.store_position:
803
	mov   sb_position,eax
804
.all_sb:
805
	mov   sb_redraw,dword 1
806
	call  .draw_1
807
	mov   eax,sb_m_pos
808
	mov   sb_m_pos_2,eax
809
	jmp   .exit_sb
810
;*****************************************************************************
811
.down_sb:
1666 mario79 812
	cmp   dword sb_m_keys,0
1037 mario79 813
	je   .exit_sb
814
 
815
	mov   eax,sb_max_area
1041 mario79 816
	mov   ebx,sb_ar_offset
1037 mario79 817
	sub   eax,sb_cur_area
1041 mario79 818
	push  eax
819
	sub   eax,ebx
1037 mario79 820
	cmp   sb_position,eax
1041 mario79 821
	pop   eax
1037 mario79 822
	jae   @f
823
 
1041 mario79 824
	add   sb_position,ebx
1037 mario79 825
	jmp   .all_sb
826
@@:
1041 mario79 827
	mov   sb_position,eax
1037 mario79 828
	xor   eax,eax
829
	mov   ax,sb_size_y
830
	sub   eax,sb_btn_high
831
	sub   eax,sb_btn_high
832
	sub   eax,sb_run_size
833
	mov   sb_position2,eax
834
	jmp   .all_sb
1041 mario79 835
.exit_sb:
1037 mario79 836
scroll_bar_exit
837
}
838
 
839
;*****************************************************************************
840
;*****************************************************************************
841
;*****************************************************************************
842
;*****************************************************************************
843
;*****************************************************************************
844
macro use_scroll_bar_horizontal
845
{
846
scroll_bar_horizontal:
847
.draw:
848
	pusha
849
	mov   edi,dword [esp+36]
1041 mario79 850
	mov   sb_delta,word 0
1037 mario79 851
	call  .draw_1
852
	mov   sb_all_redraw,dword 0
853
scroll_bar_exit
854
.draw_1:
855
	pusha
856
;*********************************
857
	xor   eax,eax
858
	mov   ax,sb_size_x	;sb_size_y
859
	mov   edx,sb_btn_high
860
	shl   edx,1
861
	sub   eax,edx
862
	mov   sb_work_size,eax
863
;*********************************
864
	mov   eax,sb_work_size   ;sb_max_area
865
	mov   ebx,sb_max_area
866
	cmp   ebx,sb_cur_area
1041 mario79 867
	ja	@f
1037 mario79 868
 
869
	jmp   .no_size
870
 
871
@@:
872
	imul  eax,sb_cur_area
873
	xor   edx,edx
874
	div   ebx
875
	cmp   eax,10
876
	jae   @f
877
	mov   eax,10
878
@@:
879
.no_size:
880
	mov   sb_run_size,eax
881
;*********************************
1666 mario79 882
	cmp   word sb_delta,1
1041 mario79 883
	je	.@@_3
1037 mario79 884
	mov   eax,sb_work_size
885
	sub   eax,sb_run_size
886
	mov   ebx,sb_max_area
887
	cmp   ebx,sb_cur_area
1041 mario79 888
	ja	@f
1037 mario79 889
	xor   eax,eax
890
	jmp   .@@_1
891
@@:
892
	sub   ebx,sb_cur_area
893
	imul  eax,sb_position
894
	xor   edx,edx
895
	div   ebx
896
.@@_1:
897
	mov   sb_position2,eax
898
	xor   edx,edx
899
	mov   dx,sb_size_x
900
	sub   edx,sb_btn_high
901
	sub   edx,sb_btn_high
902
	sub   edx,sb_run_size
903
	cmp   sb_position2,edx
904
	jbe   .@@_3
905
	mov   sb_position2,edx
906
.@@_3:
907
;*********************************
908
	mov   ebx,sb_size_x
909
	mov   ecx,sb_start_y
910
	shl   ecx,16
911
	inc   ecx
912
	mov   edx,sb_line_col
913
	mov   eax,13
1666 mario79 914
	cmp  dword sb_all_redraw,0
1037 mario79 915
	je   @f
916
	int   0x40   ; top extreme line
917
@@:
918
	push  ecx
919
	ror   ecx,16
920
	add   cx,sb_size_y
921
	rol   ecx,16
1666 mario79 922
	cmp  dword sb_all_redraw,0
1037 mario79 923
	je   @f
924
	int   0x40   ; bottom extreme line
925
@@:
926
	pop   ecx
927
 
928
	push  ebx
929
 
930
	add   ecx,1 shl 16
931
	mov   cx,sb_size_y
932
	dec   ecx
933
	mov   bx,1
1666 mario79 934
	cmp  dword sb_all_redraw,0
1037 mario79 935
	je   @f
936
	int   0x40   ; left button - extreme line
937
@@:
938
	push  ebx
939
	add   ebx,1 shl 16
940
	add   ebx,sb_btn_high
941
	sub   ebx,2
942
	mov   edx,sb_frnt_col
1666 mario79 943
	cmp  dword sb_all_redraw,0
1037 mario79 944
	je   @f
945
	int   0x40   ; left  button filling
946
;*********************************
947
draw_up_arrow_horizontal
948
;*********************************
949
@@:
950
	pop   ebx
951
 
952
	ror   ebx,16
953
	add   ebx,sb_btn_high  ;14 shl 16
954
	rol   ebx,16
955
	mov   edx,sb_line_col
1666 mario79 956
	cmp  dword sb_all_redraw,0
1037 mario79 957
	je   @f
958
	int   0x40   ;  left  button - right line
959
@@:
960
	pop   ebx
961
;*********************************
962
	ror   ebx,16
963
	add   ebx,sb_btn_high  ;15 shl 16
964
	  inc   ebx
965
	rol   ebx,16
966
	sub   ebx,sb_btn_high  ;30
967
	sub   ebx,sb_btn_high
968
	push  ebx
969
	mov   bx,0
970
	add   ebx,sb_position2
971
	  dec   bx
972
	mov   eax,13
973
	test  bx,0x8000
974
	jnz   @f
975
	mov   edx,sb_bckg_col
1041 mario79 976
	int   0x40	; left interval
1037 mario79 977
@@:
978
;*********************************
979
	shr   ebx,16
980
	add   ebx,sb_position2
981
	dec   ebx
982
	shl   ebx,16
983
	inc   ebx
984
	mov   edx,sb_line_col
1041 mario79 985
	int   0x40	; runner - left extreme line
1037 mario79 986
 
987
	add   ebx,1 shl 16
988
	mov   bx,0
989
	add   ebx,sb_run_size
990
	mov   sb_r_size_x,ebx
991
	mov   sb_r_size_y,ecx
992
	sub   ebx,2
993
	mov   edx,sb_frnt_col
994
	int   0x40   ; runner filling
995
;*********************************
996
draw_runner_center_horizontal
997
;*********************************
2317 IgorA 998
	cmp word sb_type,1
999
	jne @f
1000
		push eax ebx ecx edx
1001
		xor eax,eax
1002
		add ax,sb_r_start_x
1003
		dec eax
1004
		movzx ebx,word sb_start_y
1005
		mov ecx,sb_run_size
1006
		dec ecx
1007
		movzx edx,word sb_size_y
1008
		;à¨á®¢ ­¨¥ á⨫쭮© à ¬ª¨ ­  ¯®«§ã­ª¥
1009
		stdcall draw_edge, eax,ebx,ecx,edx,\
1010
			sb_bckg_col, sb_frnt_col, sb_line_col
1011
		pop edx ecx ebx eax
1012
	@@:
1013
 
1037 mario79 1014
	shr   ebx,16
1015
	add   ebx,sb_run_size
1016
	sub   ebx,2
1017
	shl   ebx,16
1018
	inc   ebx
1019
	mov   edx,sb_line_col
1020
	int   0x40   ; runner - bottom extreme line
1021
 
1022
	add   ebx,1 shl 16
1023
	mov   bx,sb_start_x
1024
	add   bx,sb_size_x
1025
	sub   ebx,sb_btn_high
1026
	dec   ebx
1027
	mov   eax,ebx
1028
	shr   eax,16
1029
	sub   bx,ax
1030
	test  bx,0x8000
1031
	jnz   @f
1032
	mov   edx,sb_bckg_col
1033
	mov   eax,13
1034
	int   0x40   ; bottom interval
1035
@@:
1036
	pop   ebx
1037
;*********************************
1038
	mov   ax,bx
1039
	shr   ebx,16
1040
	add   bx,ax
1041
	sub   ebx,2
1042
	shl   ebx,16
1043
	inc   ebx
1044
	mov   edx,sb_line_col
1045
	mov   eax,13
1666 mario79 1046
	cmp  dword sb_all_redraw,0
1037 mario79 1047
	je   @f
1041 mario79 1048
	int   0x40	; bottom button - top line
1037 mario79 1049
@@:
1050
	push  ebx
1051
	add   ebx,1 shl 16
1052
	add   bx,sb_btn_high
1053
	sub   ebx,2
1054
	mov   edx,sb_frnt_col
1666 mario79 1055
	cmp  dword sb_all_redraw,0
1037 mario79 1056
	je   @f
1057
	int   0x40   ; bottom button filling
1058
;*********************************
1059
draw_down_arrow_horizontal
1060
;*********************************
1061
@@:
1062
	pop   ebx
1063
 
1064
	ror   ebx,16
1065
	add   ebx,sb_btn_high  ;14 shl 16
1066
	rol   ebx,16
1067
 
1068
	mov   edx,sb_line_col
1069
	mov   bx,1
1666 mario79 1070
	cmp  dword sb_all_redraw,0
1037 mario79 1071
	je   @f
1072
	int   0x40   ; bottom button - extreme line
2317 IgorA 1073
	cmp word sb_type,1
1074
	jne @f
1075
		;à¨á®¢ ­¨¥ á⨫쭮© à ¬ª¨ ­  «¥¢®© ª­®¯ª¥
1076
		movzx eax,word sb_start_x
1077
		movzx ebx,word sb_start_y
1078
		movzx edx,word sb_size_y
1079
		stdcall draw_edge, eax,ebx,sb_btn_high,edx,\
1080
			sb_bckg_col, sb_frnt_col, sb_line_col
1081
 
1082
		movzx eax,word sb_start_x
1083
		add ax,sb_size_x
1084
		sub eax,sb_btn_high
1085
		dec eax
1086
		;à¨á®¢ ­¨¥ á⨫쭮© à ¬ª¨ ­  ¯à ¢®© ª­®¯ª¥
1087
		stdcall draw_edge, eax,ebx,sb_btn_high,edx,\
1088
			sb_bckg_col, sb_frnt_col, sb_line_col
1037 mario79 1089
@@:
1090
	popa
1091
	ret
1092
;*****************************************************************************
1093
; mouse event
1094
;*****************************************************************************
1095
.mouse:
1096
	pusha
1041 mario79 1097
	mov	 edi,dword [esp+36]
1037 mario79 1098
	mcall 37,1
1099
	mov   sb_m_pos,eax
1666 mario79 1100
	cmp   dword sb_m_pos_2,0
1037 mario79 1101
	jne   @f
1102
 
1041 mario79 1103
	mov   sb_m_pos_2,eax
1037 mario79 1104
@@:
1105
	mcall 37,2
1041 mario79 1106
	mov   sb_m_keys,eax
1037 mario79 1107
 
1108
	cmp   sb_m_keys,eax
1109
	je	  @f
1110
 
1111
	mov   sb_m_keys,eax
1112
 
1113
	mov   sb_delta,dword 0
1114
 
1115
	mov   eax,sb_m_pos
1116
	mov   sb_m_pos_2,eax
1117
	jmp   .continue_2
1118
 
1119
@@:
1666 mario79 1120
	cmp   dword sb_m_keys,0
1199 mario79 1121
	jne	 @f
1037 mario79 1122
	mov   eax,sb_m_pos
1123
	mov   sb_m_pos_2,eax
1041 mario79 1124
	jmp   .correct_1	;.exit_sb
1037 mario79 1125
@@:
1126
	mov   sb_delta,word 1
1127
 
1128
.continue_2:
1129
	mov   eax,sb_m_pos
1130
	test  eax,0x80000000
1131
	jnz   .exit_sb
1132
 
1133
	test  eax,0x8000
1134
	jnz   .exit_sb
1135
 
1136
	mov   ebx,eax
1137
	shr   eax,16   ; x position
1138
	shl   ebx,16
1139
	shr   ebx,16   ; y position
1140
 
1141
	mov   cx,sb_start_x   ;y
1142
	cmp   ax,cx
1041 mario79 1143
	jb	.exit_sb
1037 mario79 1144
 
1666 mario79 1145
	cmp   word sb_delta2,0
1041 mario79 1146
	je	@f
1037 mario79 1147
	push  ecx
1148
	add   cx,sb_btn_high
1149
	cmp   ax,cx
1150
	pop   ecx
1041 mario79 1151
	jb	.exit_sb
1037 mario79 1152
 
1153
@@:
1041 mario79 1154
	add   cx,sb_size_x	;y
1037 mario79 1155
	cmp   ax,cx
1041 mario79 1156
	ja	.exit_sb
1037 mario79 1157
 
1666 mario79 1158
	cmp   word sb_delta2,0
1041 mario79 1159
	je	@f
1037 mario79 1160
	sub   cx,sb_btn_high
1161
	cmp   ax,cx
1041 mario79 1162
	ja	.exit_sb
1037 mario79 1163
 
1164
@@:
1666 mario79 1165
	cmp   word sb_delta2,1
1041 mario79 1166
	je	@f
1037 mario79 1167
 
1666 mario79 1168
	cmp   dword sb_m_keys,0
1041 mario79 1169
	je	.exit_sb
1170
 
1037 mario79 1171
	mov   cx,sb_start_y   ;x
1172
	cmp   bx,cx
1041 mario79 1173
	jb	.exit_sb
1037 mario79 1174
 
1041 mario79 1175
	add   cx,sb_size_y	;x
1037 mario79 1176
	cmp   bx,cx
1041 mario79 1177
	ja	.exit_sb
1037 mario79 1178
 
1179
	mov   cx,sb_r_start_x
1180
	cmp   ax,cx
1041 mario79 1181
	jb	.no_runner
1037 mario79 1182
 
1183
	add   cx,sb_r_size_x
1184
	cmp   ax,cx
1041 mario79 1185
	ja	.no_runner
1037 mario79 1186
 
1187
	mov   sb_delta2,word 1
1188
@@:
1189
	push  eax
1190
	mov   eax,sb_m_pos
1191
	mov   ebx,sb_m_pos_2
1192
	shr   eax,16
1193
	shr   ebx,16
1194
	cmp   eax,ebx
1199 mario79 1195
	je	.correct
1037 mario79 1196
 
1197
;	shl   eax,16
1198
;	shr   eax,16
1199
;	mov   ebx,sb_m_pos_2
1200
;	shl   ebx,16
1201
;	shr   ebx,16
1202
;	cmp   eax,ebx
1203
	jb   .sub
1204
 
1205
	sub   eax,ebx
1206
	mov   ebx,eax
1207
	add   sb_position2,ebx
1208
	xor   eax,eax
1041 mario79 1209
	mov   ax,sb_size_x	;y
1037 mario79 1210
	sub   eax,sb_btn_high
1211
	sub   eax,sb_btn_high
1212
	sub   eax,sb_run_size
1213
	cmp   sb_position2,eax
1214
	jbe   @f
1215
 
1216
	mov   sb_position2,eax
1217
@@:
1218
	mov   eax,sb_m_pos
1219
	mov   sb_m_pos_2,eax
1220
	pop   eax
1221
	call  .draw_1
1222
	jmp   .no_runner_1
1223
 
1224
.correct:
1225
	pop   eax
1226
	jmp   .exit_sb
1227
.correct_1:
1228
	mov   sb_delta,dword 0
1229
	jmp   .exit_sb
1230
 
1231
.sub:
1232
	sub   ebx,eax
1233
	sub   sb_position2,ebx
1234
	test  sb_position2,dword 0x80000000
1235
	jz	  @f
1236
 
1237
	mov   sb_position2,dword 0
1238
@@:
1239
	mov   eax,sb_m_pos
1240
	mov   sb_m_pos_2,eax
1241
	pop   eax
1242
	call  .draw_1
1243
	jmp   .no_runner_1
1244
 
1245
;*****************************************************************************
1246
.no_runner:
1247
	mov   sb_delta,dword 0
1248
.no_runner_1:
1249
	xor   ecx,ecx
1250
	mov   cx,sb_start_x   ;y
1251
	add   cx,sb_btn_high   ;15
1666 mario79 1252
	cmp   word sb_delta,1
1041 mario79 1253
	je	.scroll_sb
1037 mario79 1254
 
1255
	cmp   ax,cx
1041 mario79 1256
	ja	.scroll_sb
1037 mario79 1257
 
1666 mario79 1258
	cmp   dword sb_m_keys,0
1037 mario79 1259
	je   .exit_sb
1260
 
1041 mario79 1261
	mov   eax,sb_ar_offset
1262
	cmp   sb_position,eax  ;dword 0
1263
	jbe   @f
1037 mario79 1264
 
1041 mario79 1265
	sub   sb_position,eax
1037 mario79 1266
	jmp   .all_sb
1267
@@:
1041 mario79 1268
	xor   eax,eax
1269
	mov   sb_position,eax ;dword 0
1270
	mov   sb_position2,eax  ;dword 0
1037 mario79 1271
	jmp   .all_sb
1272
;*****************************************************************************
1273
.scroll_sb:
1274
	add   cx,sb_size_x	;y
1275
	sub   cx,sb_btn_high
1276
	sub   cx,sb_btn_high
1666 mario79 1277
	cmp   word sb_delta,1
1041 mario79 1278
	je	@f
1037 mario79 1279
 
1280
	cmp   ax,cx
1041 mario79 1281
	ja	.down_sb
1037 mario79 1282
 
1283
@@:
1284
	mov   ebx,sb_btn_high   ;16  ;15
1285
	add   bx,sb_start_x	;y
1286
	sub   cx,bx
1287
	sub   ax,bx
1288
 
1289
.scroll_sb_1:
1290
	mov   ebx,sb_run_size
1291
;*****************************************************************************
1666 mario79 1292
	cmp   word sb_delta,1
1041 mario79 1293
	je	.continue
1037 mario79 1294
 
1295
@@:
1296
	mov   edx,eax
1199 mario79 1297
 
1037 mario79 1298
	push  ebx
1299
	shr   ebx,1
1300
	sub   edx,ebx
1301
	pop   ebx
1302
	mov   sb_position2,edx
1303
	test  sb_position2,dword 0x80000000
1304
	jz	 .test_1
1305
 
1306
	mov   sb_position2,dword 0
1307
	jmp   .continue
1308
 
1309
.test_1:
1310
	xor   edx,edx
1311
	mov   dx,sb_size_x	 ;y
1312
	sub   edx,sb_btn_high
1313
	sub   edx,sb_btn_high
1314
	sub   edx,sb_run_size
1315
	cmp   sb_position2,edx
1316
	jbe   .continue
1317
 
1318
	mov   sb_position2,edx
1199 mario79 1319
 
1037 mario79 1320
.continue:
1321
	mov   eax,sb_position2
1322
	sub   ecx,ebx
1323
.continue_1:
1324
;*****************************************************************************
1325
	mov   ebx,eax
1326
 
1327
	mov   eax,sb_max_area
1328
	cmp   eax,sb_cur_area
1041 mario79 1329
	ja	@f
1037 mario79 1330
 
1331
	xor   eax,eax
1332
	inc   eax
1333
	mov   sb_position2,eax
1199 mario79 1334
	jmp   .all_sb
1037 mario79 1335
@@:
1336
	sub   eax,sb_cur_area
1337
	inc   eax
1338
	shl   eax,10
1339
	xor   edx,edx
1340
	div   ecx
1341
	shl   edx,1
1342
	cmp   edx,ecx
1041 mario79 1343
	jb	@f
1037 mario79 1344
 
1345
	inc   eax
1346
 
1347
@@:
1348
	imul  eax,ebx
1349
	shr   eax,10
1350
 
1351
	cmp   sb_position,eax
1041 mario79 1352
	je	.exit_sb
1037 mario79 1353
 
1354
	cmp   eax,0
1041 mario79 1355
	ja	@f
1037 mario79 1356
 
1357
	xor   eax,eax
1358
 
1359
@@:
1360
.store_position:
1361
	mov   sb_position,eax
1362
.all_sb:
1363
	mov   sb_redraw,dword 1
1364
	call  .draw_1
1365
	mov   eax,sb_m_pos
1366
	mov   sb_m_pos_2,eax
1367
	jmp   .exit_sb
1368
;*****************************************************************************
1369
.down_sb:
1666 mario79 1370
	cmp   dword sb_m_keys,0
1037 mario79 1371
	je   .exit_sb
1372
 
1373
	mov   eax,sb_max_area
1041 mario79 1374
	mov   ebx,sb_ar_offset
1037 mario79 1375
	sub   eax,sb_cur_area
1041 mario79 1376
	push  eax
1377
	sub   eax,ebx
1037 mario79 1378
	cmp   sb_position,eax
1041 mario79 1379
	pop   eax
1037 mario79 1380
	jae   @f
1381
 
1041 mario79 1382
	add   sb_position,ebx
1037 mario79 1383
	jmp   .all_sb
1384
@@:
1041 mario79 1385
	mov   sb_position,eax
1037 mario79 1386
	xor   eax,eax
1387
	mov   ax,sb_size_x
1388
	sub   eax,sb_btn_high
1389
	sub   eax,sb_btn_high
1390
	sub   eax,sb_run_size
1391
	mov   sb_position2,eax
1392
	jmp   .all_sb
1393
.exit_sb:
1394
scroll_bar_exit
1395
}