Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
3478 | 0CodErr | 1 | macro use_progressbar |
2 | { |
||
3 | pb equ [ebp + 4 + 8*4] |
||
4 | align 16 |
||
5 | progressbar_draw: |
||
6 | pushad |
||
7 | mov ebp, esp |
||
8 | ; draw frame |
||
9 | push ebp |
||
10 | mov [.last_esp], esp |
||
11 | mov eax, pb |
||
12 | mov esi, [eax + PB_LEFT] |
||
13 | mov edi, [eax + PB_TOP] |
||
14 | mov ebp, [eax + PB_WIDTH] |
||
15 | add ebp, esi |
||
16 | dec ebp |
||
17 | mov esp, [eax + PB_HEIGHT] |
||
18 | add esp, edi |
||
19 | dec esp |
||
20 | mov edx, [eax + PB_FRAME_COLOR] |
||
21 | mov eax, 38 |
||
22 | mov ebx, esi |
||
23 | shl ebx, 16 |
||
24 | add ebx, ebp |
||
25 | mov ecx, edi |
||
26 | shl ecx, 16 |
||
27 | add ecx, edi |
||
28 | int 64 |
||
29 | mov ecx, esp |
||
30 | shl ecx, 16 |
||
31 | add ecx, esp |
||
32 | int 64 |
||
33 | mov bx, si |
||
34 | mov ecx, edi |
||
35 | shl ecx, 16 |
||
36 | add ecx, esp |
||
37 | int 64 |
||
38 | mov ebx, ebp |
||
39 | shl ebx, 16 |
||
40 | add ebx, ebp |
||
41 | int 64 |
||
42 | mov esp, [.last_esp] |
||
43 | pop ebp |
||
44 | ; if min > max then .skip |
||
45 | mov eax, pb |
||
46 | mov edx, [eax + PB_MAX] |
||
47 | mov ecx, [eax + PB_MIN] |
||
48 | cmp ecx, edx |
||
49 | ; jg .skip |
||
50 | jne .min_no_eq_max |
||
51 | dec edx |
||
52 | .min_no_eq_max: |
||
53 | ; draw all progress rectangle |
||
54 | call get_progress_width |
||
55 | mov edi, eax |
||
56 | mov eax, pb |
||
57 | mov ebx, [eax + PB_LEFT] |
||
58 | inc ebx |
||
59 | shl ebx, 16 |
||
60 | add ebx, edi |
||
61 | mov ecx, [eax + PB_TOP] |
||
62 | inc ecx |
||
63 | shl ecx, 16 |
||
64 | add ecx, [eax + PB_HEIGHT] |
||
65 | dec ecx |
||
66 | dec ecx |
||
67 | mov edx, [eax + PB_PROGRESS_COLOR] |
||
68 | mov eax, 13 |
||
69 | int 64 |
||
70 | ; draw last part of non-progress rectangle |
||
71 | ; edi = pW, esi = W - 2 |
||
72 | sub esi, edi ; width |
||
73 | shr ebx, 16 |
||
74 | add ebx, edi |
||
75 | shl ebx, 16 |
||
76 | add ebx, esi |
||
77 | mov esi, pb |
||
78 | mov edx, [esi + PB_BACK_COLOR] |
||
79 | int 64 |
||
80 | ; .skip: |
||
81 | popad |
||
82 | ret 4 |
||
83 | .last_esp dd 0 |
||
84 | |||
85 | |||
86 | align 16 |
||
87 | get_progress_width: |
||
88 | ; pW = (W-2)(value - min) / (max - min) |
||
89 | mov esi, [eax + PB_WIDTH] |
||
90 | dec esi |
||
91 | dec esi |
||
92 | mov eax, [eax + PB_VALUE] |
||
93 | sub eax, ecx |
||
94 | imul eax, esi |
||
95 | neg ecx |
||
96 | add ecx, edx |
||
97 | xor edx, edx |
||
98 | div ecx |
||
99 | ret |
||
100 | |||
101 | |||
102 | align 16 |
||
103 | progressbar_progress: |
||
104 | pushad |
||
105 | mov ebp, esp |
||
106 | ; if min > max then .skip |
||
107 | mov eax, pb |
||
108 | mov edx, [eax + PB_MAX] |
||
109 | mov ecx, [eax + PB_MIN] |
||
110 | cmp ecx, edx |
||
111 | ; jg .skip |
||
112 | jne .min_no_eq_max1 |
||
113 | dec edx |
||
114 | .min_no_eq_max1: |
||
115 | call get_progress_width |
||
116 | mov edi, eax |
||
117 | ; increase value |
||
118 | mov eax, pb |
||
119 | mov edx, [eax + PB_MAX] |
||
120 | mov ecx, [eax + PB_VALUE] |
||
121 | inc ecx |
||
122 | ; if value > max then value = max |
||
123 | cmp ecx, edx |
||
124 | jng .next |
||
125 | mov ecx, edx |
||
126 | .next: |
||
127 | mov [eax + PB_VALUE], ecx |
||
128 | ; draw new part of progress rectangle |
||
129 | mov eax, pb |
||
130 | mov ecx, [eax + PB_MIN] |
||
131 | cmp ecx, edx |
||
132 | jne .min_no_eq_max2 |
||
133 | dec edx |
||
134 | .min_no_eq_max2: |
||
135 | call get_progress_width |
||
136 | mov esi, eax |
||
137 | ; edi = last pW, esi = new pW |
||
138 | mov eax, pb |
||
139 | mov ebx, [eax + PB_LEFT] |
||
140 | inc ebx |
||
141 | add ebx, edi |
||
142 | shl ebx, 16 |
||
143 | add ebx, esi |
||
144 | sub ebx, edi |
||
145 | mov ecx, [eax + PB_TOP] |
||
146 | inc ecx |
||
147 | shl ecx, 16 |
||
148 | add ecx, [eax + PB_HEIGHT] |
||
149 | dec ecx |
||
150 | dec ecx |
||
151 | mov edx, [eax + PB_PROGRESS_COLOR] |
||
152 | mov eax, 13 |
||
153 | int 64 |
||
154 | ; .skip: |
||
155 | popad |
||
156 | ret 4 |
||
157 | restore pb |
||
158 | } |