Subversion Repositories Kolibri OS

Rev

Rev 2703 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2703 Rev 9647
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;                                          ;
2
;                                          ;
3
;   Color Slider Control Demonstration     ;
3
;   Color Slider Control Demonstration     ;
4
;                                          ;
4
;                                          ;
5
;   Compile with FASM for Menuet           ;
5
;   Compile with FASM for Kolibri          ;
6
;                                          ;
6
;                                          ;
7
;   Author: Jason Delozier                 ;
7
;   Author: Jason Delozier                 ;
8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9
 
9
 
10
use32
10
use32
11
 
11
 
12
               org    0x0
12
               org    0x0
13
 
13
 
14
               db     'MENUET01'              ; 8 byte id
14
               db     'MENUET01'              ; 8 byte id
15
               dd     0x01                    ; header version
15
               dd     0x01                    ; header version
16
               dd     START                   ; start of code
16
               dd     START                   ; start of code
17
               dd     I_END                   ; size of image
17
               dd     I_END                   ; size of image
18
               dd     0x1000                  ; memory for app
18
               dd     0x1000                  ; memory for app
19
               dd     0x1000                  ; esp
19
               dd     0x1000                  ; esp
20
               dd     0x0 , 0x0               ; I_Param , I_Icon
20
               dd     0x0 , 0x0               ; I_Param , I_Icon
21
 
21
 
22
include 'lang.inc'
22
include 'lang.inc'
23
include '..\..\..\macros.inc'
23
include '..\..\..\macros.inc'
-
 
24
include '..\..\..\KOSfuncs.inc'
24
START:                          ; start of execution
25
START:                          ; start of execution
25
 
26
 
26
    call draw_window            ; at first, draw the window
27
    call draw_window            ; at first, draw the window
27
 
28
 
28
still:
29
still:
29
    call mouse_info
30
    call mouse_info
30
 
31
 
31
    mcall 23, 2
32
    mcall SF_WAIT_EVENT_TIMEOUT, 2
32
 
33
 
33
    cmp  eax,1                  ; redraw request ?
34
    cmp  eax,1                  ; redraw request ?
34
    je   red
35
    je   red
35
    cmp  eax,2                  ; key in buffer ?
36
    cmp  eax,2                  ; key in buffer ?
36
    je   key
37
    je   key
37
    cmp  eax,3                  ; button in buffer ?
38
    cmp  eax,3                  ; button in buffer ?
38
    je   button
39
    je   button
39
 
40
 
40
    jmp  still
41
    jmp  still
41
 
42
 
42
  red:                          ; redraw
43
  red:                          ; redraw
43
    call draw_window
44
    call draw_window
44
    jmp  still
45
    jmp  still
45
 
46
 
46
  key:                          ; key
47
  key:                          ; key
47
    mcall 2                  ; just read it and ignore
48
    mcall SF_GET_KEY            ; just read it and ignore
48
    jmp  still
49
    jmp  still
49
 
50
 
50
  button:                       ; button
51
  button:                       ; button
51
    mcall 17                 ; get id
52
    mcall SF_GET_BUTTON         ; get id
52
    
53
    
53
    shr  eax,8
54
    shr  eax,8
54
 
55
 
55
    cmp  eax,1                   ; button id=1 ?
56
    cmp  eax,1                   ; button id=1 ?
56
    jne  noclose
57
    jne  noclose
57
    mcall -1                     ; close this program
58
    mcall SF_TERMINATE_PROCESS   ; close this program
58
  noclose:
59
  noclose:
59
 
60
 
60
 
61
 
61
  nofind:
62
  nofind:
62
    jmp still
63
    jmp still
63
 
64
 
64
 
65
 
65
;   *********************************************
66
;   *********************************************
66
;   *******  WINDOW DEFINITIONS AND DRAW ********
67
;   *******  WINDOW DEFINITIONS AND DRAW ********
67
;   *********************************************
68
;   *********************************************
68
 
69
 
69
 
70
 
70
draw_window:
71
draw_window:
71
    mcall 12, 1                    ; 1, start of draw
72
    mcall SF_REDRAW, SSF_BEGIN_DRAW
72
    mcall 0, <100,200>, <100,200>, 0x14ffffff, , title ; DRAW WINDOW
73
    mcall SF_CREATE_WINDOW, <100,200>, <100,200>, 0x14ffffff, , title
73
    mcall 12,2                    ; end WINDOW redraw
74
    mcall SF_REDRAW, SSF_END_DRAW
74
	
75
	
75
    call draw_slider_info
76
    call draw_slider_info
76
 
77
 
77
    xor  ecx,ecx
78
    xor  ecx,ecx
78
Draw_Controls_Loop:
79
Draw_Controls_Loop:
79
    mov  ebp, [App_Controls+ecx]    ;get controls data location
80
    mov  ebp, [App_Controls+ecx]    ;get controls data location
80
    or   ebp,ebp
81
    or   ebp,ebp
81
    jz   Draw_Controls_Done
82
    jz   Draw_Controls_Done
82
    call dword [App_Controls+ecx+4] ;call controls draw function
83
    call dword [App_Controls+ecx+4] ;call controls draw function
83
    add  ecx, 12
84
    add  ecx, 12
84
    jmp  Draw_Controls_Loop
85
    jmp  Draw_Controls_Loop
85
Draw_Controls_Done:
86
Draw_Controls_Done:
86
 
87
 
87
    ret
88
    ret
88
 
89
 
89
 
90
 
90
;***********************************************
91
;***********************************************
91
;* Mouse Stuff
92
;* Mouse Stuff
92
;***********************************************
93
;***********************************************
93
mousey dw 0
94
mousey dw 0
94
mousex dw 0
95
mousex dw 0
95
mouseb dd 0
96
mouseb dd 0
96
 
97
 
97
mouse_info:
98
mouse_info:
98
   mcall 37, 1            ;get mouse cordinates
99
   mcall SF_MOUSE_GET, SSF_WINDOW_POSITION
99
   mov ecx, eax           ;
100
   mov ecx, eax           ;
100
   push ecx               ;
101
   push ecx               ;
101
   mcall  37, 2           ;get mouse buttons
102
   mcall SF_MOUSE_GET, SSF_BUTTON
102
   cmp [mouseb], eax      ;compare old mouse states to new states
103
   cmp [mouseb], eax      ;compare old mouse states to new states
103
   jne redraw_mouse_info  ;
104
   jne redraw_mouse_info  ;
104
   cmp [mousey], cx       ;
105
   cmp [mousey], cx       ;
105
   jne redraw_mouse_info  ;
106
   jne redraw_mouse_info  ;
106
   shr ecx, 16            ;
107
   shr ecx, 16            ;
107
   cmp [mousex], cx       ;
108
   cmp [mousex], cx       ;
108
   jne redraw_mouse_info  ;
109
   jne redraw_mouse_info  ;
109
   pop ecx                ;
110
   pop ecx                ;
110
ret                       ;return if no change in states
111
ret                       ;return if no change in states
111
 
112
 
112
 
113
 
113
redraw_mouse_info:
114
redraw_mouse_info:
114
   pop ecx
115
   pop ecx
115
   mov [mouseb], eax      ;save new mouse states
116
   mov [mouseb], eax      ;save new mouse states
116
   mov dword [mousey], ecx
117
   mov dword [mousey], ecx
117
 
118
 
118
   xor ecx, ecx
119
   xor ecx, ecx
119
Check_Mouse_Over_Controls_Loop:
120
Check_Mouse_Over_Controls_Loop:
120
   mov ebp, [App_Controls+ecx]
121
   mov ebp, [App_Controls+ecx]
121
   or  ebp,ebp
122
   or  ebp,ebp
122
   jz Check_Mouse_Over_Controls_Loop_done
123
   jz Check_Mouse_Over_Controls_Loop_done
123
   movzx eax,word [ebp+2]
124
   movzx eax,word [ebp+2]
124
   cmp    ax, [mousex]
125
   cmp    ax, [mousex]
125
   ja  mouse_not_on_control
126
   ja  mouse_not_on_control
126
   movzx eax,word [ebp+6]
127
   movzx eax,word [ebp+6]
127
   cmp    ax, [mousey]
128
   cmp    ax, [mousey]
128
   ja  mouse_not_on_control
129
   ja  mouse_not_on_control
129
   movzx eax,word [ebp]
130
   movzx eax,word [ebp]
130
   add    ax, [ebp+2]
131
   add    ax, [ebp+2]
131
   cmp    ax, [mousex]
132
   cmp    ax, [mousex]
132
   jb  mouse_not_on_control
133
   jb  mouse_not_on_control
133
   movzx eax,word [ebp+4]
134
   movzx eax,word [ebp+4]
134
   add    ax, [ebp+6]
135
   add    ax, [ebp+6]
135
   cmp    ax, [mousey]
136
   cmp    ax, [mousey]
136
   jb  mouse_not_on_control
137
   jb  mouse_not_on_control
137
   call dword [App_Controls+ecx+8]
138
   call dword [App_Controls+ecx+8]
138
mouse_not_on_control:
139
mouse_not_on_control:
139
   add ecx, 12
140
   add ecx, 12
140
   jmp Check_Mouse_Over_Controls_Loop
141
   jmp Check_Mouse_Over_Controls_Loop
141
Check_Mouse_Over_Controls_Loop_done:
142
Check_Mouse_Over_Controls_Loop_done:
142
 
143
 
143
ret
144
ret
144
 
145
 
145
 
146
 
146
 
147
 
147
 
148
 
148
;***********************************************
149
;***********************************************
149
 
150
 
150
 
151
 
151
draw_slider_info:
152
draw_slider_info:
152
;Repaint value background
153
;Repaint value background
153
   mcall 13, 144*65536+36, 72*65536+9, 0x00ffffff 
154
   mcall SF_DRAW_RECT, 144*65536+36, 72*65536+9, 0x00ffffff 
154
;Draw Color Box
155
;Draw Color Box
155
   xor edx, edx
156
   xor edx, edx
156
   movzx ecx,word [slider_1+12]
157
   movzx ecx,word [slider_1+12]
157
   mov dh, cl
158
   mov dh, cl
158
   movzx ecx,word [slider_2+12]
159
   movzx ecx,word [slider_2+12]
159
   mov dl, cl
160
   mov dl, cl
160
   shl edx, 8
161
   shl edx, 8
161
   movzx ecx,word [slider_3+12]
162
   movzx ecx,word [slider_3+12]
162
   mov dl,cl
163
   mov dl,cl
163
   mov ebx, 0x00860035
164
   mov ebx, 0x00860035
164
   mov ecx, 0x00590040
165
   mov ecx, 0x00590040
165
   mov eax, 13
166
   mov eax, SF_DRAW_RECT
166
   mcall 
167
   mcall 
167
;draw current value of slider
168
;draw current value of slider
168
   mov ecx, edx
169
   mov ecx, edx
169
   mov eax, 47
170
   mov eax, SF_DRAW_NUMBER
170
   mov ebx, 0x00060100
171
   mov ebx, 0x00060100
171
   mov esi, 0
172
   mov esi, 0
172
   mov edx, 144*65536+72
173
   mov edx, 144*65536+72
173
   mcall
174
   mcall
174
ret
175
ret
175
 
176
 
176
 
177
 
177
;**************************************
178
;**************************************
178
;*
179
;*
179
;*   App Controls
180
;*   App Controls
180
;*
181
;*
181
;**************************************
182
;**************************************
182
 
183
 
183
App_Controls:
184
App_Controls:
184
     dd slider_1 , draw_slider, slider_mouse_over   ;
185
     dd slider_1 , draw_slider, slider_mouse_over   ;
185
     dd slider_2 , draw_slider, slider_mouse_over   ;
186
     dd slider_2 , draw_slider, slider_mouse_over   ;
186
     dd slider_3 , draw_slider, slider_mouse_over   ;
187
     dd slider_3 , draw_slider, slider_mouse_over   ;
187
     dd 0 , 0          ; denotes last control do not delete
188
     dd 0 , 0          ; denotes last control do not delete
188
 
189
 
189
;**************************************
190
;**************************************
190
;*
191
;*
191
;*   Slider data
192
;*   Slider data
192
;*
193
;*
193
;**************************************
194
;**************************************
194
 
195
 
195
slider_1:
196
slider_1:
196
   dw  25  ;width         +0
197
   dw  25  ;width         +0
197
   dw  10  ;x             +2
198
   dw  10  ;x             +2
198
   dw  150 ;height        +4
199
   dw  150 ;height        +4
199
   dw  30  ;y             +6
200
   dw  30  ;y             +6
200
   dw  0   ;min           +8
201
   dw  0   ;min           +8
201
   dw  255 ;max           +10
202
   dw  255 ;max           +10
202
   dw  128 ;current       +12
203
   dw  128 ;current       +12
203
   dw  1   ;small change  +14
204
   dw  1   ;small change  +14
204
   dw  5   ;big change    +16
205
   dw  5   ;big change    +16
205
 
206
 
206
slider_2:
207
slider_2:
207
   dw  25  ;width         +0
208
   dw  25  ;width         +0
208
   dw  55  ;x             +2
209
   dw  55  ;x             +2
209
   dw  150 ;height        +4
210
   dw  150 ;height        +4
210
   dw  30  ;y             +6
211
   dw  30  ;y             +6
211
   dw  0   ;min           +8
212
   dw  0   ;min           +8
212
   dw  255 ;max           +10
213
   dw  255 ;max           +10
213
   dw  128  ;current       +12
214
   dw  128  ;current       +12
214
   dw  1   ;small change  +14
215
   dw  1   ;small change  +14
215
   dw  5   ;big change    +16
216
   dw  5   ;big change    +16
216
 
217
 
217
slider_3:
218
slider_3:
218
   dw  25  ;width         +0
219
   dw  25  ;width         +0
219
   dw  100 ;x             +2
220
   dw  100 ;x             +2
220
   dw  150 ;height        +4
221
   dw  150 ;height        +4
221
   dw  30  ;y             +6
222
   dw  30  ;y             +6
222
   dw  0   ;min           +8
223
   dw  0   ;min           +8
223
   dw  255 ;max           +10
224
   dw  255 ;max           +10
224
   dw  128 ;current       +12
225
   dw  128 ;current       +12
225
   dw  1   ;small change  +14
226
   dw  1   ;small change  +14
226
   dw  5   ;big change    +16
227
   dw  5   ;big change    +16
227
 
228
 
228
;**************************************
229
;**************************************
229
;*
230
;*
230
;*   Slider Code
231
;*   Slider Code
231
;*
232
;*
232
;**************************************
233
;**************************************
233
 
234
 
234
box_h dw 10  ;static slider box height
235
box_h dw 10  ;static slider box height
235
 
236
 
236
draw_slider:
237
draw_slider:
237
   push eax
-
 
238
   push ebx
-
 
239
   push ecx
-
 
240
   push edx
238
   push eax ebx ecx edx
241
;Draw slider background
239
;Draw slider background
242
   mov   eax, 13         ;slider background
240
   mov   eax, SF_DRAW_RECT ;slider background
243
   mov   ebx, [ebp]      ;x start/width
241
   mov   ebx, [ebp]      ;x start/width
244
   mov   ecx, [ebp+4]    ;y start/height
242
   mov   ecx, [ebp+4]    ;y start/height
245
   mov   edx, 0x00EBEBEB ;color
243
   mov   edx, 0x00EBEBEB ;color
246
   mcall                 ;draw bar
244
   mcall                 ;draw bar
247
;Draw line for slide rail
245
;Draw line for slide rail
248
   mov   eax, 38         ;draw vertical slide line
246
   mov   eax, 38         ;draw vertical slide line
249
   movzx ebx,word [ebp]  ;x
247
   movzx ebx,word [ebp]  ;x
250
   shr   ebx, 1          ;
248
   shr   ebx, 1          ;
251
   add    bx,word [ebp+2];
249
   add    bx,word [ebp+2];
252
   push   bx             ;
250
   push   bx             ;
253
   shl   ebx, 16         ;
251
   shl   ebx, 16         ;
254
   pop    bx             ;
252
   pop    bx             ;
255
   mov   ecx, [ebp+4]    ;y start / height
253
   mov   ecx, [ebp+4]    ;y start / height
256
   add   ecx, 0x000A0000 ;
254
   add   ecx, 0x000A0000 ;
257
   add   ecx, [ebp+6]    ;y start
255
   add   ecx, [ebp+6]    ;y start
258
   sub   ecx, 10         ;
256
   sub   ecx, 10         ;
259
   mov   edx, 0x00         ;color
257
   mov   edx, 0x00       ;color
260
   mcall              ;
258
   mcall              ;
261
;Draw slider box
259
;Draw slider box
262
   movzx eax,word [ebp+4]  ;height
260
   movzx eax,word [ebp+4]  ;height
263
   sub   eax, 20           ;
261
   sub   eax, 20           ;
264
   movzx ebx,word [ebp+10] ;max value
262
   movzx ebx,word [ebp+10] ;max value
265
   sub    bx,word [ebp+8]  ;min value
263
   sub    bx,word [ebp+8]  ;min value
266
   movzx ecx,word [ebp+12] ;
264
   movzx ecx,word [ebp+12] ;
267
   call  slider_fpu_calc   ;EAX = ((EAX/EBX)*ECX)
265
   call  slider_fpu_calc   ;EAX = ((EAX/EBX)*ECX)
268
   mov   ebx, [ebp]        ;x start / width
266
   mov   ebx, [ebp]        ;x start / width
269
   movzx ecx,word [ebp+4]  ;height
267
   movzx ecx,word [ebp+4]  ;height
270
   add    cx, [ebp+6]      ;y
268
   add    cx, [ebp+6]      ;y
271
   sub   ecx, 10           ;
269
   sub   ecx, 10           ;
272
   movzx edx, [box_h]      ;
270
   movzx edx, [box_h]      ;
273
   shr   edx, 1            ;
271
   shr   edx, 1            ;
274
   sub   ecx, edx          ;
272
   sub   ecx, edx          ;
275
   sub   ecx, eax          ;*slide box y position
273
   sub   ecx, eax          ;*slide box y position
276
   shl   ecx, 16           ;
274
   shl   ecx, 16           ;
277
   mov    cx, [box_h]      ;height
275
   mov    cx, [box_h]      ;height
278
   mov   eax, 13           ;draw bar sys function
276
   mov   eax, SF_DRAW_RECT ;draw bar sys function
279
   mov   edx, 0x00         ;color
277
   mov   edx, 0x00         ;color
280
   mcall               ;draw slider box
278
   mcall               ;draw slider box
281
   pop edx
-
 
282
   pop ecx
-
 
283
   pop ebx
-
 
284
   pop eax
279
   pop edx ecx ebx eax
285
ret
280
ret
286
 
281
 
287
slider_mouse_over:
282
slider_mouse_over:
288
   push eax
-
 
289
   push ebx
-
 
290
   push ecx
-
 
291
   push edx
283
   push eax ebx ecx edx
292
   cmp [mouseb], 1
284
   cmp [mouseb], 1
293
   jne slider_mouse_over_done
285
   jne slider_mouse_over_done
294
   movzx eax,word [ebp+4]
286
   movzx eax,word [ebp+4]
295
   add    ax, [ebp+6]
287
   add    ax, [ebp+6]
296
   sub   eax, 10
288
   sub   eax, 10
297
   cmp [mousey], ax
289
   cmp [mousey], ax
298
   ja slider_mouse_min
290
   ja slider_mouse_min
299
   movzx eax,word [ebp+6]
291
   movzx eax,word [ebp+6]
300
   add   eax, 10
292
   add   eax, 10
301
   cmp [mousey], ax
293
   cmp [mousey], ax
302
   jb slider_mouse_max
294
   jb slider_mouse_max
303
;determine new current value
295
;determine new current value
304
   movzx eax,word  [ebp+10] ;slider max value
296
   movzx eax,word  [ebp+10] ;slider max value
305
   sub    ax,word  [ebp+8]  ;slider min value
297
   sub    ax,word  [ebp+8]  ;slider min value
306
   movzx ebx,word [ebp+4]   ;slider height
298
   movzx ebx,word [ebp+4]   ;slider height
307
   sub   ebx,20             ;rail size
299
   sub   ebx,20             ;rail size
308
   movzx ecx,word [mousey]  ;current mouse y pixel
300
   movzx ecx,word [mousey]  ;current mouse y pixel
309
   sub   cx,word  [ebp+6]   ;minus y start of slider
301
   sub   cx,word  [ebp+6]   ;minus y start of slider
310
   sub   ecx, 10            ;minus pixels to top of rail
302
   sub   ecx, 10            ;minus pixels to top of rail
311
   call  slider_fpu_calc    ;EAX = ((EAX/EBX)*ECX)
303
   call  slider_fpu_calc    ;EAX = ((EAX/EBX)*ECX)
312
   movzx ebx,word [ebp+10]  ;slider max
304
   movzx ebx,word [ebp+10]  ;slider max
313
   sub   ebx,eax            ;*current calculated position
305
   sub   ebx,eax            ;*current calculated position
314
   jmp   slider_mouse_change;
306
   jmp   slider_mouse_change;
315
slider_mouse_max:           ;
307
slider_mouse_max:           ;
316
   movzx ebx,word [ebp+10]  ;get maximum value
308
   movzx ebx,word [ebp+10]  ;get maximum value
317
   jmp slider_mouse_change  ;
309
   jmp slider_mouse_change  ;
318
slider_mouse_min:           ;
310
slider_mouse_min:           ;
319
   movzx ebx,word [ebp+8]   ;get minimum value
311
   movzx ebx,word [ebp+8]   ;get minimum value
320
slider_mouse_change:        ;
312
slider_mouse_change:        ;
321
   mov   [ebp+12],bx        ;new slider current position
313
   mov   [ebp+12],bx        ;new slider current position
322
   call draw_slider         ;
314
   call draw_slider         ;
323
   call draw_slider_info    ;
315
   call draw_slider_info    ;
324
slider_mouse_over_done:     ;
316
slider_mouse_over_done:     ;
325
   pop edx
-
 
326
   pop ecx
-
 
327
   pop ebx
-
 
328
   pop eax
317
   pop edx ecx ebx eax
329
ret
318
ret
330
 
319
 
331
 
320
 
332
temp  dd 0   ;temp varibles used in fpu computations
321
temp  dd 0   ;temp varibles used in fpu computations
333
temp2 dd 0
322
temp2 dd 0
334
temp3 dd 0
323
temp3 dd 0
335
 
324
 
336
slider_fpu_calc:
325
slider_fpu_calc:
337
   mov   [temp],  eax
326
   mov   [temp],  eax
338
   mov   [temp2], ebx
327
   mov   [temp2], ebx
339
   mov   [temp3], ecx
328
   mov   [temp3], ecx
340
   finit                   ;initilize FPU
329
   finit                   ;initilize FPU
341
   fld   dword  [temp]     ;load value
330
   fld   dword  [temp]     ;load value
342
   fdiv  dword  [temp2]    ;divide
331
   fdiv  dword  [temp2]    ;divide
343
   fmul  dword  [temp3]    ;multiply
332
   fmul  dword  [temp3]    ;multiply
344
   fst   dword  [temp]     ;store computed value
333
   fst   dword  [temp]     ;store computed value
345
   mov   eax,   [temp]
334
   mov   eax,   [temp]
346
ret
335
ret
347
 
336
 
348
;**************************************************
337
;**************************************************
349
;* End Slider Code
338
;* End Slider Code
350
;**************************************************
339
;**************************************************
351
 
340
 
352
; DATA AREA
341
; DATA AREA
353
title     db  'Color Slider',0
342
title     db  'Color Slider',0
354
I_END:
343
I_END: