четверг, 27 января 2011 г.

Lua и Cairo. Рисуем нечто похожее на компьютер.

Предисловие
Ваш образ или образ представляемого продукта должен быть запоминающимся. И если вы не знакомы с дизайном, то лучше доверить профессионалам с 4press.com.ua создание фирменного стиля, который будет выгодно отличать вас среди серой массы.

Продолжаем добавлять Conky на рабочий стол. Для отображения компьютеров в сети (или не в сети, как уж повезет) потребуется соответствующая иконка. Чтобы не подгружать ее лишний раз извне, лучше нарисовать ее средствами Lua и Cairo.
Вот что получилось:


А теперь немного подробностей.
Файл с настройками самих Conky точно такой же как в предыдущем посте, за исключением названия Lua-скрипта.
Стартовая функция, как обычно:

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)
--здесь будут вызовы функци и т.п.
cairo_destroy(cr)
end

Функция, для отрисовки иконки компьютера:

function fSimpleComp(nX, nY, nAlpha, sName, sIP)

где  nX, nY - координаты вывода, nAlpha - прозрачность, sName - название и sIP - адрес копьютера в сети.

--рисуем экран монитора
cairo_move_to(cr, nX, nY)
cairo_line_to(cr, nX+50, nY)
cairo_line_to(cr, nX+50, nY+30)
cairo_line_to(cr, nX, nY+30)
cairo_line_to(cr, nX, nY)
cairo_set_source_rgba(cr, fRGBtoARGB(0x000000, nAlpha))
cairo_fill (cr)

--рисуем ножку 
cairo_set_source_rgba(cr, fRGBtoARGB(0x000000, nAlpha))
cairo_set_line_width (cr, 15)
cairo_move_to(cr, nX+25, nY+30)
cairo_line_to(cr, nX+25, nY+34)
cairo_stroke(cr)

--рисуем основание 
cairo_set_source_rgba(cr, fRGBtoARGB(0x000000, nAlpha))
cairo_set_line_width (cr, 2)
cairo_move_to(cr, nX+10, nY+35)
cairo_line_to(cr, nX+40, nY+35)
cairo_stroke(cr)

--и наконец сам системный блок 
cairo_move_to(cr, nX+52, nY)
cairo_line_to(cr, nX+75, nY)
cairo_line_to(cr, nX+75, nY+36)
cairo_line_to(cr, nX+52, nY+36)
cairo_line_to(cr, nX+52, nY)
cairo_set_source_rgba(cr, fRGBtoARGB(0x000000, nAlpha))
cairo_fill (cr)

--а это вывод названия и адреса через соответствующую функцию 
fDrawTextCenter (nX+37.5, nY-5, sName, 16, nAlpha)
fDrawTextCenter (nX+37.5, nY+50, sIP, 16, nAlpha)

--и end в конце
end

Функция тоже не представляет особых сложностей. Они  начнутся дальше (:


Смотри также

5 коммент.:

  1. Классное у вас оформление! И я первый раз вижу, чтобы картинку не рисовали, а писали кодом!

    ОтветитьУдалить
  2. John Spade, спасибо. Это, в принципе, самое простое что можно нарисовать, бывало и посложнее, хотя может и здесь будет. Посмотрим (:

    ОтветитьУдалить
  3. ramzport отлично, оригинально:)

    ОтветитьУдалить
  4. Чертовски здорово!

    ОтветитьУдалить
  5. Анонимные, то ли еще будет))

    ОтветитьУдалить