Subversion Repositories Kolibri OS

Rev

Rev 3469 | Rev 3476 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3380 mario79 1
;*****************************************************************************
2
; Color Dialog - for Kolibri OS
3
; Copyright (c) 2013, Marat Zakiyanov aka Mario79, aka Mario
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:
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.
16
;
17
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY
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
;*****************************************************************************
3417 mario79 28
;---------------------------------------------------------------------
29
;Some documentation for memory
30
;
31
;area name db 'FFFFFFFF_color_dialog',0 ; FFFFFFFF = PID
32
;
33
; communication area data
34
; flag  ; +0
35
; dw 0   ; 0 - empty, 1 - OK, color selected
36
;          2 - use another method/not found program, 3 - cancel
37
;
38
; type of dialog:  0-Palette&Tone
39
; dw 0 ; +2
40
;
41
; window X size ; +4
42
; dw 0
43
;
44
; window X position ; +6
45
; dw 0
46
;
47
; window y size ; +8
48
; dw 0
49
;
50
; window Y position ; +10
51
; dw 0
52
;
53
; ColorDialog WINDOW SLOT ; +12
54
; dd 0
55
;
56
; Color type ; +16
57
; dd 0
58
;
59
; Color value ; +20
60
; dd 0
3473 mario79 61
 
62
; First start flag ; +24
63
; dd 0 ; 0 - first start, 1 - subsequent starts
64
;
65
; Old colors ; +28
66
; rd 10
67
;
68
; Free area ; +68
3417 mario79 69
;---------------------------------------------------------------------
3380 mario79 70
  use32
71
  org	 0x0
72
 
73
  db	 'MENUET01'
74
  dd	 0x01
75
  dd	 START
76
  dd	 IM_END
77
  dd	 I_END
78
  dd	 stacktop
3417 mario79 79
  dd	 param
3469 mario79 80
  dd	 path
3380 mario79 81
;---------------------------------------------------------------------
82
include '../../macros.inc'
3469 mario79 83
include '../../develop/libraries/box_lib/load_lib.mac'
84
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
3380 mario79 85
;include 'lang.inc'
3469 mario79 86
;include '../../debug.inc'
87
@use_library
3380 mario79 88
;---------------------------------------------------------------------
89
p_start_x = 10
90
p_start_y = 10
91
 
92
p_size_x = 20
93
p_size_y = 256
94
;--------------------------------------
95
t_start_x = 40
96
t_start_y = 10
97
;--------------------------------------
98
w_start_x = 200
99
w_start_y = 200
100
 
101
w_size_x = 400
102
w_size_y = 350
103
;--------------------------------------
104
c_start_x = t_start_x + p_size_y + 10
105
c_start_y = 10
106
 
107
c_size_x = 40
108
c_size_y = 20
109
;---------------------------------------------------------------------
3463 mario79 110
x_minimal_size equ 350
111
y_minimal_size equ 250
112
;---------------------------------------------------------------------
3380 mario79 113
START:
114
	mcall	68,11
3417 mario79 115
	mcall	66,1,1
116
	mcall	40,0x27
3469 mario79 117
;	mcall	40,0x7
3417 mario79 118
	call	get_communication_area
119
	call	get_active_pocess
3473 mario79 120
	call	clear_colors_history
121
;--------------------------------------
3469 mario79 122
load_libraries	l_libs_start,end_l_libs
123
	test	eax,eax
124
	jnz	button.exit_2
3473 mario79 125
;--------------------------------------
3380 mario79 126
	xor	eax,eax
127
	mov	al,p_size_x
128
	mov	[palette_SIZE_X],eax
129
	mov	ax,p_size_y
130
	mov	[palette_SIZE_Y],eax
131
	mov	[tone_SIZE_X],eax
132
	mov	[tone_SIZE_Y],eax
133
	mov	eax,0xff0000
134
	mov	[tone_color],eax
135
	mov	[selected_color],eax
3469 mario79 136
	call	prepare_scrollbars_position_from_color
3380 mario79 137
;--------------------------------------
138
	mov	ecx,[palette_SIZE_Y]
139
	imul	ecx,[palette_SIZE_X]
140
	lea	ecx,[ecx*3]
141
	inc	ecx	;reserve for stosd
142
	mcall	68,12
143
	mov	[palette_area],eax
144
;--------------------------------------
145
	call	create_palette
146
;--------------------------------------
147
	mov	ecx,[tone_SIZE_Y]
148
	imul	ecx,[tone_SIZE_X]
149
	lea	ecx,[ecx*3]
150
	inc	ecx	;reserve for stosd
151
	mcall	68,12
152
	mov	[tone_area],eax
153
;--------------------------------------
154
	call    create_tone
155
;---------------------------------------------------------------------
156
align 4
157
red:
158
	call	draw_window
159
;---------------------------------------------------------------------
160
align 4
161
still:
162
	mcall	10
163
 
164
	cmp	eax,1
165
	je	red
166
 
167
	cmp	eax,2
168
	je	key
169
 
170
	cmp	eax,3
3469 mario79 171
	je	button
172
 
173
	cmp	eax,6
174
	je	mouse
175
 
176
	jmp	still
3380 mario79 177
;---------------------------------------------------------------------
178
align 4
179
button:
180
	mcall	17
181
 
182
	cmp	ah, 2
183
	je	palette_button
184
 
185
	cmp	ah, 3
186
	je	tone_button
3417 mario79 187
 
188
	cmp	ah, 4
189
	je	color_button
3380 mario79 190
 
3473 mario79 191
	cmp	ah, 30
192
	jb	@f
193
 
194
	cmp	ah, 39
195
	ja	@f
196
 
197
	sub	ah,30
198
	movzx	eax,ah
199
	shl	eax,2
200
	add	eax,[communication_area]
201
	add	eax,28
202
	mov	eax,[eax]
203
	mov	[selected_color],eax
204
	call	prepare_scrollbars_position_from_color
205
	call	draw_selected_color
206
	call	draw_scrollbars
207
	jmp	still
208
;--------------------------------------
209
align 4
210
@@:
3380 mario79 211
	cmp	ah, 1
212
	jne	still
3473 mario79 213
;--------------------------------------
214
align 4
3380 mario79 215
.exit:
3417 mario79 216
	mov	eax,[communication_area]
217
	mov	[eax],word 3
3473 mario79 218
	jmp	@f
3417 mario79 219
; dps "CD flag value: cancel "
3473 mario79 220
;--------------------------------------
221
align 4
3417 mario79 222
.exit_1:
3473 mario79 223
;--------------------------------------
224
	call	scroll_colors_history
225
;--------------------------------------
226
align 4
227
@@:
228
;	mov	ax,[eax]
229
;	and	eax,0xffff
3417 mario79 230
; dps "CD flag value: "
231
; dpd eax
232
; newline
233
 
3463 mario79 234
	call	get_window_param
235
	mov	ebx,[communication_area]
236
	mov	ecx,procinfo
237
;	mov	eax,[window_x]
238
	mov	eax,[ecx+34]
239
	shl	eax,16
240
	add	eax,[ecx+42]
241
	mov	[ebx+4],eax
242
;	mov	eax,[window_y]
243
	mov	eax,[ecx+38]
244
	shl	eax,16
245
	add	eax,[ecx+46]
246
	mov	[ebx+8],eax
3473 mario79 247
;--------------------------------------
248
align 4
3469 mario79 249
.exit_2:
3380 mario79 250
	mcall	-1
251
;---------------------------------------------------------------------
3473 mario79 252
align 4
3463 mario79 253
get_window_param:
254
	mcall	9,procinfo,-1
255
	mov	eax,[ebx+66]
256
	inc	eax
257
;	mov	[window_high],eax
258
	mov	eax,[ebx+62]
259
	inc	eax
260
;	mov	[window_width],eax
261
	mov	eax,[ebx+70]
262
;	mov	[window_status],eax
263
	ret
264
;---------------------------------------------------------------------
3380 mario79 265
align 4
3417 mario79 266
get_communication_area:
267
	xor	eax,eax
268
	mov	al,[param]
269
	test	eax,eax
270
	jz	@f
271
	mcall	68,22,param,,0x01
272
	mov	[communication_area],eax
273
;	movzx	ebx,word [eax+2]
274
;	mov	[color_dialog_type],ebx
275
 
3463 mario79 276
	mov	ebx,[eax+4]
3469 mario79 277
;	cmp	bx,word x_minimal_size ;300
278
;	jb	@f
3473 mario79 279
	mov	bx,450
3463 mario79 280
	mov	[window_x],ebx
281
	mov	ebx,[eax+8]
3469 mario79 282
;	cmp	bx,word y_minimal_size ;200
283
;	jb	@f
284
	mov	bx,320
3463 mario79 285
	mov	[window_y],ebx
3417 mario79 286
@@:
287
	ret
288
;---------------------------------------------------------------------
289
align 4
290
get_active_pocess:
291
	mcall	9,procinfo,-1
292
	mov	ecx,[ebx+30]	; PID
293
	mcall	18,21
294
	mov	[active_process],eax	; WINDOW SLOT
295
	mov	ebx,[communication_area]
296
	test	ebx,ebx
297
	jz	.1
298
	mov	[ebx+12],eax	; WINDOW SLOT to com. area
299
.1:
300
	ret
301
;---------------------------------------------------------------------
302
align 4
3473 mario79 303
clear_colors_history:
304
	mov	edi,[communication_area]
305
	cmp	[edi+24],dword 1
306
	je	@f
307
	mov	[edi+24],dword 1
308
	add	edi,28
309
	mov	ecx,10
310
	cld
311
	mov	eax,0xffffff
312
	rep	stosd
313
@@:
314
	ret
315
;---------------------------------------------------------------------
316
align 4
317
scroll_colors_history:
318
	mov	edi,[communication_area]
319
	add	edi,28
320
	mov	eax,[selected_color]
321
	cmp	[edi],eax
322
	je	@f
323
	mov	ecx,9
324
	mov	esi,edi
325
	add	esi,32
326
	add	edi,36
327
	std
328
	rep	movsd
329
	mov	edi,[communication_area]
330
	mov	[edi+28],eax
331
@@:
332
	ret
333
;---------------------------------------------------------------------
334
align 4
3380 mario79 335
palette_button:
336
	mcall	37,1
337
	and	eax,0xffff
338
	sub	eax,p_start_y
339
	imul	eax,p_size_x
340
	lea	eax,[eax+eax*2]
341
	add	eax,[palette_area]
342
	mov	eax,[eax]
343
	mov	[tone_color],eax
344
	mov	[selected_color],eax
3469 mario79 345
	call	prepare_scrollbars_position_from_color
3380 mario79 346
	call	create_and_draw_tone
347
	call	draw_selected_color
3469 mario79 348
	call	draw_scrollbars
3380 mario79 349
	jmp	still
350
;---------------------------------------------------------------------
351
align 4
352
tone_button:
353
	mcall	37,1
354
	mov	ebx,eax
355
	and	eax,0xffff
356
	shr	ebx,16
357
	sub	eax,t_start_y
358
	imul	eax,p_size_y
359
	sub	ebx,t_start_x
360
	add	eax,ebx
361
	lea	eax,[eax+eax*2]
362
	add	eax,[tone_area]
363
	mov	eax,[eax]
364
	mov	[selected_color],eax
3469 mario79 365
	call	prepare_scrollbars_position_from_color
3380 mario79 366
	call	draw_selected_color
3469 mario79 367
	call	draw_scrollbars
3380 mario79 368
	jmp	still
369
;---------------------------------------------------------------------
370
align 4
3417 mario79 371
color_button:
372
	mov	eax,[communication_area]
373
	mov	[eax],word 1
374
	mov	ebx,[selected_color]
3463 mario79 375
	and	ebx,0xffffff
3417 mario79 376
	mov	[eax+20],ebx
377
; dps "CD flag value: OK "
378
	jmp	button.exit_1
379
;---------------------------------------------------------------------
380
align 4
3469 mario79 381
prepare_scrollbars_position_from_color:
382
; in: eax = selected color
383
	movzx	ebx,al
384
	mov	[scroll_bar_data_blue.position],ebx
385
	shr	eax,8
386
	mov	bl,al
387
	mov	[scroll_bar_data_green.position],ebx
388
	shr	eax,8
389
	mov	bl,al
390
	mov	[scroll_bar_data_red.position],ebx
391
	ret
392
;---------------------------------------------------------------------
393
align 4
394
prepare_color_from_scrollbars_position:
395
; out: ebx = selected color
396
	mov	eax,[scroll_bar_data_red.position]
397
	movzx	ebx,al
398
	shl	ebx,8
399
	mov	eax,[scroll_bar_data_green.position]
400
	mov	bl,al
401
	shl	ebx,8
402
	mov	eax,[scroll_bar_data_blue.position]
403
	mov	bl,al
404
	ret
405
;---------------------------------------------------------------------
406
align 4
3380 mario79 407
key:
408
	mcall	2
409
	jmp	still
410
;---------------------------------------------------------------------
411
align 4
3469 mario79 412
mouse:
413
	cmp	[scroll_bar_data_red.delta2],0
414
	jne	.red
415
	cmp	[scroll_bar_data_green.delta2],0
416
	jne	.green
417
	cmp	[scroll_bar_data_blue.delta2],0
418
	jne	.blue
419
;--------------------------------------
420
align 4
421
.red:
422
	push	dword scroll_bar_data_red
423
	call	[scrollbar_ver_mouse]
424
	cmp	[scroll_bar_data_red.delta2],0
425
	jne	@f
426
;--------------------------------------
427
align 4
428
.green:
429
	push	dword scroll_bar_data_green
430
	call	[scrollbar_ver_mouse]
431
	cmp	[scroll_bar_data_green.delta2],0
432
	jne	@f
433
;--------------------------------------
434
align 4
435
.blue:
436
	push	dword scroll_bar_data_blue
437
	call	[scrollbar_ver_mouse]
438
;	cmp	[scroll_bar_data_blue.delta2],0
439
;	jne	@f
440
;--------------------------------------
441
align 4
442
@@:
443
	call	prepare_color_from_scrollbars_position
444
	cmp	[selected_color],ebx
445
	je	still
446
	mov	[selected_color],ebx
447
	call	draw_selected_color
448
	jmp	still
449
;---------------------------------------------------------------------
450
align 4
3380 mario79 451
draw_selected_color:
452
	mcall	13,,,[selected_color]
3469 mario79 453
	mcall	13,,,0xffffff
454
	mov	ecx,[selected_color]
455
	and	ecx,0xffffff
456
	mcall	47,0x00060100,,,0
3380 mario79 457
	ret
458
;---------------------------------------------------------------------
459
align 4
460
create_and_draw_tone:
461
	call    create_tone
462
	call    draw_tone
463
	ret
464
;---------------------------------------------------------------------
465
align 4
466
draw_tone:
467
	mcall	65,[tone_area],<[tone_SIZE_X],[tone_SIZE_Y]>,,24
468
	ret
469
;---------------------------------------------------------------------
3469 mario79 470
draw_scrollbars:
471
	push	dword scroll_bar_data_red
472
	call	[scrollbar_ver_draw]
473
	push	dword scroll_bar_data_green
474
	call	[scrollbar_ver_draw]
475
	push	dword scroll_bar_data_blue
476
	call	[scrollbar_ver_draw]
477
	ret
478
;---------------------------------------------------------------------
3473 mario79 479
draw_button_row:
480
	mov	edx,0x60000000 + 30		; BUTTON ROW
481
;	mov	ebx,220*65536+14
482
	mov	ebx,(c_start_x+c_size_x*2+10*3)*65536+14
483
	mov	ecx,20*65536+14
484
	mov	eax,8
485
;-----------------------------------
486
.newb:
487
	mcall
488
	add	ecx,25*65536
489
	inc	edx
490
	cmp	edx,0x60000000 + 39
491
	jbe	.newb
492
	ret
493
;---------------------------------------------------------------------
494
draw_colours:
495
	mov	edi,10
496
	mov	esi,[communication_area]
497
	add	esi,28
498
;	mov	ebx,220*65536+14
499
	mov	ebx,(c_start_x+c_size_x*2+10*3)*65536+14
500
	mov	ecx,20*65536+14
501
	mov	eax,13
502
	mov	[frame_data.draw_text_flag],dword 0
503
;--------------------------------------
504
newcol:
505
	mov	edx,[esi]
506
	mcall
507
 
508
	push	ebx ecx
509
 
510
	sub	ebx,2 shl 16
511
	add	bx,4
512
	sub	ecx,2 shl 16
513
	add	cx,4
514
 
515
	mov	[frame_data.x],ebx
516
	mov	[frame_data.y],ecx
517
 
518
	push	dword frame_data
519
	call	[Frame_draw]
520
 
521
	pop	ecx ebx
522
 
523
	add	ecx,25*65536
524
	add	esi,4
525
 
526
	dec	edi
527
	jnz	newcol
528
 
529
	ret
530
;----------------------------------------------------------------------
3380 mario79 531
align 4
532
draw_window:
533
	mcall	12,1
3463 mario79 534
;	mcall	0, , , 0x33AABBCC,,title
3469 mario79 535
	xor	esi,esi
536
	mcall	0,[window_x],[window_y], 0x34AABBCC,,title
3380 mario79 537
	mcall	8,,,0x60000002
538
	mcall	,,,0x60000003
3469 mario79 539
	mcall	,,,0x60000004
540
	xor	ebp,ebp
3380 mario79 541
	mcall	65,[palette_area],<[palette_SIZE_X],[palette_SIZE_Y]>,,24
542
	call	draw_tone
543
	call	draw_selected_color
3469 mario79 544
	xor	eax,eax
545
	inc	eax
546
	mov	[scroll_bar_data_red.all_redraw],eax
547
	mov	[scroll_bar_data_green.all_redraw],eax
548
	mov	[scroll_bar_data_blue.all_redraw],eax
549
	call	draw_scrollbars
3473 mario79 550
	call	draw_button_row
551
	call	draw_colours
3380 mario79 552
	mcall	12,2
553
	ret
554
;---------------------------------------------------------------------
555
include 'palette.inc'
556
;---------------------------------------------------------------------
557
include 'tone.inc'
558
;---------------------------------------------------------------------
559
include 'i_data.inc'
560
;---------------------------------------------------------------------
561
IM_END:
562
;---------------------------------------------------------------------
563
include 'u_data.inc'
564
;---------------------------------------------------------------------
565
I_END:
566
;---------------------------------------------------------------------