'log_el' - add cursors, other small changes

git-svn-id: svn://kolibrios.org@2482 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA 2012-03-19 22:35:36 +00:00
parent 677e27838b
commit 792bc24b21
7 changed files with 192 additions and 34 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -48,7 +48,7 @@ table
</head>
<body>
<h1>Логические элементы версия от 15.03.2012</h1>
<h1>Логические элементы версия от 20.03.2012</h1>
<p>Оглавление</p>
<ul>
<li>О программе</li>
@ -90,6 +90,7 @@ table
<p><img src="tb_pen_1.png"> - установка режима рисования проводов</p>
<p><img src="tb_pen_2.png"> - установка режима рисования точек для проводов без пересечений</p>
<p><img src="tb_eraser.png"> - установка режима стирания проводов</p>
<p><img src="tb_element.png"> - установка режима рисования логических элементов</p>
<p>Редактирование многих объектов еще не сделано :( ... Пока можно редактировать файлы со схемами текстовыми редакторами, но это не удобно. Потому создание новых схем сейчас проблематично.</p>
<h3>Сохранение</h3>
@ -101,7 +102,7 @@ table
<p>На рисунке число a (a0+a1 = 1+2 = 3) умножается на b (b1+b3 = 2+8 = 10) и на выходе получается c (c1+c2+c3+c4 = 2+4+8+16 = 30).</p>
<h2><a name="v_obj">Виды объектов</a></h2>
<p>В файлах со схемами есть 4 вида объектов.</p>
<p>В файлах со схемами есть 4 вида объектов: ключевые точки, провода без пересечений, логические элементы и надписи.</p>
<h3><a name="obj_poi">Ключевая точка</a></h3>
<p>Ключевая точка это промежуточный объект, который служит для создания проводов. Ключевая точка состоит из 2-х координат и переменной направлений. Направлений может быть максимум 4 (<i>вверх</i>, <i>вниз</i>, <i>влево</i>, <i>вправо</i>). Они определяют в какую сторону от даной точки рисовать провод. При встрече другой ключевой точки или достижении конца схемы рисование провода прекращается. Таким образом ключевые точки это векторные объекты на основе которых рисуются провода, что позволяет уменьшить размер файла со схемой.</p>

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 686 B

View File

@ -47,7 +47,7 @@ include 'le_pole.inc'
include 'le_signal.inc'
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
caption db '‹®£¨ç¥áª¨¥ í«¥¬¥­âë 15.03.12',0 ;¯®¤¯¨áì ®ª­ 
caption db '‹®£¨ç¥áª¨¥ í«¥¬¥­âë 20.03.12',0 ;¯®¤¯¨áì ®ª­ 
panel_0_coord_top equ 5 ;¢¥àå­ïï ª®®à¤¨­ â  0-£® à鸞 ¯ ­¥«¨ ¨­áâà㬥­â®¢
panel_1_coord_top equ 35
@ -127,11 +127,13 @@ tbl_not db 1,0 ;not
time dd 0
tim_ch db 0
pen_mode dd 0 ;०¨¬ à¨á®¢ ­¨ï ¯à®¢®¤ 
pen_coord_x dd 0 ;ª®®à¤¨­ â  x ­ ç «ì­®© â®çª¨ à¨á®¢ ­¨ï
pen_coord_y dd 0
txt_set_0 db '0',0
txt_set_1 db '1',0
txt_mov_l db 27,0 ;<-
txt_mov_r db 26,0 ;->
;txt_mov_l db 27,0 ;<-
;txt_mov_r db 26,0 ;->
txt_size db 'size',0
txt_elements db 'elements',0
@ -150,7 +152,7 @@ run_file_70 FileInfoBlock
image_data dd 0 ;㪠§ â¥«ì ­  ¢à¥¬¥­­ãî ¯ ¬ïâì. ¤«ï ­ã¦¥­ ¯à¥®¡à §®¢ ­¨ï ¨§®¡à ¦¥­¨ï
IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3
IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*15
IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*20
image_data_toolbar dd 0
TREE_ICON_SYS16_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*11+54 ;à §¬¥à bmp ä ©«  á á¨á⥬­ë¬¨ ¨ª®­ª ¬¨
@ -161,6 +163,9 @@ icon_toolbar dd 0 ;㪠
IMAGE_FONT_SIZE equ 128*144*3
image_data_gray dd 0 ;¯ ¬ïâì á ¢à¥¬¥­­ë¬¨ á¥à묨 ¨§®¡à ¦¥­¨ï¬¨ ¢ ä®à¬ â¥ 24-bit, ¨§ ª®â®àëå ¡ã¤ãâ ᮧ¤ ¢ âìáï âà ä à¥âë
cursors_count equ 4
IMAGE_CURSORS_SIZE equ 4096*cursors_count ;à §¬¥à ª à⨭ª¨ á ªãàá®à ¬¨
macro load_image_file path,buf,size { ;¬ ªà®á ¤«ï § £à㧪¨ ¨§®¡à ¦¥­¨©
;path - ¬®¦¥â ¡ëâì ¯¥à¥¬¥­­®© ¨«¨ áâப®¢ë¬ ¯ à ¬¥â஬
if path eqtype '' ;¯à®¢¥à塞 § ¤ ­ «¨ áâப®© ¯ à ¬¥âà path
@ -231,6 +236,7 @@ start:
mov eax,dword[icon_toolbar]
mov dword[tree1.data_img],eax
;*** § £à㧪  èà¨äâ 
load_image_file 'font6x9.bmp', image_data_gray,IMAGE_FONT_SIZE
stdcall [buf2d_create_f_img], buf_font,[image_data_gray] ;ᮧ¤ ¥¬ ¡ãä¥à
stdcall mem.Free,[image_data_gray] ;®á¢®¡®¦¤ ¥¬ ¯ ¬ïâì
@ -238,6 +244,18 @@ start:
stdcall [buf2d_conv_24_to_8], buf_font,1 ;¤¥« ¥¬ ¡ãä¥à ¯à®§à ç­®á⨠8 ¡¨â
stdcall [buf2d_convert_text_matrix], buf_font
;*** § £à㧪  ªãàá®à®¢
load_image_file 'cursors_gr.png',image_data_gray,IMAGE_CURSORS_SIZE
stdcall [buf2d_create_f_img], buf_curs_8,[image_data_gray] ;ᮧ¤ ¥¬ ¡ãä¥à
stdcall mem.Free,[image_data_gray] ;®á¢®¡®¦¤ ¥¬ ¯ ¬ïâì
load_image_file 'cursors.png',image_data_gray, IMAGE_CURSORS_SIZE
stdcall [buf2d_create_f_img], buf_curs,[image_data_gray] ;ᮧ¤ ¥¬ ¡ãä¥à
stdcall mem.Free,[image_data_gray] ;®á¢®¡®¦¤ ¥¬ ¯ ¬ïâì
stdcall [buf2d_conv_24_to_8], buf_curs_8,1 ;¤¥« ¥¬ ¡ãä¥à ¯à®§à ç­®á⨠8¡¨â
stdcall [buf2d_conv_24_to_32],buf_curs,buf_curs_8 ;¤¥« ¥¬ ¡ãä¥à rgba 32¡¨â
stdcall sign_init, 3000
mcall 26,9
@ -304,7 +322,12 @@ mouse:
push eax ebx ecx edx
mcall 37,2 ;­ ¦ âë¥ ª­®¯ª¨ ¬ëè¨
bt eax,0 ;«¥¢ ï ª­®¯ª  ­ ¦ â ?
jnc .end_buf_wnd
jc @f
xor eax,eax
mov [pen_coord_x],eax
mov [pen_coord_y],eax
jmp .end_buf_wnd
@@:
mcall 37,1 ;eax = (x shl 16) + y
cmp ax,word[buf_0.t]
@ -340,15 +363,50 @@ mouse:
jge .end_buf_wnd
cmp byte[pen_mode],1
jne @f
jne .end_mode_1
;०¨¬ à¨á®¢ ­¨ï ¯à®¢®¤ 
cmp dword[pen_coord_x],0
jne @f
cmp dword[pen_coord_y],0
jne @f
mov [pen_coord_x],eax
mov [pen_coord_y],ebx
@@:
cmp dword[pen_coord_x],eax
je .beg_draw
cmp dword[pen_coord_y],ebx
je .beg_draw
mov ecx,eax
sub ecx,[pen_coord_x]
bt ecx,31
jnc @f
neg ecx
inc ecx
@@:
mov edx,ebx
sub edx,[pen_coord_y]
bt edx,31
jnc @f
neg edx
inc edx
@@:
cmp ecx,edx
jl @f
mov ebx,[pen_coord_y] ;¯à¨¢ï§ª  ª ª®®à¤¨­ â¥ y
jmp .beg_draw
@@:
mov eax,[pen_coord_x] ;¯à¨¢ï§ª  ª ª®®à¤¨­ â¥ x
.beg_draw:
stdcall pole_cell_creat, pole,eax,ebx,0
;­¨ç¥£® ­¥ ã¡à «®áì redraw_pole ­¥ ¯®¤å®¤¨â, â. ª. ç¨áâ¨âì ¯®«¥ ­¥ ­ã¦­®
stdcall pole_paint, pole
stdcall [buf2d_draw], buf_0
;stdcall but_test_pole, pole
jmp .end_buf_wnd
@@:
.end_mode_1:
cmp byte[pen_mode],2
jne @f
;०¨¬ à¨á®¢ ­¨ï ¨§®«ï樨 ¤«ï ¯à®¢®¤ 
@ -366,6 +424,14 @@ mouse:
;stdcall but_test_pole, pole
jmp .end_buf_wnd
@@:
cmp byte[pen_mode],4
jne @f
;०¨¬ ᮧ¤ ­¨ï í«¥¬¥­â®¢
stdcall shem_element_creat, eax,ebx
stdcall pole_paint, pole
stdcall [buf2d_draw], buf_0
jmp .end_buf_wnd
@@:
.end_buf_wnd:
pop edx ecx ebx eax
@ -519,12 +585,25 @@ pushad
mov edx,txt_set_1
int 0x40
add ebx,35 shl 16
mov edx,txt_mov_l
; *** à¨á®¢ ­¨¥ ¨ª®­®ª ­  ª­®¯ª å ***
mov eax,7
mov ebx,[image_data_toolbar]
mov ecx,(16 shl 16)+16
mov edx,(62 shl 16)+panel_1_coord_top+2
add ebx,IMAGE_TOOLBAR_ICON_SIZE*16
int 0x40
add ebx,25 shl 16
mov edx,txt_mov_r
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16)
int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16)
int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16)
int 0x40
; *** ᮧ¤ ­¨¥ ª­®¯®ª à¨á®¢ ­¨ï ¯à®¢®¤  ***
@ -547,6 +626,10 @@ pushad
mov edx,33
int 0x40
add ebx,25 shl 16
mov edx,34
int 0x40
; *** à¨á®¢ ­¨¥ ¨ª®­®ª ­  ª­®¯ª å ***
mov eax,7
mov ebx,[image_data_toolbar]
@ -568,6 +651,10 @@ pushad
add edx,(25 shl 16) ;icon pen 3
int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;icon add elemet
int 0x40
mcall 12,2
popad
ret
@ -656,33 +743,49 @@ button:
@@:
cmp ah,31
jne @f
call but_set_pen_1
stdcall set_pen_mode,1,0 ;ãáâ ­®¢ª  ०¨¬  à¨á®¢ ­¨ï ¯à®¢®¤ 
@@:
cmp ah,32
jne @f
call but_set_pen_2
stdcall set_pen_mode,2,1
@@:
cmp ah,33
jne @f
call but_set_pen_3
stdcall set_pen_mode,3,2 ;ãáâ ­®¢ª  ०¨¬  áâ¨à ­¨ï ¯à®¢®¤ 
@@:
cmp ah,34
jne @f
stdcall set_pen_mode,4,3 ;ãáâ ­®¢ª  ०¨¬  ᮧ¤ ­¨ï í«¥¬¥­â®¢
@@:
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0
stdcall [buf2d_delete],buf_font
stdcall [buf2d_delete],buf_curs
stdcall mem.Free,[image_data_toolbar]
stdcall pole_delete, pole
call sign_delete
stdcall [tl_data_clear], tree1
cmp [cursor_pointer],0
je @f
mcall 37,6,[cursor_pointer]
@@:
mcall -1
;ᮧ¤ ­¨¥ ­®¢®© á奬ë
align 4
but_new_file:
proc but_new_file uses eax
call but_set_none
stdcall [tl_info_clear],tree1
stdcall [tl_draw],tree1
xor eax,eax
mov [shem_elems],eax
mov [shem_captions],eax
stdcall pole_clear, pole
call redraw_pole
ret
endp
align 4
f_size dd 0 ;à §¬¥à ®âªà뢠¥¬®£® ä ©« 
@ -1026,6 +1129,7 @@ but_open_file:
;---
call but_center ;業â஢ª  á奬ë á ãç¥â®¬ shem_w ¨ shem_h
call but_set_none
.end_open_file:
popad
ret
@ -1460,6 +1564,31 @@ proc make_list_capts uses eax ebx ecx edi, buf:dword, txt:dword
ret
endp
;¤®¡ ¢«¥­¨¥ ­®¢®£® í«¥¬¥­â  ã¯à ¢«¥­¨ï ­  á奬ã
;¯à¨ ¤®¡ ¢«¥­¨¨ ¨á¯®«ì§ãîâáï áâ ­¤ àâ­ë¥ ­ áâனª¨
align 4
proc shem_element_creat uses eax ebx, coord_x:dword, coord_y:dword
mov eax,dword[coord_x]
mov dword[txt_buf],eax ;ª®®à¤¨­ â  x
mov eax,dword[coord_y]
mov dword[txt_buf+4],eax ;ª®®à¤¨­ â  y
xor eax,eax
mov byte[txt_buf+8],al ;­ ¯à ¢«¥­¨¥
;¯®  ¤à¥áã edi ­ §¢ ­¨¥ í«¥¬¥­â 
;stdcall el_get_name, edi
mov byte[txt_buf+sp_offs_el_type],al ;⨯ í«¥¬¥­â 
movzx ebx,al
imul ebx,size_el_opt
add ebx,el_opt_beg+el_offs_nam
stdcall make_list_capts,txt_buf,ebx
stdcall [tl_node_add], txt_buf,(el_icon_elems shl 16)+1, tree1
stdcall [tl_cur_next], tree1
stdcall [tl_draw], tree1
ret
endp
;output:
; eax - ⨯ í«¥¬¥­â 
align 4
@ -1842,27 +1971,33 @@ endp
align 4
proc but_set_none
mov byte[pen_mode],0
cmp [cursor_pointer],0
je @f
push eax ebx ecx
mcall 37,6,[cursor_pointer]
pop ecx ebx eax
@@:
ret
endp
;ãáâ ­®¢ª  ०¨¬  à¨á®¢ ­¨ï ¯à®¢®¤ 
align 4
proc but_set_pen_1
mov byte[pen_mode],1
ret
endp
proc set_pen_mode uses eax ebx ecx edx, mode:dword, icon:dword
mov eax,[mode]
cmp byte[pen_mode],al
je @f
mov byte[pen_mode],al
;mov edx,((cx shl 8) + cy) shl 16
mov edx,2 ;LOAD_INDIRECT
mov ecx,[icon]
shl ecx,12 ;㬭®¦ ¥¬ ­  4 ª¡
add ecx,[buf_curs.data]
mcall 37,4
;
align 4
proc but_set_pen_2
mov byte[pen_mode],2
ret
endp
;ãáâ ­®¢ª  ०¨¬  áâ¨à ­¨ï ¯à®¢®¤ 
align 4
proc but_set_pen_3
mov byte[pen_mode],3
cmp eax,0
je @f
mov [cursor_pointer],eax
mcall 37,5,[cursor_pointer]
@@:
ret
endp
@ -1935,6 +2070,28 @@ buf_font: ;
dd 0 ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_curs: ;¡ãä¥à á ªãàá®à ¬¨
.data: dd 0 ;㪠§ â¥«ì ­  ¡ãä¥à ¨§®¡à ¦¥­¨ï
dw 0 ;+4 left
dw 0 ;+6 top
dd 32 ;+8 w
dd 32*cursors_count ;+12 h
dd 0 ;+16 color
db 24 ;+20 bit in pixel
align 4
buf_curs_8: ;¡ãä¥à á ªãàá®à ¬¨
.data: dd 0 ;㪠§ â¥«ì ­  ¡ãä¥à ¨§®¡à ¦¥­¨ï
dw 0 ;+4 left
dw 0 ;+6 top
dd 32 ;+8 w
dd 32*cursors_count ;+12 h
dd 0 ;+16 color
db 24 ;+20 bit in pixel
cursor_pointer dd 0 ;㪠§ â¥«ì ­  ¤ ­­ë¥ ¤«ï ªãàá®à 
el_focus dd 0
tree1 tree_list 32,points_max+2, tl_key_no_edit, 16,16,\
0x8080ff,0x0000ff,0xffffff, 5,panel_3_coord_top,145,250, 0,capt_offs,0,\

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB