From be219899755ce971e44a6dea57cfe6b8a5b9ce34 Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Fri, 7 Dec 2012 03:41:42 +0000 Subject: [PATCH] palitra 0.4+bg git-svn-id: svn://kolibrios.org@3088 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/media/palitra/trunk/palitra.asm | 357 +++++++++++++---------- 1 file changed, 203 insertions(+), 154 deletions(-) diff --git a/programs/media/palitra/trunk/palitra.asm b/programs/media/palitra/trunk/palitra.asm index 13f7f2d511..2b7ba654a7 100644 --- a/programs/media/palitra/trunk/palitra.asm +++ b/programs/media/palitra/trunk/palitra.asm @@ -2,6 +2,8 @@ ;****************************************************************************************************| ; Program Palitra (c) Sergei Steshin (Akyltist) | ;----------------------------------------------------------------------------------------------------| +;; Charset:WIN-1251 Font:Courier New Size:9pt | +;..................................................................................................... ;; compiler: FASM 1.69.31 | ;; version: 0.3.0 | ;; last update: 08/11/2012 | @@ -17,6 +19,11 @@ ;; - Улучшены ползунки, производится обработка нажатия рядом с ползунком. | ;; - Число сеток в цветовой схеме уменьшено с 6 до 4 (кратность 256, иначе дублирование цвета).| ;; - Мелкая косметика. | +;; 0.4.0 - Добавлено переключение между двумя цветами | +;; - Добавлен ползунок регулирования прозрачности (без визуализации). | +;; - Добавлено выравнивание значений rgba по центру, в зависимости от длинны. | +;; - Косметические правки. | +;; - Небольшая оптимизация. | ;..................................................................................................... ;; All rights reserved. | ;; | @@ -59,7 +66,10 @@ dd 0x0 include '../../../macros.inc' - + WIN_W equ 271 ; ширина окна + WIN_H equ 192 ; высота окна + WIN_X equ 250 ; координата х окна + WIN_Y equ 190 ; координата у окна START: ;#___________________________________________________________________________________________________ @@ -90,63 +100,71 @@ button: cmp ah, 1 ; если нажата кнопка с номером 1, jz bexit ; выходим ;обработка кнопки Next - cmp ah, 11 ; если нажата кнопка NEXT - jne next_bg ; выходим + cmp ah, 12 ; если нажата кнопка NEXT + jne set_bg ; выходим inc [pnext] ; увеличиваем при нажатии номер палитры - mov eax,[pnext] - cmp al,6 - jne next_redraw - xor eax,eax - mov [pnext],eax + mov eax,[pnext] ; заносим значение в еах + cmp al,6 ; сравниваем с заявленным количеством палитр + jne next_redraw ; если не больше максимума то на вызов отрисовки + xor eax,eax ; иначе зануляем палитру на default + mov [pnext],eax ; и запоминаем что сбросили палитру на default next_redraw: call draw_palitra ; РИСУЕМ ПАЛИТРУ - ;call draw_result ; РИСУЕМ РЕЗУЛЬТАТ - jmp still - - next_bg: - cmp ah, 12 ; если нажата кнопка BACKGROUND + jmp still ; Уходим на ожидание другого события + set_bg: + cmp ah, 14 ; если нажата кнопка BACKGROUND jne next_end ; выходим mcall 15,4,1 mcall 15,1,1,1 mcall 15,5,color,0,3*1*1 mcall 15,3 - jne next_redraw + jmp still next_end: - cmp ah, 7 - jne color_button - call mouse_get - jmp still - color_button: - push eax - call mouse_local ; получил локальные координаты - mov ebx,129 - mov ecx,[mouse_y] - sub ebx,ecx - mov ecx,3 - imul ecx,ebx - - ;push ecx - - - pop eax - red_button: - cmp ah, 8 - jne green_button - mov [cred],cl - call set_spectr - jmp still + cmp ah,13 ; COLOR SWAP + jne color_swap_end + push [color2] + push [color] + pop [color2] + pop [color] + call draw_result + color_swap_end: + cmp ah, 7 ; Проверяем нажата кнопка с ID=7 + jne color_button ; Если не нажата, то идём дальше + call mouse_get ; Иначе включаем обработчик мыши, чтобы считать значение цвета с палитры + jmp still ; И уходим на ожидание другого события + color_button: ; РАСЧЁТ координат для ползунков RGBA + push eax ; запоминаем еах + call mouse_local ; получаем локальные координаты + mov ebx,137 ; нижняя граница ползунка по У + mov ecx,[mouse_y] ; занисим в есх значение курсора по У + sub ebx,ecx ; находим разность (т.е. куда смещается ползунок) + mov ecx,3 ; заносим в есх цифру 3 (256/3=85, где 85-высота ползунков) + imul ecx,ebx ; находим истинный параметр цвета с учётом масштаба ползунка---+ + pop eax ; восстанавливаем еах : + ;red_button: ; Красный Трекбар : + cmp ah, 8 ; ID=8 : + jne green_button ; если нет, то проверяем зелёный трекбар : + mov [cred],cl ; иначе присваиваем значение, красному цвету спектра <------+ + call set_spectr ; устанавливаем спектр + jmp still ; Уходим на ожидание другого события green_button: cmp ah, 9 jne blue_button mov [cgreen],cl call set_spectr - jmp still + jmp still ; Уходим на ожидание другого события blue_button: cmp ah, 10 - jne still + jne alpha_button mov [cblue],cl call set_spectr - jmp still + jmp still ; Уходим на ожидание другого события + alpha_button: + cmp ah, 11 + jne still + mov [calpha],cl + call set_spectr + jmp still ; Уходим на ожидание другого события bexit: mcall -1 ; иначе конец программы ;end_button @@ -172,8 +190,8 @@ draw_window: mov ecx,eax ; Запоминаем высоту скина xor eax,eax ; Очищаем eax (mov eax,0) (Функция 0) - mov ebx,200 shl 16+250 ; [координата по оси x]*65536 + [размер по оси x] - add ecx,200 shl 16+195 ; Высота скина + [координата по y]*65536 + [размер по y] (168 для версии 0.2) + mov ebx,WIN_X shl 16+WIN_W ; [координата по оси x]*65536 + [размер по оси x] + add ecx,WIN_Y shl 16+WIN_H ; Высота скина + [координата по y]*65536 + [размер по y] (168 для версии 0.2) mov edx,[sc.work] ; Видимо стиль окна по дефолту or edx,0x34000000 ; Или окно со скином фиксированных размеров mov edi,title ; Заголовок окна @@ -183,21 +201,30 @@ draw_window: call draw_result ; РИСУЕМ РЕЗУЛЬТАТ mov eax,8 ; Функция 8 - определить/удалить кнопку - mov ebx,89 shl 16+147 ; Начальные координаты по х [к-та x]*65536 + [размер] + mov ebx,110 shl 16+147 ; Начальные координаты по х [к-та x]*65536 + [размер] mov ecx,9 shl 16+147 ; Начальные координаты по y [к-та y]*65536 + [размер] mov edx,0x60000007 ; Начальное ID кнопок - 0xXYnnnnnn int 0x40 - mov ebx,9 shl 16+12 ; Начальные координаты по х [к-та x]*65536 + [размер] + mov ebx,13 shl 16+12 ; Начальные координаты по х [к-та x]*65536 + [размер] mov edx,0x60000008 ; ID = 8 - mov ecx,45 shl 16+85 ; Начальные координаты по y [к-та y]*65536 + [размер] + mov ecx,51 shl 16+85 ; Начальные координаты по y [к-та y]*65536 + [размер] int 0x40 ; Рисуем невидимую кнопку под слайдером red - add ebx,26 shl 16 ; Добавляем + add ebx,23 shl 16 ; Добавляем inc edx ; ID = 9 int 0x40 ; Рисуем невидимую кнопку под слайдером green - add ebx,26 shl 16 ; Добавляем + add ebx,23 shl 16 ; Добавляем inc edx ; ID = 10 int 0x40 ; Рисуем невидимую кнопку под слайдером blue + add ebx,23 shl 16 ; Добавляем + inc edx ; ID = 11 + int 0x40 ; Рисуем невидимую кнопку под слайдером alpha + + mov eax,8 ; Функция 8 - определить/удалить кнопку (СМЕНА ЦВЕТА) + mov ebx,11 shl 16+20 ; Начальные координаты по х [к-та x]*65536 + [размер] + mov ecx,12 shl 16+20 ; Начальные координаты по y [к-та y]*65536 + [размер] + mov edx,0x6000000D ; ID = 13 + int 0x40 mov eax,12 ; функция 12: означает, что будет рисоваться окно mov ebx,2 ; 2 - конец рисования @@ -209,15 +236,15 @@ draw_window: mov eax,8 ; Функция 8 - определить/удалить кнопку mov ebx,4 shl 16+64 ; Начальные координаты по х [к-та x]*65536 + [размер] mov ecx,169 shl 16+16 ; Начальные координаты по y [к-та y]*65536 + [размер] - mov edx,11 ; ID = 11 + mov edx,12 ; ID = 12 mov esi,[sc.work_button] ; цвет int 0x40 - + mov ebx,80 shl 16+102 ; Начальные координаты по х [к-та x]*65536 + [размер] - mov edx,12 ; ID = 11 + mov edx,14 ; BACKGROUND button int 0x40 - - + + mov eax,4 ; 4 - вывести строку текста в окно mov ebx,25 shl 16+174 ; [координата по оси x]*65536 + [координата по оси y] mov ecx,[sc.work_button_text] ; 0xX0RRGGBB (RR, GG, BB задают цвет текста) @@ -230,7 +257,7 @@ draw_window: ;int 0x40 mov eax,38 ; Функция 38 - нарисовать отрезок. - mov ebx,4 shl 16+236 ;[координата начала по оси x]*65536 + [координата конца по оси x] + mov ebx,4 shl 16+257 ;[координата начала по оси x]*65536 + [координата конца по оси x] mov ecx,163 shl 16+163 ;[координата начала по оси y]*65536 + [координата конца по оси y] mov edx,0x00666666 ;0x00RRGGBB - цвет int 0x40 @@ -335,7 +362,7 @@ draw_palitra: mov ecx,9 shl 16+73 ; Начальные координаты по y [к-та y]*65536 + [размер] mov esi,2 ; Счетчик линий подложек re_draw: - mov ebx,89 shl 16+73 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ebx,110 shl 16+73 ; Начальные координаты по x [к-та x]*65536 + [размер] mov edi,2 ; Счетчик количества подложек for_fon_loop: int 0x40 ; Прерывание @@ -354,12 +381,12 @@ draw_palitra: mov eax,13 ; Функция 13 - нарисовать прямоугольник mov edx,0x0FFFFFFF ; цвет mov esi,4 ; Счетчик количества абзацев (#4,8) - mov ebx,78 shl 16+8 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ebx,99 shl 16+8 ; Начальные координаты по x [к-та x]*65536 + [размер] for_abz: ;;push esi ; Сохраняем значение счетчика линий в стек cmp esi,2 jne x2_line - mov ebx,78 shl 16+8 + mov ebx,99 shl 16+8 x2_line: add ebx,3 shl 16 ; Смещаем положение линии по x mov edi,8 ; Счетчик количества кнопок в строке @@ -479,115 +506,99 @@ sub_blue: draw_result: ;................................................................................................. - ; Отрисовка результата цвета в hex + ; Большая рамка вывода результата ;................................................................................................. mov eax,13 ; Функция 13 - нарисовать прямоугольник + mov edx,0x00666666 ; цвет-обводки + mov ebx,4 shl 16+98 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,9 shl 16+148 ; Начальные координаты по y [к-та y]*65536 + [размер] + int 0x40 + mov edx,0x00F3F3F3 ; цвет-фона + mov ebx,5 shl 16+96 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,10 shl 16+146 ; Начальные координаты по y [к-та y]*65536 + [размер] + int 0x40 + + ;................................................................................................. + ; Отрисовка результата цвета в hex color2 + ;................................................................................................. + mov eax,13 ; Функция 13 - нарисовать прямоугольник + ; color 2 - draw fringle mov edx,0x222222 ; цвет-обводки - mov ebx,4 shl 16+15 ; Начальные координаты по x [к-та x]*65536 + [размер] - mov ecx,9 shl 16+15 ; Начальные координаты по y [к-та y]*65536 + [размер] + mov ebx,16 shl 16+15 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,16 shl 16+15 ; Начальные координаты по y [к-та y]*65536 + [размер] int 0x40 ; Прерывание (ос рисует прямоугольник) - mov ebx,23 shl 16+62 ; Начальные координаты по x [к-та x]*65536 + [размер] + ; color 2 - draw color + mov edx,[color2] ; цвет + mov ebx,17 shl 16+13 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,17 shl 16+13 ; Начальные координаты по y [к-та y]*65536 + [размер] + int 0x40 ; Прерывание (ос рисует прямоугольник) + ; color 1 - draw fringle + mov edx,0x222222 ; цвет-обводки + mov ebx,11 shl 16+15 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,12 shl 16+15 ; Начальные координаты по y [к-та y]*65536 + [размер] + int 0x40 ; Прерывание (ос рисует прямоугольник) + ; value - draw fringle + mov ebx,34 shl 16+62 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,16 shl 16+15 ; Начальные координаты по y [к-та y]*65536 + [размер] int 0x40 ; Прерывание (ос рисует прямоугольник) + ; color 2 - draw color mov edx,[color] ; цвет - mov ebx,5 shl 16+13 ; Начальные координаты по x [к-та x]*65536 + [размер] - mov ecx,10 shl 16+13 ; Начальные координаты по y [к-та y]*65536 + [размер] + mov ebx,12 shl 16+13 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,13 shl 16+13 ; Начальные координаты по y [к-та y]*65536 + [размер] int 0x40 ; Прерывание (ос рисует прямоугольник) + ; value - draw background mov edx,0xFFFFFF ; цвет-фона - mov ebx,24 shl 16+60 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ebx,35 shl 16+60 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,17 shl 16+13 ; Начальные координаты по y [к-та y]*65536 + [размер] int 0x40 ; Прерывание (ос рисует прямоугольник) mov eax,47 ; Функция 47 - вывод числа в окно mov ecx,[color] ; число (при bl=0) или указатель (при bl=1) mov esi,0x0 ; 0xX0RRGGBB mov ebx,256+8 shl 16 ; параметры преобразования числа в текст (HEX) - mov edx,34 shl 16+13 ; [координата по оси x]*65536 + [координата по оси y] + mov edx,45 shl 16+20 ; [координата по оси x]*65536 + [координата по оси y] int 0x40 ; Прерывание - выводим результат в окно (HEX) mov eax,4 ; функция 4: написать текст в окне - mov ebx,27*65536+13 ; [x начальный] *65536 + [y начальный] + mov ebx,38*65536+20 ; [x начальный] *65536 + [y начальный] mov ecx,0x0 ; цвет текста RRGGBB mov edx,hex ; рисуем '#' mov esi,1 ; длина текста в байтах int 0x40 - ;................................................................................................. - ; Отрисовка полей для r g b значений - ;................................................................................................. - call get_spectr - mov eax,13 ; Функция 13 - нарисовать прямоугольник Leency{ - mov edx,0x222222 ; цвет-обводки - mov ebx,4 shl 16+24 ; Начальные координаты по x [к-та x]*65536 + [размер] - mov ecx,142 shl 16+15 ; Начальные координаты по y [к-та y]*65536 + [размер] - int 0x40 - mov ebx,33 shl 16+24 ; Начальные координаты по x [к-та x]*65536 + [размер] - int 0x40 - mov ebx,62 shl 16+24 ; Начальные координаты по x [к-та x]*65536 + [размер] - int 0x40 - mov edx,0xFFFFFF ; цвет-обводки - mov ebx,5 shl 16+22 ; Начальные координаты по x [к-та x]*65536 + [размер] - mov ecx,143 shl 16+13 ; Начальные координаты по y [к-та y]*65536 + [размер] - int 0x40 - mov ebx,34 shl 16+22 ; Начальные координаты по x [к-та x]*65536 + [размер] - int 0x40 - mov ebx,63 shl 16+22 ; Начальные координаты по x [к-та x]*65536 + [размер] - int 0x40 - ;................................................................................................. ; Отрисовка r g b значений ;................................................................................................. + call get_spectr + movzx eax,[cred] ; красный - mov ebx,7*65536+146 ; [x начальный] *65536 + [y начальный] + mov ebx,9*65536+142 ; [x начальный] *65536 + [y начальный] call draw_value ; выводим результат movzx eax,[cgreen] ; зеленый - mov ebx,36*65536+146 ; [x начальный] *65536 + [y начальный] + mov ebx,32*65536+142 ; [x начальный] *65536 + [y начальный] call draw_value ; выводим результат movzx eax,[cblue] ; синий - mov ebx,65*65536+146 ; [x начальный] *65536 + [y начальный] + mov ebx,55*65536+142 ; [x начальный] *65536 + [y начальный] + call draw_value ; выводим результат + + movzx eax,[calpha] ; альфа + mov ebx,78*65536+142 ; [x начальный] *65536 + [y начальный] call draw_value ; выводим результат ;................................................................................................. - ; Обнуляем фон - ;................................................................................................. - mov eax,13 ; Функция 13 - нарисовать прямоугольник - mov edx,[sc.work] ; цвет-обводки - mov ebx,8 shl 16+66 ; Начальные координаты по x [к-та x]*65536 + [размер] - mov ecx,40 shl 16+87 ; Начальные координаты по y [к-та y]*65536 + [размер] - int 0x40 - - ; mov eax,13 ; Функция 13 - нарисовать прямоугольник - ; mov edx,0x222222 ; цвет-обводки - ; mov ebx,4 shl 16+24 ; Начальные координаты по x [к-та x]*65536 + [размер] - ; mov ecx,30 shl 16+105 ; Начальные координаты по y [к-та y]*65536 + [размер] - ; int 0x40 - ; add ebx,29 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] - ; int 0x40 - ; add ebx,29 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] - ; int 0x40 - - mov eax,13 ; Функция 13 - нарисовать прямоугольник - mov edx,[sc.work] ; цвет-обводки - mov ebx,5 shl 16+22 ; Начальные координаты по x [к-та x]*65536 + [размер] - mov ecx,31 shl 16+103 ; Начальные координаты по y [к-та y]*65536 + [размер] - int 0x40 - add ebx,29 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] - int 0x40 - add ebx,29 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] - int 0x40 - - ;................................................................................................. - ; Выводим буквы r g b + ; Выводим буквы r g b a ;................................................................................................. mov eax,4 ; 4 - вывести строку текста в окно - mov ebx,12 shl 16+34 ; [координата по оси x]*65536 + [координата по оси y] + mov ebx,16 shl 16+40 ; [координата по оси x]*65536 + [координата по оси y] mov ecx,0x0 ; 0xX0RRGGBB (RR, GG, BB задают цвет текста) mov edx,cname ; указатель на начало строки mov esi,1 ; выводить esi символов newline: ; цикл int 0x40 ; Прерывание - add ebx,29 shl 16 ; Добавляем + add ebx,23 shl 16 ; Добавляем add edx,1 ; Добавляем cmp [edx],byte 'x' ; Сравнение с байтом х jne newline ; Если не нуль или не равно @@ -597,38 +608,46 @@ draw_result: ;................................................................................................. mov eax,13 ; Функция 13 - нарисовать прямоугольник mov edx,0x222222 ; цвет-обводки - mov ebx,12 shl 16+4 ; Начальные координаты по x [к-та x]*65536 + [размер] - mov ecx,45 shl 16+85 ; Начальные координаты по y [к-та y]*65536 + [размер] + mov ebx,16 shl 16+4 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,51 shl 16+86 ; Начальные координаты по y [к-та y]*65536 + [размер] int 0x40 - add ebx,29 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] + add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] int 0x40 - add ebx,29 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] + add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] + int 0x40 + add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] int 0x40 mov edx,0xFA0919 ; цвет-обводки - mov ebx,13 shl 16+2 ; Начальные координаты по x [к-та x]*65536 + [размер] - mov ecx,46 shl 16+83 ; Начальные координаты по y [к-та y]*65536 + [размер] + mov ebx,17 shl 16+2 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ecx,52 shl 16+84 ; Начальные координаты по y [к-та y]*65536 + [размер] int 0x40 mov edx,0x08CE19 ; цвет-обводки - add ebx,29 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] + add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] int 0x40 mov edx,0x0909FF ; цвет-обводки - add ebx,29 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] + add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] + int 0x40 + mov edx,0xE4E4E4 ; цвет-обводки + add ebx,23 shl 16 ; Начальные координаты по x [к-та y]*65536 + [размер] int 0x40 ;................................................................................................. ; Отрисовка ползунков ;................................................................................................. mov edx,0x0 ; цвет-ползунков - mov ebx,10 shl 16+8 ; Начальные координаты по x [к-та x]*65536 + [размер] + mov ebx,17 shl 16+11 ; Начальные координаты по x [к-та x]*65536 + [размер] movzx eax,[cred] ; берем значение цвета call draw_slider - add ebx,29 shl 16 + add ebx,23 shl 16 movzx eax,[cgreen] ; берем значение цвета call draw_slider - add ebx,29 shl 16 + add ebx,23 shl 16 movzx eax,[cblue] ; берем значение цвета call draw_slider + add ebx,23 shl 16 + movzx eax,[calpha] ; берем значение цвета + call draw_slider ret ; Возвращаем управление ;end_draw_result @@ -637,12 +656,19 @@ draw_slider: xor ecx,ecx mov cl,0x3 ; будем делить его на 3 так как ползунки длинной 85 пикселей div cl ; делим - целое в al остаток в ah - mov cl,128 ; нижняя точка ползунка + mov cl,136 ; нижняя точка ползунка sub cl,al ; cl=cl-al shl ecx,16 - add ecx,4 ; задаем начальное положение + add ecx,1 ; задаем начальное положение mov eax,13 ; Функция 13 - нарисовать прямоугольник int 0x40 + push ebx ; сохраняем для следующего ползунка x+w + sub ebx,8 ; так как ширина линии 11 то отнимаем 8 чтобы кубик стал шириной 3 + add ebx,8 shl 16 ; Координаты по x для квадрата на ползунке смещаем на 8 в право + inc ecx ; быдлокодим высоту ползунка до 3-х (1+1=2) + inc ecx ; (2+1=3) ну вот у нас будет кубик 3х3 на 8 в право от линии + int 0x40 ; рисуем + pop ebx ; восстанавливаем нормальные координаты ret ; Возвращаем управление ;end_slider @@ -657,9 +683,18 @@ draw_value: call int2ascii ; конвертируем число и ложим как строку в буфер + esi длина mov eax,4 ; функция 4: написать текст в окне pop ebx ; достаем из стека присланные координаты - mov ecx,0x0 ; цвет текста RRGGBB - mov edx,buff ; указатель на начало текста - int 0x40 + cmp esi,2 ; ЦЕНТРИРОВАНИЕ ТЕКСТА + jne draw_value_1 + add ebx,4 shl 16 + jmp draw_value_e + draw_value_1: + cmp esi,1 + jne draw_value_e + add ebx,7 shl 16 + draw_value_e: + mov ecx,0x0 ; цвет текста RRGGBB + mov edx,buff ; указатель на начало текста + int 0x40 ret ; Возвращаем управление ;end_draw_value @@ -714,19 +749,28 @@ get_spectr: ;................................................................................................. ; возвращает r,g,b состовляющие цвета ;................................................................................................. - ; get blue + ;; get blue + ;mov ecx,[color] + ;movzx eax,cl + ;mov [cblue],al + ;; get red + ;mov eax,ecx + ;xor ax,ax ; а надо ли???? + ;shr eax,16 + ;mov [cred],al + ;; get green + ;shl ecx,16 + ;shr ecx,24 + ;mov [cgreen],cl + mov ecx,[color] - movzx eax,cl - mov [cblue],al - ; get red - mov eax,ecx - xor ax,ax - shr eax,16 - mov [cred],al - ; get green - shl ecx,16 - shr ecx,24 - mov [cgreen],cl + mov [cblue],cl + shr ecx,8 + mov [cgreen],cl + shr ecx,8 + mov [cred],cl + shr ecx,8 + mov [calpha],cl ret ; и возвращаем управление ;end_get_spectr @@ -734,8 +778,9 @@ set_spectr: ;................................................................................................. ; устанавливает из r,g,b цвет ;................................................................................................. - ; get blue - movzx eax,[cred] + movzx eax,[calpha] + shl eax,8 + mov al,[cred] shl eax,8 mov al,[cgreen] shl eax,8 @@ -774,19 +819,23 @@ str_len: ;----------------------------------------------------------------------------------------------------/ color dd 00000000h ; хранит значение выбранного цвета + color2 dd 00FFFFFFh ; хранит значение второго выбранного цвета mouse_x dd 0 ; хранит глобальную х координату мыши mouse_y dd 0 ; хранит глобальную у координату мыши desctop_w dd 0 ; хранит ширину экрана sc system_colors ; хранит структуру системных цветов скина - title db 'Palitra v0.3',0 ; хранит имя программы + title db 'Palitra v0.4',0 ; хранит имя программы hex db '#',0 ; для вывода решётки как текста - cname db 'RGBx' ; хранит разряды цветов (red,green,blue) x-метка конца + cname db 'RGBAx' ; хранит разряды цветов (red,green,blue) x-метка конца cred db 0 ; храним красный спекрт cgreen db 0 ; храним зеленый спектр cblue db 0 ; храним синий спектр + calpha db 0 ; храним прозрачность buff db '000',0 bnext db 'NEXT BACKGROUND',0; имя кнопки pnext dd 0 ; счетчик переключения палитры + + I_END: