diff --git a/programs/media/palitra/branch/draw_palitra.inc b/programs/media/palitra/branch/draw_palitra.inc index 9357f6bd9..9cb853c40 100644 --- a/programs/media/palitra/branch/draw_palitra.inc +++ b/programs/media/palitra/branch/draw_palitra.inc @@ -1,12 +1,12 @@ draw_palitra: ; Функция 13 - нарисовать прямоугольник - ;mcall SF_DRAW_RECT, 110 shl 16+148, 9 shl 16+148, [sc.work] + ;mcall SF_DRAW_RECT, PALITRA_XW, PALITRA_YW, [sc.work] - cmp [renmode],2 + cmp [renmode],MODE_PIPET je cyrcle_draw ;cmp [renmode],1 ;je picker_draw - cmp [renmode],0 + cmp [renmode],MODE_PALITRA je sheme_draw ret @@ -39,6 +39,15 @@ draw_palitra: ;mov ebx,109*65536+150 ;mov ecx, 10*65536+150 ;mcall + +PIPET_CELLW = 13 +PIPET_AREA_W = PIPET_CELLW*PIPET_CELL_COUNT_X +PIPET_AREA_H = PIPET_CELLW*PIPET_CELL_COUNT_Y +PIPET_CELL_COUNT_X = 15 +PIPET_CELL_COUNT_Y = 13 +PIPET_SELECTED_X = PIPET_AREA_W/2+PALITRA_X +PIPET_SELECTED_Y = PIPET_AREA_H/2+DRAWY+2 + call mouse_local ; получаем координаты мыши относительно окна mov ecx, [mouse_x] ; заносим в регистр mov edx, [mouse_y] ; заносим в регистр @@ -52,38 +61,39 @@ draw_palitra: call desktop_get call mouse_global - mov ebx,112*65536+11 + mov ebx,PALITRA_X*65536+PIPET_CELLW mov esi,0 ; counter=8 circle_loop: - mov ecx, 10*65536+11 + mov ecx, (DRAWY+1)*65536+PIPET_CELLW mov edi,0 circle_loop2: call circle_pixel_read mcall SF_DRAW_RECT - add ecx,11 shl 16 + add ecx,PIPET_CELLW shl 16 inc edi - cmp edi,13 + cmp edi,PIPET_CELL_COUNT_Y jne circle_loop2 - add ebx,11 shl 16 + add ebx,PIPET_CELLW shl 16 inc esi - cmp esi,13 + cmp esi,PIPET_CELL_COUNT_X jne circle_loop - mcall SF_DRAW_RECT, 177*65536+13, 76*65536+13, 0 + mcall SF_DRAW_RECT, , , 0xFF0000 mov ecx, [mouse_x] mov edx, [mouse_y] inc ecx + inc ecx inc edx mov ebx, edx imul ebx, [desctop_w] add ebx, ecx mcall SF_GET_PIXEL mov edx,eax - mcall SF_DRAW_RECT, 178*65536+11, 77*65536+11 + mcall SF_DRAW_RECT, , ret end_cyrcle_draw: - mcall SF_DRAW_RECT, 111*65536+145, 9*65536+145, 0x666666 + mcall SF_DRAW_RECT, , , [sc.work_graph] ret circle_pixel_read: @@ -124,20 +134,20 @@ draw_palitra: sheme_draw: mov eax,SF_DRAW_RECT ; Функция 13 - нарисовать прямоугольник mov edx,0x222222 ; цвет - mov ecx, palitra_yw ; Начальные координаты по y [к-та y]*65536 + [размер] + mov ecx, PALITRA_YW ; Начальные координаты по y [к-та y]*65536 + [размер] mov esi,2 ; Счетчик линий подложек re_draw: - mov ebx,palitra_xw ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ebx,PALITRA_XW ; Начальные координаты по x [к-та x]*65536 + [размер] mov edi,2 ; Счетчик количества подложек for_fon_loop: int 0x40 ; Прерывание - add ebx,(palitra_w+2) shl 16 ; Смещаем положение линии по х + add ebx,(PALITRA_W+2) shl 16 ; Смещаем положение линии по х dec edi ; Уменьшаем счетчик кнопок cmp edi,0 ; Сравниваем с нулем jnz for_fon_loop ; Если не ноль то в начало цикла dec esi ; Уменьшаем его cmp esi,0 ; Сравниваем с нулем - mov ecx,(palitra_w+DRAWY+3) shl 16+palitra_w ; Начальные координаты по y [к-та y]*65536 + [размер] + mov ecx,(PALITRA_W+DRAWY+3) shl 16+PALITRA_W ; Начальные координаты по y [к-та y]*65536 + [размер] jnz re_draw ; Если не ноль то в начало цикла ;................................................................................................. @@ -146,12 +156,12 @@ draw_palitra: mov eax,SF_DRAW_RECT ; Функция 13 - нарисовать прямоугольник mov edx,0x0FFFFFFF ; цвет mov esi,4 ; Счетчик количества абзацев (#4,8) - mov ebx,(palitra_x-CELLW-3) shl 16+CELLW ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ebx,(PALITRA_X-CELLW-3) shl 16+CELLW ; Начальные координаты по x [к-та x]*65536 + [размер] for_abz: ;;push esi ; Сохраняем значение счетчика линий в стек cmp esi,2 jne x2_line - mov ebx,(palitra_x-CELLW-3) shl 16+CELLW + mov ebx,(PALITRA_X-CELLW-3) shl 16+CELLW x2_line: add ebx,3 shl 16 ; Смещаем положение линии по x mov edi,8 ; Счетчик количества кнопок в строке @@ -161,7 +171,7 @@ draw_palitra: mov ecx, (1-CELLW/3) shl 16+CELLW ; Начальные координаты по y [к-та y]*65536 + [размер] cmp esi,2 jg y2_line ; Если больше 4 то игнорим - mov ecx,(palitra_w+4-(CELLW/3)) shl 16+CELLW + mov ecx,(PALITRA_W+4-(CELLW/3)) shl 16+CELLW y2_line: add ebx,(CELLW+1) shl 16 ; Смещаем положение линии по x for_loop: diff --git a/programs/media/palitra/branch/palitra.asm b/programs/media/palitra/branch/palitra.asm index f9f8e8b5b..7ae990218 100644 --- a/programs/media/palitra/branch/palitra.asm +++ b/programs/media/palitra/branch/palitra.asm @@ -64,44 +64,46 @@ ;****************************************************************************************************| ; ЗАГОЛОВОК ИСПОЛНЯЕМОГО ФАЙЛА ПРИЛОЖЕНИЯ ДЛЯ КОЛИБРИ ОС | ;----------------------------------------------------------------------------------------------------/ - use32 - org 0 - db 'MENUET01' - dd 1,START,I_END,I_MEM,stacktop,params,sys_path +use32 +org 0 +db 'MENUET01' +dd 1,START,I_END,I_MEM,stacktop,params,sys_path - include '../../../macros.inc' - include '../../../proc32.inc' - include '../../../KOSfuncs.inc' - include '../../../dll.inc' +include '../../../macros.inc' +include '../../../proc32.inc' +include '../../../KOSfuncs.inc' +include '../../../dll.inc' - include 'draw_sliders.inc' - include 'draw_utils.inc' - include 'draw_palitra.inc' +include 'draw_sliders.inc' +include 'draw_utils.inc' +include 'draw_palitra.inc' +MODE_PALITRA = 0 +MODE_PIPET = 1 +WIN_W = 374 ; ширина окна +WIN_H = 251 ; высота окна +WIN_X = 250 ; координата х окна +WIN_Y = 190 ; координата у окна - WIN_W = 374 ; ширина окна - WIN_H = 251 ; высота окна - WIN_X = 250 ; координата х окна - WIN_Y = 190 ; координата у окна +Left_Border=4 +SliderPanel_W = 110 +DRAWY = 9 - Left_Border=4 - SliderPanel_W = 110 - DRAWY = 9 +CELLW = 11; 11 ; not used yet, but has to be :) - CELLW = 11; 11 ; not used yet, but has to be :) +ICONX = WIN_W - 39 +ICONS = 18 ; icon size +SLIDEW = 25 - ICONX = WIN_W - 39 - ICONS = 18 ; icon size - SLIDEW = 25 - - palitra_x = Left_Border+SliderPanel_W+12 - palitra_w = CELLW*(8)+8+1 - palitra_xw = palitra_x shl 16 + palitra_w - palitra_yw = DRAWY shl 16 + palitra_w +PALITRA_X = Left_Border+SliderPanel_W+12 +PALITRA_W = CELLW*(8)+8+1 +PALITRA_XW = PALITRA_X shl 16 + PALITRA_W +PALITRA_YW = DRAWY shl 16 + PALITRA_W START: - mcall SF_SYS_MISC,SSF_HEAP_INIT ; инициализация кучи + mcall SF_SYSTEM, SSF_WINDOW_BEHAVIOR, SSSF_SET_WB, -1, 1 ;always on top + mcall SF_SYS_MISC,SSF_HEAP_INIT ; инициализация кучи mcall SF_SYS_MISC, SSF_MEM_OPEN, i18_name mov [icons18], eax mcall SF_SYS_MISC, SSF_MEM_OPEN, i18bg_name @@ -138,7 +140,7 @@ key: ; ;end_key mouse: - cmp [renmode],2 + cmp [renmode],MODE_PIPET jne left call cyrcle_draw jmp center @@ -171,7 +173,7 @@ button: cmp ah, 12 ; если нажата кнопка NEXT jne next_bg ; выходим inc [pnext] ; увеличиваем при нажатии номер палитры - mov [renmode],0 ; включаем цветовые схемы + mov [renmode],MODE_PALITRA ; включаем цветовые схемы mov eax,[pnext] ; заносим значение в еах cmp al,6 ; сравниваем с заявленным количеством палитр jne next_redraw ; если не больше максимума то на вызов отрисовки @@ -181,19 +183,19 @@ button: call draw_palitra ; РИСУЕМ ПАЛИТРУ jmp still ; Уходим на ожидание другого события next_bg: - cmp ah, 14 ; Кнопка BACKGROUND + cmp ah, 14 ; Кнопка GRADIENT jne next_bg2 ; если не нажата то выходим call set_background ; иначе устанавливаем фон jmp still ; и на ожидание события next_bg2: - cmp ah, 16 ; Кнопка BACKGROUND + cmp ah, 16 ; Кнопка NOISY jne circle_bg ; если не нажата то выходим call set_background2 ; иначе устанавливаем фон jmp still ; и на ожидание события circle_bg: cmp ah, 15 ; Кнопка Круговая палитра jne next_end ; если не нажата то выходим - mov [renmode],2 ; включаем отрисовку круговой палитры + mov [renmode],MODE_PIPET ; включаем отрисовку круговой палитры call draw_palitra ; РИСУЕМ ПАЛИТРУ jmp still ; и на ожидание события next_end: @@ -252,15 +254,10 @@ button: ; ГЛАВНЫЙ МОДУЛЬ ОТРИСОВКИ ОКНА И ЭЛЕМЕНТОВ ПРИЛОЖЕНИЯ | ;----------------------------------------------------------------------------------------------------/ draw_main: - ; функция 12: означает, что будет рисоваться окно mcall SF_REDRAW,SSF_BEGIN_DRAW - - ; Функция 48 - стили отображения окон mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors - - ; Функция 48 - стили отображения окон mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT - mov ecx,eax ; Запоминаем высоту скина + mov ecx,eax ; Запоминаем высоту скина mov edi,[runmode] cmp edi,2 @@ -288,10 +285,10 @@ draw_main: call draw_palitra ; РИСУЕМ ПАЛИТРУ call draw_result ; РИСУЕМ РЕЗУЛЬТАТ - mcall SF_DEFINE_BUTTON, , , 7+BT_HIDE ; palitra + mcall SF_DEFINE_BUTTON, , , 7+BT_HIDE+BT_NOFRAME ; palitra inc edx - mcall , <10,22>, <56,128> ; Рисуем невидимую кнопку под слайдером red + mcall , <10,22>, <54,136> ; Рисуем невидимую кнопку под слайдером red add ebx,25*65536 ; Добавляем inc edx ; ID = 9 int 0x40 ; Рисуем невидимую кнопку под слайдером green @@ -303,103 +300,64 @@ draw_main: int 0x40 ; Рисуем невидимую кнопку под слайдером alpha ; Функция 8 - определить/удалить кнопку (СМЕНА ЦВЕТА) - mcall , <13,19>, <20,18>, 0x0D+BT_HIDE + mcall , <10,22>, <16,20>, 13+BT_HIDE call draw_bottom_panel - call draw_left_panel + call draw_right_panel - ; функция 12: означает, что будет рисоваться окно mcall SF_REDRAW,SSF_END_DRAW ret -;#___________________________________________________________________________________________________ -;****************************************************************************************************| -; БЛОК ВСПОМОГАТЕЛЬНЫХ ПРОЦЕДУР И ФУНКЦИЙ ПРИЛОЖЕНИЯ | -;----------------------------------------------------------------------------------------------------/ +;#_______________________________________________________ +;*******************************************************| +; БЛОК ВСПОМОГАТЕЛЬНЫХ ПРОЦЕДУР И ФУНКЦИЙ ПРИЛОЖЕНИЯ | --------------------------------------------------------/ ;------------------------------------------------------------------------------------------------+ - draw_left_panel: ; Отрисовка боковой панели SL97: На самом деле правой. + draw_right_panel: ;................................................................................................. ; button_next_colorsheme mcall SF_DEFINE_BUTTON, , , 12+BT_HIDE ; palitra button ; ID = 14 - mcall , ,(DRAWY+150) shl 16 + ICONS+3, 14+BT_HIDE + mcall , ,(DRAWY+141) shl 16 + ICONS+3, 14+BT_HIDE ; pipet button ; ID = 15 - mcall , , (DRAWY+150) shl 16 + ICONS+3, 15+BT_HIDE + mcall , , (DRAWY+174) shl 16 + ICONS+3, 15+BT_HIDE mov ebx,[icons18bg] add ebx,ICONS*ICONS*4*53 mcall SF_PUT_IMAGE_EXT, ebx, , , 32, 0, 0 add ebx,ICONS*ICONS*4*(39-53) - mov edx,(ICONX+2)*65536+WIN_H-90 + mov edx,(ICONX+2)*65536+DRAWY+174+2 mcall mov ebx,[icons18] add ebx,ICONS*ICONS*4*(53-1) - sub edx,40 + mov edx,(ICONX+2)*65536+DRAWY+141+2 mcall stdcall DrawDeepRectangle, ICONX-1, DRAWY-1, ICONS+5, ICONS+5, [sc.work_graph], [sc.work_graph] stdcall DrawDeepRectangle, ICONX, DRAWY, ICONS+3, ICONS+3, [sc.work_light], [sc.work_dark] - stdcall DrawDeepRectangle, ICONX-1, DRAWY+109, ICONS+5, ICONS+5, [sc.work_graph], [sc.work_graph] - stdcall DrawDeepRectangle, ICONX, DRAWY+110, ICONS+3, ICONS+3, [sc.work_dark], [sc.work_light] - stdcall DrawDeepRectangle, ICONX+1, DRAWY+111, ICONS+1, ICONS+1, 0xFFFfff, 0xFFFfff + stdcall DrawDeepRectangle, ICONX-1, DRAWY+140, ICONS+5, ICONS+5, [sc.work_graph], [sc.work_graph] + stdcall DrawDeepRectangle, ICONX, DRAWY+141, ICONS+3, ICONS+3, [sc.work_dark], [sc.work_light] + stdcall DrawDeepRectangle, ICONX+1, DRAWY+142, ICONS+1, ICONS+1, 0xFFFfff, 0xFFFfff - stdcall DrawDeepRectangle, ICONX-1, DRAWY+149, ICONS+5, ICONS+5, [sc.work_graph], [sc.work_graph] - stdcall DrawDeepRectangle, ICONX, DRAWY+150, ICONS+3, ICONS+3, [sc.work_light], [sc.work_dark] + stdcall DrawDeepRectangle, ICONX-1, DRAWY+173, ICONS+5, ICONS+5, [sc.work_graph], [sc.work_graph] + stdcall DrawDeepRectangle, ICONX, DRAWY+174, ICONS+3, ICONS+3, [sc.work_light], [sc.work_dark] - ;stdcall DrawRectangle3D, ICONX, DRAWY, 22, 22, [sc.work_light], [sc.work_dark] ;Leency: draw rectangle around the button, buggy now - - ;mov eax,13 ; draw rect - ;mov ebx,266 shl 16+16 ; [x] + [size] - ;mov ecx,9 shl 16+16 ; [y] + [size] - ;mov edx,0x666666 ; RGB - ;push esi ; backup esi - ;mov esi,8 ; counter=8 - ;draw_lpanel: ; loop label - ; int 0x40 ; call draw black rect - ; add ecx,19 shl 16 ; move rect - ; dec esi ; decrement counter - ; cmp esi,0 ; if counter!=zero - ; jne draw_lpanel ; then goto label - ; mov esi,8 ; else counter=8 - ; mov ebx,267 shl 16+14 ; [x] + [size] - ; mov ecx,10 shl 16+14 ; [y] + [size] - ; mov edx,0xF3F3F3 ; RGB - ;draw_lpanel2: ; 2 loop label - ; int 0x40 ; call draw white rect - ; add ecx,19 shl 16 ; move rect - ; dec esi ; decrement counter - ; cmp esi,0 ; if counter!=0 - ; jne draw_lpanel2 ; then goto label2 - ;pop esi ; restore esi - ; draw_left_arrow for button_next_colorsheme - ;mov eax,4 ; Write string - ;mov ebx,272 shl 16+13 ; [x] + [y] - ;mov ecx,0x0 ; RGB - ;mov edx,larrow ; string pointer - ;mov esi,1 ; count symbol - ;int 0x40 ; call - ;mov eax,38 ; draw line - ;mov ebx,270 shl 16+272 ; [start x] + [end x] - ;mov ecx,16 shl 16+16 ; [start y] + [end y] - ;mov edx,0x0 ; RGB - ;int 0x40 ; call - ret ; return + ret ;................................................................................................. ;------------------------------------------------------------------------------------------------+ draw_bottom_panel: ; Отрисовка нижней панели ;................................................................................................. - mcall SF_DEFINE_BUTTON, <129,90>, , 16, [sc.work_button] + mcall SF_DEFINE_BUTTON, <129,90>, , 14, [sc.work_button] add ebx, 100 shl 16 add edx, 2 @@ -408,7 +366,7 @@ draw_main: ; Write string mov ecx,[sc.work_text] ; RGB add ecx, 0x90000000 - mcall SF_DRAW_TEXT, <35, WIN_H-26>, ,bground + mcall SF_DRAW_TEXT, <35, WIN_H-25>, ,bground mov ecx, [sc.work_button_text] add ecx, 0x90000000 @@ -892,8 +850,7 @@ endp ;****************************************************************************************************| ; БЛОК ПЕРЕМЕННЫХ И КОНСТАНТ | ;----------------------------------------------------------------------------------------------------/ -circle: - title db 'Palitra v0.77',0 ; хранит имя программы + title db 'Palitra v0.8',0 ; хранит имя программы hidden db 'Hidden',0 ; hex db '#',0 ; для вывода решётки как текста cname db 'RGBAx' ; хранит разряды цветов (red,green,blue) x-метка конца @@ -937,7 +894,7 @@ I_END: cblue rb 1 ; храним синий спектр calpha rb 1 ; храним прозрачность pnext rd 1 ; счетчик переключения палитры - renmode rd 1 ; режим отрисовки (1-цветовая схема,2-пипетка,3-круговая) + renmode rd 1 ; режим отрисовки (0-цветовая схема,1-пипетка) params rb 20 ; приём параметров params_c rb 9 ; приёмник для цвета bgimg_buf rd 1 ; buffer for a generated image diff --git a/programs/media/palitra/branch/readme.txt b/programs/media/palitra/branch/readme.txt index 779840d36..274348daa 100644 --- a/programs/media/palitra/branch/readme.txt +++ b/programs/media/palitra/branch/readme.txt @@ -2,26 +2,22 @@ DOS-866 Описание параметров для запуска программы Palitra -$ запуск без параметров -------------------------------------------------------------------------------+ -Программа даёт возможность выбора цветов из палитры и уставновки их при желании -как фон рабочего стола. -..............................................................................+ - - $ запуск с параметром N ------------------------------------------------------------------------------+ -равносильно запуску без параметров за исключением того, что цвета по умолчанию -будут соответствовать переданным в параметрах. Возможны варианты запуска: +Цвета по умолчанию будут соответствовать переданным в параметрах. +Возможны варианты запуска: /sys/media/palitra N 00FF00FF 00FF0000 /sys/media/palitra N 00F724A3 00736698 ..............................................................................+ -$ запуск с параметром H +$ запуск с параметром H ------------------------------------------------------------------------------+ -Программа запускается в hidden mode без отрисовки окна приложения и загружает -два цвета из /settings/wallpaper.dat. После чего, полученные цвета будут -использованы для заливки фона рабочего стола градиентом из указанных цветов. +Программа запускается в hidden mode без отрисовки окна приложения. +После чего, цвета переданные в параметре будут использованы для заливки фона +рабочего стола градиентом из указанных цветов. + + /sys/media/palitra H 00FF00FF 00FF0000 + /sys/media/palitra H 00F724A3 00736698 ..............................................................................+ \ No newline at end of file