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

Conky. Псевдолинза

Нет бы взяться за изучение создания линз, а не изобретать очередной велосипед, но простота использования Conky так и толкает на "преступление". Как всегда, с помощью Cairo и Lua будем маскировать "коньки" под нечто оригинальное. В данном случае под линзы unity-интерфейса.



Первым делом создаем rc-конфигурацию:



# .conkyrc by ramZport, http://ramzport.blogspot.com

own_window yes
own_window_title FirstLense
own_window_type normal
own_window_argb_visual yes
own_window_transparent yes
own_window_hints undecorated, above,sticky,skip_taskbar,skip_pager
double_buffer yes
alignment top_left
gap_x 48
gap_y 25

#ops
update_interval 1.0
lua_load ~/Программы/Conky/Lenses/FirstLense.lua
lua_draw_hook_pre startlua

TEXT
${offset 1180}${voffset 593}


Далее напишем простой Lua-скрипт, рисующий основу будущей линзы - FirstLense.lua:


--[[FirstLense.lua by ramZport, http://ramzport.blogspot.com]]--

require 'cairo'

--[[Начальная функция вызываемая из Conky]]--

function conky_startlua()

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)
nWidth = conky_window.width-50
nHeight = conky_window.height-50
cairo_scale (cr, 1, 1)
cairo_move_to(cr, 0, 0)
cairo_line_to(cr, nWidth+1, 0)
cairo_line_to(cr, nWidth+1, nHeight-4)
cairo_arc (cr, nWidth-4, nHeight-4, 5, math.rad(0), math.rad(90))
cairo_line_to(cr, 0, nHeight+1)
cairo_line_to(cr, 0, 0)
cairo_set_source_rgba(cr, fRGBtoARGB(0x000000, 0.6))
cairo_fill (cr)

cairo_move_to(cr, nWidth+2, 0)
cairo_line_to(cr, nWidth+32, 0)
cairo_line_to(cr, nWidth+32, nHeight+2)
cairo_arc (cr, nWidth+2, nHeight+2, 30, math.rad(0), math.rad(90))
cairo_line_to(cr, 0, nHeight+32)
cairo_line_to(cr, 0, nHeight+2)
cairo_line_to(cr, nWidth-3, nHeight+2)
cairo_arc_negative (cr, nWidth-3, nHeight-3, 5, math.rad(90), math.rad(0))
cairo_line_to(cr, nWidth+2, 0)
cairo_set_source_rgba(cr, fRGBtoARGB(0x000000, 0.2))
cairo_fill (cr)

cairo_line_to(cr, nWidth+34, 0)
cairo_line_to(cr, nWidth+34, nHeight+2)
cairo_arc (cr, nWidth+2, nHeight+2, 32, math.rad(0), math.rad(90))
cairo_line_to(cr, 0, nHeight+34)
cairo_set_source_rgba(cr, fRGBtoARGB(0x000000, 0.075))
cairo_set_line_width (cr, 2)
cairo_stroke(cr)

cairo_destroy(cr)

end


--[[Функция перевода цвета из RGB в ARGB]]--

function fRGBtoARGB (nColor, nAlpha)

-- nColor - цвет RGB (0x000000)
-- nAlpha - степень прозрачности, от 0 до 1

return ((nColor / 0x10000) % 0x100) / 255., ((nColor / 0x100) % 0x100) / 255., (nColor % 0x100) / 255., nAlpha

end

Вот такими нехитрыми строками получаем площадку для экспериментов над Conky.


Послесловие:
Японская поэзия отличается своеобразным складом стиха. Особенно это бросается в глаза, когда на них пытаются наложить современную тематику. Если вы любите восточные стихи, не забывайте делится ими с такими же любителями.

Смотри также:
Что вы хотите видеть в Conky?

0 коммент.:

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