From 098f10ccbc7a96962d6be3b007eaeb635e453078 Mon Sep 17 00:00:00 2001 From: GerdtR Date: Sun, 3 Aug 2014 22:17:27 +0000 Subject: [PATCH] Receives a IPC-message about creating icons git-svn-id: svn://kolibrios.org@5017 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/system/icon_new/@icon.asm | 100 +++++++++++++++++++++++++--- programs/system/icon_new/DlgAdd.inc | 14 ++-- 2 files changed, 95 insertions(+), 19 deletions(-) diff --git a/programs/system/icon_new/@icon.asm b/programs/system/icon_new/@icon.asm index 3b83dada6f..9f376925b1 100644 --- a/programs/system/icon_new/@icon.asm +++ b/programs/system/icon_new/@icon.asm @@ -2,7 +2,7 @@ ICON_STRIP equ '/rd/1/iconstrp.png' ICON_INI equ '/rd/1/settings/icon.ini' ICON_SIZE equ 68 ;размер области для иконки с надписью IMG_SIZE equ 32 ;размер иконок -TEXT_BOTTOM_Y equ 15 ;отступ по Y текста от низа иконки +TEXT_BOTTOM_Y equ 14 ;отступ по Y текста от низа иконки IMAGE_TOP_Y equ 10 ;>=1 Координата Y иконки в области для данной иконки ALIGN_SIZE equ 68 ;размер сетки выравнивания NAME_LENGTH equ 11 ;длина имени иконки @@ -132,8 +132,13 @@ START: ; start of execution ;###################################################################### call FillIconsOffs ;заполняет MaxNumIcon,IconsOffs - mcall 40,0100000b ;нужны только события мыши, перерисовка иконок будет в другом потоке +;инициализация IPC буфера + mov dword[IPCbuffer],0 + mov dword[IPCbuffer+4],8 + mcall 60,1,IPCbuffer,1024 + mcall 40,01100000b ;нужны только события мыши и IPC, + ;перерисовка иконок будет в другом потоке mov eax,[icon_count] mov bl,ICONS_DRAW_COUNTH div bl @@ -153,9 +158,13 @@ messages: mcall 10 sub eax,6 jz MSGMouse - + dec eax + jz MSGIPC jmp messages +MSGIPC: + call IPCCreateIcon + jmp messages MSGMouse: mcall 37,0 ;GetMousePos @@ -896,6 +905,71 @@ proc GenerateID ;ax = ID ret endp +;------------------------------------------------------------------------------- + + +;формат IPC-сообщения +;dd X +;dd Y +;asciiz Icon +;asciiz Name +;asciiz Path +;asciiz Params +;------------------------------------------------------------------------------- +proc IPCCreateIcon +locals + ix rd 1 + iy rd 1 +endl + + mov eax,IPCbuffer+8 + mov dword[IPCbuffer],1 + ;mov edx,dword[IPCbuffer+4] + lea edx,[eax+8] + + m2m dword[ix],dword[edx] + m2m dword[iy],dword[edx+4] + + lea esi,[edx+8] + + mov ecx,256 + mov edi,DAreaIcon + @@: lodsb + stosb + test al,al + jnz @b + + mov ecx,NAME_LENGTH+1 + mov edi,DAreaName + @@: lodsb + stosb + test al,al + jz @f + loop @b + @@: + + mov edi,DAreaPath + @@: lodsb + stosb + test al,al + jnz @b + + mov edi,DAreaParams + @@: lodsb + stosb + test al,al + jnz @b + + mov dword[IPCbuffer+4],8 + mov dword[IPCbuffer],0 + + stdcall AddIcon,[ix],[iy],DAreaIcon,DAreaName,DAreaPath,DAreaParams + + mcall 15,3 + ret +endp + + include 'iconman.inc' include 'bgredraw.inc' include 'RButton.inc' @@ -1052,15 +1126,15 @@ else end if if lang eq ru - ErrRunProg db '"Icon\nОшибка запуска программы" -tE"',0 - WarningSave db '"Icon\nНе забудьте сохранить изменения, запустить RDSave" -tI',0 - ErrNotFoundIni db '"Icon\nНе найден icon.ini" -tE',0 - ErrName db '"Icon\nИмя \"rbmenu\" зарезервировано" -tE',0 + ErrRunProg db 'Ошибка запуска программы',0 + WarningSave db 'Не забудьте сохранить изменения, запустить RDSave',0 + ErrNotFoundIni db 'Не найден icon.ini',0 + ErrName db 'Имя "rbmenu" зарезервировано',0 else - ErrRunProg db '"Icon\nError running program" -tE',0 - WarningSave db '"Icon\nDo not forget to save the changes, run RDSave" -tI',0 - ErrNotFoundIni db '"Icon\nicon.ini not found" -tE',0 - ErrName db '"Icon\nThe name \"rbmenu\" is reserved" -tE',0 + ErrRunProg db 'Error runing program',0 + WarningSave db 'Do not forget to save the changes, run the RDSave',0 + ErrNotFoundIni db 'icon.ini not found',0 + ErrName db 'The name "rbmenu" reserved',0 end if ;------------------------------------------------------------------------------- @@ -1180,6 +1254,10 @@ sc system_colors sc.workL rd 1 sc.workH rd 1 + +align 4 +IPCbuffer rb 1024 + align 4 ScreenW rw 1 diff --git a/programs/system/icon_new/DlgAdd.inc b/programs/system/icon_new/DlgAdd.inc index b1e1a6ebd9..a6b819a6e2 100644 --- a/programs/system/icon_new/DlgAdd.inc +++ b/programs/system/icon_new/DlgAdd.inc @@ -24,7 +24,7 @@ DlgProp: cmp bx,[wsY] jae @f mov bx,[wsY] - @@: ;eax,ebx - Ёхры№эр  ъююЁфшэрЄр. ┬ёх ъююЁфшэрЄ√ т яЁюух юЄэюёшЄхы№эю ыхтюую тхЁїэхую єуыр Ёрсюўхщ юсырёЄш + @@: ;eax,ebx - реальная координата. Все координаты в проге относительно левого верхнего угла рабочей области xor edx,edx mov dx,[wsXe] @@ -41,7 +41,7 @@ DlgProp: mov ebx,edx @@: - xor edx,edx ;яЁхюсЁрчют√трхь т юЄэюёшЄхы№э√х + xor edx,edx ;преобразовываем в относительные mov dx,[wsW] shr edx,1 add dx,[wsX] @@ -193,10 +193,8 @@ DReDraw: m2m [sbIcons.frnt_col],[sc.work] m2m [sbIcons.line_col],[sc.work_graph] - edit_boxes_set_sys_color edtName,edtExePath,sc - edit_boxes_set_sys_color edtExePath,edtParams,sc - edit_boxes_set_sys_color edtParams,edtIcon,sc ;edit_boxes_set_sys_color edtIcon,endEdits,sc + edit_boxes_set_sys_color edtName,endEdits,sc call DRedrawWin @@ -408,7 +406,7 @@ DSaveIcon: cmp [DlgSelIcon],-1 je @f - + stdcall EditIcon,[DlgSelIcon],DAreaIcon,DAreaName,DAreaPath,DAreaParams mov ebx,[DlgSelIcon] mov eax,[IconsID+ebx*4] @@ -624,7 +622,7 @@ local IcoX:DWORD,\ add edi,3 loop @b - ;чрЄшЁрэшх эх шёяюы№чютрэ√ї ьхёЄ + ;затирание не использованых мест jmp .Dalee .DrawIcons2: @@ -667,7 +665,7 @@ proc DrawSelIcon cmp al,'/' jne .GetIconInd .PathToIcon: - mov al,30h ;чруыє°ър!!!!!!!!!!!!! + mov al,30h ;заглушка!!!!!!!!!!!!! mov byte[edi+1],0 .GetIconInd: ;int3