From b7c1c94b59ae0ab8c0827cb43330b7182c685f22 Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Sun, 7 Feb 2016 19:54:43 +0000 Subject: [PATCH] keybi, simple paint: use skinned windows git-svn-id: svn://kolibrios.org@6165 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/media/paint/trunk/PAINT.ASM | 124 ++++++++++----------------- programs/media/paint/trunk/build.bat | 2 + programs/system/keybi/build.bat | 8 +- programs/system/keybi/keybi.asm | 20 +---- 4 files changed, 55 insertions(+), 99 deletions(-) create mode 100644 programs/media/paint/trunk/build.bat diff --git a/programs/media/paint/trunk/PAINT.ASM b/programs/media/paint/trunk/PAINT.ASM index c088f7f0bb..304ef7376e 100644 --- a/programs/media/paint/trunk/PAINT.ASM +++ b/programs/media/paint/trunk/PAINT.ASM @@ -21,20 +21,29 @@ ;****************************************************************************** ; Подключаем необходимые макросы -include 'macros.inc' +include '../../../macros.inc' ;****************************************************************************** ; НАЧАЛО ПРОГРАММЫ -meos_app_start +use32 + org 0x0 + db 'MENUET01' ; 8 byte id + dd 0x01 ; title version + dd START ; start of code + dd I_END ; size of image + dd E_END ; memory for app + dd E_END ; esp + dd 0x0,0x0 ; I_Param , I_Icon + ; ОБЛАСТЬ КОДА -code +START: mov eax,40 ; сообщим системе, какие события будем обрабатывать mov ebx,0100101b ; маска событий - перерисовка (1) + кнопка (3) + мышь (6 int 0x40 ; эта команда вызывает системную функцию - mov [workarea.cx],10 ; координаты рабочей (клиентской) области - mov [workarea.cy],45 ; для рисования + mov [workarea.cx],5 ; координаты рабочей (клиентской) области + mov [workarea.cy],30 ; для рисования red: call draw_window ; вызываем процедуру отрисовки окна @@ -152,9 +161,7 @@ still: ; mov [mouse_pressed],1 ; Получим координаты курсора мыши (относительно окна) - mov eax,37 ; функция 37 - получить состояние мыши - mov ebx,1 ; подфункция 1 - int 0x40 + mcall 37,1 ; получить состояние мыши ; Переделаем их так, чтобы они были в разных регистрах, т.е. eax и ebx mov ebx,eax @@ -202,9 +209,9 @@ still: ; ;****************************************************************************** save_canvas: - mov eax,[process.x_size] + mov eax,[proc_info.box.width] add eax,[workarea.cx] - mov ebx,[process.y_size] + mov ebx,[proc_info.box.height] add ebx,[workarea.cy] jmp still @@ -217,71 +224,35 @@ save_canvas: draw_window: - mov eax,48 ; ПОДГРУЖАЕМ СИСТЕМНЫЕ ЦВЕТА - mov ebx,3 - mov ecx,sc - mov edx,sizeof.system_colors - int 0x40 + mcall 48,3,sc,sizeof.system_colors ; ПОДГРУЖАЕМ СИСТЕМНЫЕ ЦВЕТА + mcall 12, 1 ; начало отрисовки окна + mov edx, [sc.work] + or edx, 0x33000000 + mcall 0, (100 shl 16)+400, (100 shl 16)+300, , , title ; рисуем окно + mcall 12, 1 + + mcall 9,proc_info,-1 ; получим информацию о своем потоке - mov eax,12 ; функция 12: сообщить ОС об отрисовке окна - mov ebx,1 ; 1, начинаем рисовать - int 0x40 + mov eax,[proc_info.box.width] ; настроим размер рабочей области + sub eax,20 ; (х размер окна - 20) + mov [workarea.sx],eax + mov eax,[proc_info.box.height] + sub eax,63 ; (у размер - 63) + mov [workarea.sy],eax - ; СОЗДАЁМ ОКНО - mov eax,0 ; функция 0 : определить и отрисовать окно - mov ebx,100*65536+400 ; [x старт] *65536 + [x размер] - mov ecx,100*65536+300 ; [y старт] *65536 + [y размер] - mov edx,[sc.work] ; цвет рабочей области RRGGBB,8->color gl - or edx,0x02000000 - mov esi,[sc.grab] ; цвет полосы заголовка RRGGBB,8->color gl - or esi,0x80000000 - mov edi,[sc.frame] ; цвет рамки RRGGBB - int 0x40 - - mov eax,9 ; получим информацию о себе - mov ebx,process - mov ecx,-1 - int 0x40 - - mov eax,[process.x_size] ; настроим размер рабочей области - add eax,-20 ; (х размер окна - 20) - mov [workarea.sx],eax ; - mov eax,[process.y_size] ; - add eax,-60 ; (у размер - 60) - mov [workarea.sy],eax ; - - ; ЗАГОЛОВОК ОКНА - mov eax,4 ; функция 4 : написать в окне текст - mov ebx,8*65536+8 ; [x] *65536 + [y] - mov ecx,[sc.grab_text] ; цвет - or ecx,0x10000000 ; шрифт - mov edx,header ; адрес строки - mov esi,header_len ; и её длина - int 0x40 - - ; КНОПКА ЗАКРЫТИЯ ОКНА - mov eax,8 ; функция 8 : определить и нарисовать кнопку -; mov ebx,(300-19)*65536+12 ; [x старт] *65536 + [x размер] - mov ebx,[process.x_size] - add ebx,-19 - shl ebx,16 - add ebx,12 - mov ecx,5*65536+12 ; [y старт] *65536 + [y размер] - mov edx,1 ; идентификатор кнопки - mov esi,[sc.grab_button] ; цвет кнопки RRGGBB - int 0x40 - - cmp [process.y_size],80 + cmp [proc_info.box.height],80 jb .finish - + + mov eax, 8 + mov edx, 1 ; создаём кнопки выбора цвета: - mov ebx,10*65536+10 ; начальная x координата и размер - mov ecx,27*65536+10 ; начальная y координата & size + mov ebx,10*65536+15 ; начальная x координата и размер + mov ecx, 7*65536+15 ; начальная y координата & size .new_button: inc edx ; идентификатор++; mov esi,[btn_colors-8+edx*4] ; цвет кнопки int 0x40 ; ставим кнопку - add ebx,12*65536 ; следующая кнопка правее на 12 + add ebx,18*65536 ; следующая кнопка правее на 12 cmp edx,9 ; сравниваем edx (идентификатор) с 9 jbe .new_button ; если меньше или равно -> ещё одну кпоку @@ -293,25 +264,20 @@ draw_window: add ebx,[workarea.sx] add ecx,[workarea.sy] mov edx,0xffffff - int 0x40 + mcall 13 .finish: - mov eax,12 ; сообщаем системе о завершении отрисовки окна - mov ebx,2 - int 0x40 - ret ;****************************************************************************** ; начало области инициализированных данных ; если кто ещё не знает, что значит "инициализированные", то поясняю: ; это те данные, которым присвоено начальное значение -data -header: ; строка заголовка - db 'PAINT v0.2 for MenuetOS' -header_len = $ - header ; и её длина +;data +title db 'Simple Paint v0.3',0 + mouse_pressed db 0 ; показывает, нажата ли была мышь в предыдущий момент ; цвета кнопок @@ -343,7 +309,7 @@ colors: ; здесь данным значения не присвоены. В отличие от иниц., не увеличивают размер ; файла -udata +I_END: active_color dd ? ; активный цвет @@ -357,9 +323,9 @@ udata .sy dd ? sc system_colors ; системные цвета - process process_information ; информация о процессе + proc_info process_information ; информация о процессе restflag dd ? canvas rb 800*600*3 -meos_app_end +E_END: diff --git a/programs/media/paint/trunk/build.bat b/programs/media/paint/trunk/build.bat new file mode 100644 index 0000000000..2e03a0387f --- /dev/null +++ b/programs/media/paint/trunk/build.bat @@ -0,0 +1,2 @@ +@fasm paint.asm paint +@pause \ No newline at end of file diff --git a/programs/system/keybi/build.bat b/programs/system/keybi/build.bat index 96a29d2478..87712fa4ac 100644 --- a/programs/system/keybi/build.bat +++ b/programs/system/keybi/build.bat @@ -1,3 +1,5 @@ -fasm keybi.asm keybi -kpack keybi -pause \ No newline at end of file +@erase lang.inc +@echo lang fix en >lang.inc +@fasm keybi.asm keybi +@erase lang.inc +@pause \ No newline at end of file diff --git a/programs/system/keybi/keybi.asm b/programs/system/keybi/keybi.asm index feb74529c5..6c3351da99 100644 --- a/programs/system/keybi/keybi.asm +++ b/programs/system/keybi/keybi.asm @@ -81,23 +81,9 @@ align 4 draw_window: pushad mcall 12,1 - xor eax,eax - mov ebx,(10 shl 16)+100 - mov ecx,(10 shl 16)+75 - mov edx,[sc.work] - or edx,(2 shl 24)+0x10000000+0x20000000 - mov edi,[sc.grab] ;[sc.frame] - mov esi,[sc.grab] - int 0x40 - - mov eax,8 - mov ebx,(80 shl 16)+10 - mov cx,-15 - shl ecx,16 - mov cx,10 - mov edx,1 - mov esi,[sc.grab_button] - int 0x40 + mov edx, [sc.work] + or edx, 0x34000000 + mcall 0, (10 shl 16)+100, (10 shl 16)+75 stdcall [check_box_draw], ch1 stdcall [check_box_draw], ch2