Subversion Repositories Kolibri OS

Rev

Rev 267 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
178 heavyiron 1
;POP_WIDTH   = (popup_text.max_title+popup_text.max_accel+6)*6
2
POP_IHEIGHT = 16
3
;POP_HEIGHT  = popup_text.cnt_item*POP_IHEIGHT+popup_text.cnt_sep*4+4
4
 
5
func calc_middle
6
	shr	eax,1
7
	shr	ebx,1
8
	and	eax,0x007F7F7F
9
	and	ebx,0x007F7F7F
10
	add	eax,ebx
11
	ret
12
endf
13
 
14
func calc_3d_colors
15
	pushad
16
	m2m	[cl_3d_normal],[sc.work]
17
	m2m	[cl_3d_inset],[sc.work_graph]
18
	push	[cl_3d_normal]
19
	add	byte[esp],48
20
	jnc	@f
21
	mov	byte[esp],255
22
    @@: add	byte[esp+1],48
23
	jnc	@f
24
	mov	byte[esp+1],255
25
    @@: add	byte[esp+2],48
26
	jnc	@f
27
	mov	byte[esp+2],255
28
    @@: pop	[cl_3d_outset]
29
	mov	eax,[cl_3d_inset]
30
	mov	ebx,[cl_3d_outset]
31
	call	calc_middle
32
	mov	[cl_3d_pushed],eax
33
	mov	eax,[cl_3d_normal]
34
	mov	ebx,[sc.work_text]
35
	call	calc_middle
36
	mov	[cl_3d_grayed],eax
37
	popad
38
	ret
39
endf
40
 
41
func draw_3d_panel ; x,y,w,h
42
	cmp	dword[esp+8],4
43
	jl	.exit
44
	cmp	dword[esp+4],4
45
	jl	.exit
46
	mov	ebx,[esp+16-2]
47
	mov	bx,[esp+8]
48
	inc	ebx
49
	mov	ecx,[esp+12-2]
50
	mov	cx,[esp+4]
51
	inc	ecx
52
	mcall	13,,,[cl_3d_normal];0x00EEEEEE;[sc.work]
53
	dec	ebx
54
	add	bx,[esp+16]
55
	mov	cx,[esp+12]
56
	mcall	38,,,[cl_3d_inset];0x006382BF;[sc.work_text]
57
	add	ecx,[esp+4-2]
58
	add	cx,[esp+4]
59
	mcall
60
	mov	bx,[esp+16]
61
	mov	ecx,[esp+12-2]
62
	mov	cx,[esp+4]
63
	add	cx,[esp+12]
64
	mcall
65
	add	ebx,[esp+8-2]
66
	add	bx,[esp+8]
67
	mcall
68
	mov	ebx,[esp+16-2]
69
	mov	bx,[esp+8]
70
	add	bx,[esp+16]
71
	add	ebx,1*65536-1
72
	mov	ecx,[esp+12-2]
73
	mov	cx,[esp+12]
74
	add	ecx,0x00010001
75
	mcall	,,,[cl_3d_outset]
76
	mov	bx,[esp+16]
77
	inc	ebx
78
	mov	ecx,[esp+12-2]
79
	mov	cx,[esp+4]
80
	add	cx,[esp+12]
81
	add	ecx,2*65536-1
82
	mcall
83
  .exit:
84
	ret	4*4
85
endf
86
 
87
popup_thread_start:
88
	mov	[popup_active],1
89
	mov	[pi_cur],0
90
	mov	ebp,[esp]
91
	mcall	14
92
	movzx	ebx,ax
93
	shr	eax,16
94
	movzx	ecx,[ebp+POPUP.x]
95
	add	cx,[ebp+POPUP.width]
96
	cmp	ecx,eax
97
	jle	@f
98
	mov	cx,[ebp+POPUP.width]
99
	sub	[ebp+POPUP.x],cx
100
    @@: movzx	ecx,[ebp+POPUP.y]
101
	add	cx,[ebp+POPUP.height]
102
	cmp	ecx,ebx
103
	jle	@f
104
	mov	cx,[ebp+POPUP.height]
105
	sub	[ebp+POPUP.y],cx
106
    @@: mcall	40,01100111b		; ipc mouse button key redraw
107
	cmp	[mi_cur],0
108
	jl	.2
109
	sub	esp,32-16
110
	push	0 0 8 0
111
	mcall	60,1,esp,32
112
  .2:	call	draw_popup_wnd
113
 
114
  still_popup:
115
	cmp	[main_closed],1
116
	je	close_popup
117
	mcall	10
118
	cmp	eax,1
119
	je	popup_thread_start.2
120
	cmp	eax,2
121
	je	key_popup
122
	cmp	eax,3
123
	je	button_popup
124
	cmp	eax,6
125
	je	mouse_popup
126
	cmp	eax,7
127
	jne	still_popup
128
 
129
	mov	ebp,[POPUP_STACK];-32+12+4]
130
	mov	dword[POPUP_STACK-32+4],8
131
	movzx	ebx,[ebp+POPUP.x]
132
	movzx	ecx,[ebp+POPUP.y]
133
	movzx	edx,[ebp+POPUP.width]
134
	movzx	esi,[ebp+POPUP.height]
135
	mcall	67
136
;       call    draw_popup_wnd
137
	jmp	still_popup
138
 
139
  mouse_popup:
140
	mov	ecx,mst2
141
	call	get_mouse_event
142
	cmp	al,MEV_LDOWN
143
	je	check_popup_click
144
	cmp	al,MEV_MOVE
145
	je	check_popup_move
146
 
147
	mcall	9,p_info2,-1
148
	cmp	ax,[p_info2.window_stack_position]
149
	jne	close_popup
150
 
151
	jmp	still_popup
152
 
153
  check_popup_click:
154
	mov	eax,[pi_cur]
155
	or	al,al
156
	js	close_popup
157
	jz	still_popup
158
	mov	ebx,[ebp+POPUP.actions]
159
	mov	[just_from_popup],1
160
	call	dword[ebx+eax*4-4];dword[popup_text.actions+eax*4-4]
161
	inc	[just_from_popup]
162
	jmp	close_popup
163
 
164
  check_popup_move:
165
	mov	eax,[pi_cur]
166
	call	get_active_popup_item
167
	cmp	eax,[pi_cur]
168
	je	still_popup
169
	call	draw_popup_wnd
170
	jmp	still_popup
171
 
172
  key_popup:
173
	mcall	;2
174
	cmp	ah,27
175
	jne	still_popup
176
 
177
  button_popup:
178
	mcall	17
179
 
180
  close_popup:
181
	mcall	18,3,[p_info.PID]
182
	mov	[popup_active],0
183
	mcall	-1
184
 
185
func draw_popup_wnd
186
	mcall	12,1
187
 
188
;       mcall   48,3,sc,sizeof.system_colors
189
;       call    calc_3d_colors
190
 
191
;        mov     ebx,[p_pos]
192
;        mov     ecx,[p_pos-2]
193
;        mov     bx,POP_WIDTH
194
;        mov     cx,POP_HEIGHT
195
	mov	ebx,dword[ebp+POPUP.x-2]
196
	mov	bx,[ebp+POPUP.width]
197
	mov	ecx,dword[ebp+POPUP.y-2]
198
	mov	cx,[ebp+POPUP.height]
199
	mcall	0,,,0x01000000,0x01000000
200
 
201
	movzx	ebx,bx
202
	movzx	ecx,cx
203
	pushd	0 0 ebx ecx ;POP_WIDTH POP_HEIGHT
204
	call	draw_3d_panel
205
 
206
	mov	[pi_sel],0
207
;        mcall   37,1
208
;        movsx   ebx,ax
209
;        sar     eax,16
210
;        mov     [c_pos.x],eax
211
;        mov     [c_pos.y],ebx
212
 
213
	mov	eax,4
214
	mpack	ebx,3*6,3
215
	mov	ecx,[sc.work_text]
216
	mov	edx,[ebp+POPUP.data];popup_text.data
217
    @@: inc	[pi_sel]
218
	inc	edx
219
	movzx	esi,byte[edx-1]
220
	cmp	byte[edx],'-'
221
	jne	.lp1
222
	pushad
223
	mov	ecx,ebx
224
	shl	ecx,16
225
	mov	cx,bx
226
	movzx	ebx,[ebp+POPUP.width]
227
	add	ebx,0x00010000-1
228
;       mpack   ebx,1,POP_WIDTH-1
229
	add	ecx,0x00010001
230
	mcall	38,,,[cl_3d_inset];0x006382BF;[sc.work_text]
231
	add	ecx,0x00010001
232
	mcall	,,,[cl_3d_outset];0x00FFFFFF
233
	popad
234
	add	ebx,4
235
	jmp	.lp2
236
  .lp1: mov	edi,[pi_sel]
237
	cmp	edi,[pi_cur]
238
	jne	.lp3
239
	test	byte[ebp+edi-1],0x01 ; byte[popup_text+edi-1],0x01
240
	jz	.lp3
241
	pushad
242
	movzx	ecx,bx
243
	shl	ecx,16
244
	mov	cl,POP_IHEIGHT-1
245
	movzx	ebx,[ebp+POPUP.width]
246
	add	ebx,0x00010000-1
247
;       mpack   ebx,1,POP_WIDTH-1
248
	mcall	13,,,[cl_3d_pushed];0x00A3B8CC
249
	rol	ecx,16
250
	mov	ax,cx
251
	rol	ecx,16
252
	mov	cx,ax
253
	mcall	38,,,[cl_3d_inset];0x006382BF
254
	add	ecx,(POP_IHEIGHT-1)*65536+POP_IHEIGHT-1
255
	mcall	,,,[cl_3d_outset];0x00FFFFFF
256
	popad
257
  .lp3: add	ebx,(POP_IHEIGHT-7)/2
258
 
259
	pushad
260
	test	byte[ebp+edi-1],0x02
261
	jz	.lp8
262
	movzx	ecx,bx
263
	shl	ecx,16
264
	mov	cx,bx
265
	shr	ebx,16
266
	push	bx
267
	shl	ebx,16
268
	pop	bx
269
	add	ecx,0x00040003
270
	sub	ebx,0x000A000B
271
	mcall	38,,,[sc.work_text]
272
	add	ecx,0x00010001
273
	mcall
274
	add	ebx,4
275
	sub	ecx,2
276
	mcall
277
	sub	ecx,0x00010001
278
	mcall
279
  .lp8: popad
280
 
281
	mov	ecx,[sc.work_text];0x00000000
282
	test	byte[ebp+edi-1],0x01 ; byte[popup_text+edi-1],0x01
283
	jnz	.lp5
284
	add	ebx,0x00010001
285
	mov	ecx,[cl_3d_outset]
286
	mcall
287
	sub	ebx,0x00010001
288
	mov	ecx,[cl_3d_inset]
289
	;mov     ecx,[sc.grab_text];0x007F7F7F
290
  .lp5: mcall
291
	push	ebx
292
	add	edx,esi
293
	inc	edx
294
	movzx	esi,byte[edx-1]
295
	add	ebx,[ebp+POPUP.acc_ofs] ; ((popup_text.max_title+2)*6-1)*65536
296
	cmp	edi,[pi_cur]
297
	je	.lp4
298
	mov	ecx,[cl_3d_inset];0x006382BF
299
  .lp4: test	byte[ebp+edi-1],0x01 ; byte[popup_text+edi-1],0x01
300
	jnz	.lp6
301
	add	ebx,0x00010001
302
	mov	ecx,[cl_3d_outset]
303
	mcall
304
	sub	ebx,0x00010001
305
	mov	ecx,[cl_3d_inset]
306
	;mov     ecx,[sc.grab_text];0x007F7F7F
307
  .lp6: mcall
308
	pop	ebx
309
	add	ebx,POP_IHEIGHT-(POP_IHEIGHT-7)/2
310
  .lp2: add	edx,esi
311
	cmp	byte[edx],0
312
	jne	@b
313
  .exit:
314
	mcall	12,2
315
	ret
316
endf
317
 
318
pi_sel	 dd ?
319
pi_cur	 dd ?
320
p_pos	 dd ?
321
popup_active db 0