Цвет на мониторе создаётся смешиванием трех основных цветов, красного - R, зеленого - G, голубого - B. Насыщенность полученного цвета, его прозрачность, устанавливается параметром alpha. Изменяя параметры каждого цвета можно получить десятки тысяч всевозможных цветов и оттенков.
Для подбора цвета я использую программу Agave, есть в репозитарии, с помощью этой программы можно подобрать, задав определенный цвет, похожие, взаимодополняющие, монохромные цвета от двух до четырех.
В классических конках цвет можно задать как названием цвета
${color red}
так и шестнадцатеричным кодом
${color RRGGBB}
значения для каждого цвета можно изменять в пределах от 00 до FF.
Насыщенность цвета, только для текстов, устанавливается параметром
xftalpha = 1
который записывается выше слова TEXT и может иметь значение от 0 до 1.
В CAIRO цвет можно задать несколькими способами. Но программа понимает только значения от 0 до 1
Самый простой способ, это указать цвет в формате R - красный, G - зеленый, B - синий с помощью команды
cairo_set_source_rgb (cr, R, G, B)
Насыщенность цвета, его прозрачность, в этом случае, будет наибольшая и её нельзя изменить. Для изменения насыщенности необходимо использовать команду
cairo_set_source_rgba (cr, R, G, B, alpha)
alpha также может иметь значения от 0 - абсолютная прозрачность, до 1 - наибольшая насыщенность.
Всё это хорошо для программы, но обычно код цвета пишут в шестнадцатеричном коде, а пересчитывать код не очень то легко. Для этого в скрипт вводят функцию пересчета цвета.
function rgb_to_r_g_b(colour, alpha)
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
Эта функция забирает значения цвета в шестнадцатеричном коде и производит перерасчет в десятичное значение.
Для использования этой функции необходимо в скрипте задать цвет по такой форме
colour = 0xRRGGBB
и тогда команда для назначения цвета будет
cairo_set_source_rgba(cr, rgb_to_r_g_b(colour, alpha))
Напишем простой скрипт для вывода квадрата окрашенного в коричневый цвет с кодом #7F5906. Код можно писать как заглавными так и строчными буквами.
require 'cairo'
function brown_square ()
if conky_window == nil then return end
local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
cr = cairo_create (cs)
-- вставляем в текст локальную функцию для перерасчета цвета
local function rgb_to_r_g_b(colour, alpha)
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
-- задаем координаты
x = 20
y = 50
-- задаем размеры, так как это квадрат, то задаем только ширину или высоту
width = 200
-- задаем цвет и насыщенность
colour = 0x7f5906
alpha = 1
cairo_set_source_rgba(cr, rgb_to_r_g_b(colour, alpha))
-- рисуем квадрат
cairo_rectangle (cr, x, y, width, width)
cairo_fill (cr)
cairo_destroy(cr)
end
Теперь разберём градиентную окраску, то есть окраску с плавным переходом цвета из одного в другой. В классических конках такая окраска задействована в выводе баров командой
${cpugraph (номер cpu) (высота),(ширина) (первый цвет) (второй цвет) (шкала)}
Пример использования этой команды
${cpugraph cpu0 50,200 ff0000 0000ff -l}
При рисовании в cairo градиентная окраска предоставляет много возможностей для вывода псевдообъёмных рисунков. Пример градиентной окраски с использованием линейной и радиальной градации.
Для линейной градиентной окраски задаем параметры для окраски
в этой команде координаты
x0, y0 = x, y
x1, y1 = могут иметь различные параметры в зависимости от того, что мы желаем получить.
Назначаем цвет
в этой команде
pat - будет использована градация цвета
отступ - расстояние от границы изображения, до границы начала изменения цвета, минимальное значение 0, максимальное 1.
Далее следует команда, для вывода рисунка, возьмем к примеру квадрат
Включаем градиентную окраску
Окрашиваем
Выключаем градиентную окраску
cairo_pattern_destroy (pat)
Напишем простой скрипт для вывода квадрата окрашенного в коричневый цвет с кодом #7F5906 переходящим в синий цвет с кодом #062D7F.
require 'cairo'
function brown_blue_square ()
if conky_window == nil then return end
local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
cr = cairo_create (cs)
-- вставляем в текст локальную функцию для перерасчета цвета
local function rgb_to_r_g_b(colour, alpha)
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
-- задаем координаты
x = 20
y = 50
-- задаем размеры, так как это квадрат, то задаем только ширину или высоту
width = 200
-- задаем параметры
pat = cairo_pattern_create_linear (x, y, x, y + width)
-- задаем цвет и насыщенность
colour0 = 0x7f5906
colour1 = 0x062D7f
alpha = 1
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(colour0, alpha))
cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(colour1, alpha))
-- рисуем квадрат
-- включаем градиентную окраску
-- окрашиваем
-- отключаем градиентную окраску
Изменяя параметры градации можно например поменять цвета местами
повернуть
pat = cairo_pattern_create_linear (x, y, x + width, y)
Всё зависит от вашей фантазии.
В следующий раз расскажу о радиальной градиентной окраске.
Для подбора цвета я использую программу Agave, есть в репозитарии, с помощью этой программы можно подобрать, задав определенный цвет, похожие, взаимодополняющие, монохромные цвета от двух до четырех.
В классических конках цвет можно задать как названием цвета
${color red}
так и шестнадцатеричным кодом
${color RRGGBB}
значения для каждого цвета можно изменять в пределах от 00 до FF.
Насыщенность цвета, только для текстов, устанавливается параметром
xftalpha = 1
который записывается выше слова TEXT и может иметь значение от 0 до 1.
В CAIRO цвет можно задать несколькими способами. Но программа понимает только значения от 0 до 1
Самый простой способ, это указать цвет в формате R - красный, G - зеленый, B - синий с помощью команды
cairo_set_source_rgb (cr, R, G, B)
Насыщенность цвета, его прозрачность, в этом случае, будет наибольшая и её нельзя изменить. Для изменения насыщенности необходимо использовать команду
cairo_set_source_rgba (cr, R, G, B, alpha)
alpha также может иметь значения от 0 - абсолютная прозрачность, до 1 - наибольшая насыщенность.
Всё это хорошо для программы, но обычно код цвета пишут в шестнадцатеричном коде, а пересчитывать код не очень то легко. Для этого в скрипт вводят функцию пересчета цвета.
function rgb_to_r_g_b(colour, alpha)
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
Эта функция забирает значения цвета в шестнадцатеричном коде и производит перерасчет в десятичное значение.
Для использования этой функции необходимо в скрипте задать цвет по такой форме
colour = 0xRRGGBB
и тогда команда для назначения цвета будет
cairo_set_source_rgba(cr, rgb_to_r_g_b(colour, alpha))
Напишем простой скрипт для вывода квадрата окрашенного в коричневый цвет с кодом #7F5906. Код можно писать как заглавными так и строчными буквами.
require 'cairo'
function brown_square ()
if conky_window == nil then return end
local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
cr = cairo_create (cs)
-- вставляем в текст локальную функцию для перерасчета цвета
local function rgb_to_r_g_b(colour, alpha)
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
-- задаем координаты
x = 20
y = 50
-- задаем размеры, так как это квадрат, то задаем только ширину или высоту
width = 200
-- задаем цвет и насыщенность
colour = 0x7f5906
alpha = 1
cairo_set_source_rgba(cr, rgb_to_r_g_b(colour, alpha))
-- рисуем квадрат
cairo_rectangle (cr, x, y, width, width)
cairo_fill (cr)
cairo_destroy(cr)
end
Теперь разберём градиентную окраску, то есть окраску с плавным переходом цвета из одного в другой. В классических конках такая окраска задействована в выводе баров командой
${cpugraph (номер cpu) (высота),(ширина) (первый цвет) (второй цвет) (шкала)}
Пример использования этой команды
${cpugraph cpu0 50,200 ff0000 0000ff -l}
При рисовании в cairo градиентная окраска предоставляет много возможностей для вывода псевдообъёмных рисунков. Пример градиентной окраски с использованием линейной и радиальной градации.
Для линейной градиентной окраски задаем параметры для окраски
pat = cairo_pattern_create_linear (x0, y0, x1, y1)
в этой команде координаты
x0, y0 = x, y
x1, y1 = могут иметь различные параметры в зависимости от того, что мы желаем получить.
Назначаем цвет
cairo_pattern_add_color_stop_rgba (pat, отступ, R, G, B, alpha)
в этой команде
pat - будет использована градация цвета
отступ - расстояние от границы изображения, до границы начала изменения цвета, минимальное значение 0, максимальное 1.
Далее следует команда, для вывода рисунка, возьмем к примеру квадрат
cairo_rectangle (cr, x, y, width, height)
Включаем градиентную окраску
cairo_set_source (cr, pat)
Окрашиваем
cairo_fill (cr)
Выключаем градиентную окраску
cairo_pattern_destroy (pat)
Напишем простой скрипт для вывода квадрата окрашенного в коричневый цвет с кодом #7F5906 переходящим в синий цвет с кодом #062D7F.
require 'cairo'
function brown_blue_square ()
if conky_window == nil then return end
local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
cr = cairo_create (cs)
-- вставляем в текст локальную функцию для перерасчета цвета
local function rgb_to_r_g_b(colour, alpha)
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
-- задаем координаты
x = 20
y = 50
-- задаем размеры, так как это квадрат, то задаем только ширину или высоту
width = 200
-- задаем параметры
pat = cairo_pattern_create_linear (x, y, x, y + width)
-- задаем цвет и насыщенность
colour0 = 0x7f5906
colour1 = 0x062D7f
alpha = 1
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(colour0, alpha))
cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(colour1, alpha))
-- рисуем квадрат
cairo_rectangle (cr, x, y, width, width)
-- включаем градиентную окраску
cairo_set_source (cr, pat)
-- окрашиваем
cairo_fill (cr)
-- отключаем градиентную окраску
cairo_pattern_destroy (pat)
cairo_destroy (cr)
end
Изменяя параметры градации можно например поменять цвета местами
pat = cairo_pattern_create_linear (x, y + width, x, y)
повернуть
pat = cairo_pattern_create_linear (x, y, x + width, y)
Всё зависит от вашей фантазии.
В следующий раз расскажу о радиальной градиентной окраске.
Комментариев нет:
Отправить комментарий