Радиальная градация предназначена в первую очередь для окраски кругов, но это не значит, что её нельзя применить для окраски других объектов. Она производится по такому принципу, это конечно моё понятие о радиальной градации.
Рисуем круг окрашенный цветом #3D3D3D с координатами x0, y0 и радиусом radius0
Накладываем на него второй круг с цветом #FFFFFF с координатами x1, y1, radius1
Задаем радиальную градацию параметром pat
Получаем рисунок с радиальным переходом цвета
Но это не значит, что в параметре pat должны быть точные координаты и размеры необходимого круга. Радиусы могут быть больше или меньше, всё лишнее будет отброшено размерами которые вы зададите при выводе изображения. Туманное объяснение, лучше показать.
Например рисуем кнопку запуска
-- начало скрипта
require 'cairo'
function conky_toggle ()
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
-- задаем данные для цвета
-- задаем параметры
-- параметры для первого изображения
-- получаем такую картинку
-- накладываем второе изображение
-- получаем изображение кнопки
cairo_destroy(cr)
end
Таким образом, комбинируя и экспериментируя можно вывести изображения любых фигур.
Рисуем круг окрашенный цветом #3D3D3D с координатами x0, y0 и радиусом radius0
Накладываем на него второй круг с цветом #FFFFFF с координатами x1, y1, radius1
Задаем радиальную градацию параметром pat
pat = cairo_pattern_create_radial (x1, y1, radius1, x0, y0, radius0)
Получаем рисунок с радиальным переходом цвета
Но это не значит, что в параметре pat должны быть точные координаты и размеры необходимого круга. Радиусы могут быть больше или меньше, всё лишнее будет отброшено размерами которые вы зададите при выводе изображения. Туманное объяснение, лучше показать.
Например рисуем кнопку запуска
-- начало скрипта
require 'cairo'
function conky_toggle ()
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
-- задаем данные для цвета
colour0 = 0xffffff
colour1 = 0x3d3d3d
alpha = 1
colour1 = 0x3d3d3d
alpha = 1
-- задаем параметры
pat = cairo_pattern_create_radial (100, 0, 50, 100, 0, 200)
cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(colour0, alpha))
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(colour1, alpha))
cairo_set_source (cr, pat)
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(colour1, alpha))
cairo_set_source (cr, pat)
-- параметры для первого изображения
cairo_arc (cr, 128, 128, 100, 0, 2*math.pi)
cairo_fill (cr)
cairo_pattern_destroy (pat)
cairo_fill (cr)
cairo_pattern_destroy (pat)
-- получаем такую картинку
-- накладываем второе изображение
pat = cairo_pattern_create_radial (90, 200, 25, 90, 180, 180)
cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(colour0, alpha))
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(colour1, alpha))
cairo_set_source (cr, pat)
cairo_arc (cr, 128, 128, 90, 0, 2*math.pi)
cairo_fill (cr)
cairo_pattern_destroy (pat)
cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(colour0, alpha))
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(colour1, alpha))
cairo_set_source (cr, pat)
cairo_arc (cr, 128, 128, 90, 0, 2*math.pi)
cairo_fill (cr)
cairo_pattern_destroy (pat)
-- получаем изображение кнопки
cairo_destroy(cr)
end
Таким образом, комбинируя и экспериментируя можно вывести изображения любых фигур.
Комментариев нет:
Отправить комментарий