вторник, 8 марта 2011 г.

Цвет в конки продолжение.

Радиальная градация предназначена в первую очередь для окраски кругов, но это не значит, что её нельзя применить для окраски других объектов. Она производится по такому принципу, это конечно моё понятие о радиальной градации.


Рисуем круг окрашенный цветом #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

-- задаем параметры

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_arc (cr, 128, 128, 100, 0, 2*math.pi)
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_destroy(cr)
end


Таким образом, комбинируя и экспериментируя можно вывести изображения любых фигур.

Комментариев нет:

Отправить комментарий