diff --git a/programs/system/icon_new/@icon.asm b/programs/system/icon_new/@icon.asm index 83ffa9577d..b000dc5885 100644 --- a/programs/system/icon_new/@icon.asm +++ b/programs/system/icon_new/@icon.asm @@ -36,12 +36,15 @@ BegData equ fiStdIco.point dd 0 ; path ;------------------------------------------------------------------------------ include 'lang.inc' +include 'lang.inc' include '../../macros.inc' include '../../proc32.inc' include '../../develop/libraries/box_lib/trunk/box_lib.mac' include '../../dll.inc' ;include '../../debug.inc' +include 'bgredraw.inc' + ;------------------------------------------------------------------------------ START: ; start of execution mcall 68,11 @@ -128,7 +131,7 @@ START: ; start of execution call FillIconsOffs - mcall 40,0110000b + mcall 40,0100000b mov eax,[icon_count] mov bl,ICONS_DRAW_COUNTH @@ -145,40 +148,17 @@ START: ; start of execution ; mov eax,[IconsOffs+eax*4] ; stdcall [ini_del_section],IconIni,eax ; ret - jmp MSGRedrawIcons + ;jmp MSGRedrawIcons + mcall 51,1,BGRedrawThread,stack_bredraw + messages: mcall 10 - sub eax,5 - jz MSGRedrawIcons - dec eax + sub eax,6 jz MSGMouse jmp messages -MSGRedrawIcons: - - mcall 48,5 - mov dx,ax - shr eax,16 - sub dx,ax - mov [ScreenX],dx - mov ax,bx - shr ebx,16 - sub ax,bx - mov [ScreenY],ax - - mov ecx,[MaxNumIcon] - test ecx,ecx - jz .NoDraw - xor ebx,ebx - @@: push ecx - stdcall DrawIcon,ebx,0 - inc ebx - pop ecx - loop @b - .NoDraw: - jmp messages MSGMouse: mcall 37,0 ;GetMousePos @@ -260,6 +240,7 @@ LButtonPress: @@: ;Yield mcall 5,1 ;Sleep 1 + jmp WaitLB endWaitLB: @@ -302,6 +283,7 @@ LButtonPress: MovingIcon: stdcall GetNumIcon,[MouseX],[MouseY],-1 mov [SelIcon],eax + mov [IconNoDraw],eax stdcall RestoreBackgrnd,[SelIcon] ; mov ecx,[MaxNumIcon] @@ -440,6 +422,7 @@ MovingIcon: mov [bNotSave],1 + mov [IconNoDraw],-1 jmp messages ;------------------------------------------------------------------------------- @@ -1176,6 +1159,7 @@ IconsFile db ICON_STRIP,0 NameIconsDat db ICONS_DAT,0 align 4 MaxNumIcon dd 0 ;количество иконок +IconNoDraw dd -1 ;-1 либо номер иконки, которую не надо рисовать( когда её таскают :)) bFixIcons dd 1 bNotSave dd 0 @@ -1188,6 +1172,7 @@ DlgAddActiv dd 0 IconIni db '/rd/1/icon.ini',0 + ;keyName db 'name',0 keyPath db 'path',0 keyParams db 'param',0 @@ -1454,6 +1439,8 @@ fname_Info rb 1024 stack_dlg: align 4 rb 1024 +stack_bredraw: + rb 1024 stack_area: ;------------------------------------------------------------------------------ ENDMEM: \ No newline at end of file diff --git a/programs/system/icon_new/BGREDRAW.INC b/programs/system/icon_new/BGREDRAW.INC new file mode 100644 index 0000000000..329e7fba8d --- /dev/null +++ b/programs/system/icon_new/BGREDRAW.INC @@ -0,0 +1,44 @@ +BGRedrawThread: + + mcall 40,010000b + + +BGRTmessages: + mcall 10 + sub eax,5 + jz BGRTRedrawIcons + + jmp BGRTmessages + +BGRTRedrawIcons: + mcall 48,5 + mov dx,ax + shr eax,16 + sub dx,ax + mov [ScreenX],dx + mov ax,bx + shr ebx,16 + sub ax,bx + mov [ScreenY],ax + + mov ecx,[MaxNumIcon] + test ecx,ecx + jz .NoDraw + xor ebx,ebx + @@: push ecx + cmp [IconNoDraw],ebx + je .nd + stdcall DrawIcon,ebx,0 + .nd: + inc ebx + pop ecx + loop @b + .NoDraw: + jmp BGRTmessages + + + + + + + diff --git a/programs/system/icon_new/ico.inc b/programs/system/icon_new/ico.inc deleted file mode 100644 index eb6486534b..0000000000 --- a/programs/system/icon_new/ico.inc +++ /dev/null @@ -1,131 +0,0 @@ -include 'libimg/libimg.asm' - - -;возвращает указатель на память либо 0 -LoadIcon: -path equ ebp+8 -BuffR equ ebp-16 -BuffH equ ebp-22 -endTablI equ ebp-26 - - push ebp - mov ebp,esp - add esp,-26 - - push ebx edi esi - -;--------------------------- проверяем - загружена ли этот файл с иконкой ------ - xor ebx,ebx - .SearchIco: - mov edi,[path] - mov esi,[IcoTable+ebx] - @@: lodsb - scasb - jne @f - test al,al - jnz @b - - mov eax,[IcoTable+ebx+4] - pop esi edi ebx - leave - ret 4 - @@: - add ebx,8 - cmp ebx,50*8 - jne @f - - xor eax,eax - pop esi edi ebx - leave - ret 4 - @@: - cmp [IcoTable+ebx],0 - jnz .SearchIco - -;------------------------------------------------------------------------------- - mov [endTablI],ebx - - m2m dword[fiIcon.path],dword[path] - mcall 70,fiIcon - test eax,eax - jz @f - - xor eax,eax - pop esi edi ebx - leave - ret 4 - - @@: - xor ecx,ecx - mov cx,[BuffH+4] - xor edi,edi - .TestRecord: - cmp word[BuffR],2020h - jne .NextRec - cmp byte[BuffR+2],0 - jne .NextRec - - lea eax,[BuffR] - stdcall LoadIco32b, [path],eax - - - pop esi edi ebx - leave - ret 4 - - .NextRec: - inc edi - - mov eax,edi - shl eax,4 - add eax,6 - mov dword[fiIcon.pos],eax - mcall 70,fiIcon - - loop .TestRecord - - xor eax,eax - pop esi edi ebx - leave - ret 4 -restore path -restore BuffH -restore BuffR - -proc LoadIco32b, path,bufHeader -local ImgBuff:DWORD - mov edi,[bufHeader] - cmp dword[edi+8],10A8h - je @f - - xor eax,eax - ret - - @@: - mcall 68,12,32*32*4*2 - mov ebx,[endTablI] - mov [IcoTable+ebx],eax - add eax,4096 - mov [IcoTable+ebx+4],eax - mov [ImgBuff],eax - m2m dword[fiIcon.pos],dword[edi+12] - mov dword[fiIcon.size],32*32*4 - mcall 70,fiIcon - - mov eax,[ImgBuff] - ret -endp - - - -fiIcon: - dd 0 - .pos dd 0 - dd 0 - .size dd 22 - .point dd 0 - db 0 - .path dd 0 - - -IcoTable rd 2*50 ;(name(4), data(4)). End - dword 0 \ No newline at end of file