Subversion Repositories Kolibri OS

Rev

Rev 3587 | Rev 8271 | 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
;
3587 fedesco 44
; window X position ; +6
3417 mario79 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
3587 fedesco 146
;--------------------------------------
3380 mario79 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
3587 fedesco 172
 
3469 mario79 173
	cmp	eax,6
174
	je	mouse
3587 fedesco 175
 
3469 mario79 176
	jmp	still
3380 mario79 177
;---------------------------------------------------------------------
178
align 4
179
button:
180
	mcall	17
181
 
182
	cmp	ah, 2
183
	je	palette_button
3587 fedesco 184
 
3380 mario79 185
	cmp	ah, 3
186
	je	tone_button
3417 mario79 187
 
188
	cmp	ah, 4
189
	je	color_button
3587 fedesco 190
 
3473 mario79 191
	cmp	ah, 30
192
	jb	@f
3587 fedesco 193
 
3473 mario79 194
	cmp	ah, 39
195
	ja	@f
3587 fedesco 196
 
3473 mario79 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
3476 mario79 279
	mov	bx,510
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
6054 leency 284
	mov	bx,340
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
3587 fedesco 295
	mov	ebx,[communication_area]
3417 mario79 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
3587 fedesco 405
;---------------------------------------------------------------------
3469 mario79 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
3587 fedesco 418
	jne	.blue
3469 mario79 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
;---------------------------------------------------------------------
3476 mario79 479
align 4
480
draw_history_frame:
481
	mov	[frame_data.x],dword (c_start_x+c_size_x*2+10*2)*65536+80
482
	mov	[frame_data.y],dword (p_start_y+5)*65536+(p_size_y-5)
483
 
484
	mov	[frame_data.draw_text_flag],dword 1
3587 fedesco 485
 
3476 mario79 486
	mov	[frame_data.text_pointer],dword history_text
487
	push	dword frame_data
488
	call	[Frame_draw]
489
	ret
490
;---------------------------------------------------------------------
491
align 4
3473 mario79 492
draw_button_row:
493
	mov	edx,0x60000000 + 30		; BUTTON ROW
494
;	mov	ebx,220*65536+14
495
	mov	ebx,(c_start_x+c_size_x*2+10*3)*65536+14
3476 mario79 496
	mov	ecx,25*65536+14
3473 mario79 497
	mov	eax,8
498
;-----------------------------------
3476 mario79 499
align 4
3473 mario79 500
.newb:
501
	mcall
3476 mario79 502
	add	ecx,24*65536
3473 mario79 503
	inc	edx
504
	cmp	edx,0x60000000 + 39
505
	jbe	.newb
506
	ret
507
;---------------------------------------------------------------------
3476 mario79 508
align 4
509
draw_color_value:
510
	mov	ebx,(c_start_x+c_size_x*3+10)*65536+(c_size_x-1)
511
	mov	ecx,28*65536+11
512
	mov	edx,0xffffff
513
	mov	eax,13
514
	mov	edi,10
515
	mov	esi,[communication_area]
516
	add	esi,28
517
;-----------------------------------
518
align 4
3587 fedesco 519
@@:
3476 mario79 520
	mcall
521
	pusha
522
	mov	edx,ebx
523
	add	edx,2 shl 16
524
	shr	ecx,16
525
	mov	dx,cx
526
	add	dx,2
527
	mov	ecx,[esi]
528
	and	ecx,0xffffff
529
	mcall	47,0x00060100,,,0
530
	popa
3587 fedesco 531
 
3476 mario79 532
	add	ecx,24*65536
533
	add	esi,4
534
	dec	edi
535
	jnz	@b
536
 
537
	ret
538
;---------------------------------------------------------------------
539
align 4
3473 mario79 540
draw_colours:
541
	mov	edi,10
542
	mov	esi,[communication_area]
543
	add	esi,28
544
;	mov	ebx,220*65536+14
545
	mov	ebx,(c_start_x+c_size_x*2+10*3)*65536+14
3476 mario79 546
	mov	ecx,27*65536+14
3473 mario79 547
	mov	eax,13
548
	mov	[frame_data.draw_text_flag],dword 0
549
;--------------------------------------
3476 mario79 550
align 4
3473 mario79 551
newcol:
552
	mov	edx,[esi]
553
	mcall
554
 
555
	push	ebx ecx
556
 
557
	sub	ebx,2 shl 16
558
	add	bx,4
559
	sub	ecx,2 shl 16
560
	add	cx,4
3587 fedesco 561
 
3473 mario79 562
	mov	[frame_data.x],ebx
3587 fedesco 563
	mov	[frame_data.y],ecx
3473 mario79 564
 
565
	push	dword frame_data
566
	call	[Frame_draw]
567
 
568
	pop	ecx ebx
569
 
3476 mario79 570
	add	ecx,24*65536
3473 mario79 571
	add	esi,4
3587 fedesco 572
 
3473 mario79 573
	dec	edi
574
	jnz	newcol
575
 
576
	ret
577
;----------------------------------------------------------------------
3380 mario79 578
align 4
579
draw_window:
580
	mcall	12,1
3463 mario79 581
;	mcall	0, , , 0x33AABBCC,,title
3469 mario79 582
	xor	esi,esi
6054 leency 583
	mcall	0,[window_x],[window_y], 0x34EEEeee,,title
3380 mario79 584
	mcall	8,,,0x60000002
585
	mcall	,,,0x60000003
6054 leency 586
	mcall	,<296,80>,<280,22>,4,0x37A4D4
587
	mcall	,<402,80>,        ,1
588
	mcall   4,<332,289>,0x802C7B9E,OK_Cancel
589
	mcall   ,<331,288>,0x80FFFfff
3469 mario79 590
	xor	ebp,ebp
3380 mario79 591
	mcall	65,[palette_area],<[palette_SIZE_X],[palette_SIZE_Y]>,,24
592
	call	draw_tone
593
	call	draw_selected_color
3469 mario79 594
	xor	eax,eax
595
	inc	eax
596
	mov	[scroll_bar_data_red.all_redraw],eax
597
	mov	[scroll_bar_data_green.all_redraw],eax
598
	mov	[scroll_bar_data_blue.all_redraw],eax
599
	call	draw_scrollbars
3476 mario79 600
	call	draw_history_frame
3473 mario79 601
	call	draw_button_row
602
	call	draw_colours
3476 mario79 603
	call	draw_color_value
3380 mario79 604
	mcall	12,2
605
	ret
606
;---------------------------------------------------------------------
607
include 'palette.inc'
608
;---------------------------------------------------------------------
609
include 'tone.inc'
610
;---------------------------------------------------------------------
611
include 'i_data.inc'
612
;---------------------------------------------------------------------
613
IM_END:
614
;---------------------------------------------------------------------
615
include 'u_data.inc'
616
;---------------------------------------------------------------------
617
I_END:
3587 fedesco 618
;---------------------------------------------------------------------