forked from KolibriOS/kolibrios
palitra 0.4+bg
git-svn-id: svn://kolibrios.org@3088 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
b5071acd7b
commit
be21989975
@ -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:
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user