palitra 0.4+bg

git-svn-id: svn://kolibrios.org@3088 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2012-12-07 03:41:42 +00:00
parent b5071acd7b
commit be21989975

View File

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