суббота, 26 февраля 2011 г.

Вывод текста lua-скриптом

Для вывода текста с помощью скрипта написанном с использованием lua+cairo имеется не так уж много специальных команд. Рассмотрим самый простой вариант вывода текста.


Команда задающая шрифт выводимого сообщения

cairo_select_font_face (cr, font_name, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL)


font_name - название шрифта, пишется в кавычках, например "Ubuntu"

CAIRO_FONT_SLANT_NORMAL - вывод обычного текста

CAIRO_FONT_SLANT_ITALIC - вывод курсива, наклонного текста

CAIRO_FONT_WEIGHT_NORMAL - вывод обычного текста

CAIRO_FONT_WEIGHT_BOLD - вывод жирного текста

Команда задающая размер шрифта

cairo_set_font_size (cr, font_size)

font_size - размер шрифта

Команда задающая цвет шрифта
 
cairo_set_source_rgba (cr, 1, 1, 1, 1)

Первая цифра - красный цвет
Вторая цифра - зелёный цвет
Третья цифра - синий цвет
Четвертая цифра - насыщенность, прозрачность, цвета
Все цвета и насыщенность могут иметь значения от 0 до 1. В данном примере текст будет выводиться белым с наибольшей яркостью. В дальнейшем я расскажу как можно вводить цвет более привычным способом, т.е. таким 0xFFFFFF.

Теперь, когда все готово к выводу, необходимо задать точку начала вывода текста.

cairo_move_to (cr, x, y)

x - координаты точки по горизонтали в пикселях
y - координаты точки по вертикали в пикселях

Осталось только вывести текст

cairo_show_text (cr, text)

text - любой текст

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

conky_parse ("${time %H:%M:%S}")

Таким образом в луа выводятся все команды которые прописываются в conkyrc.

Теперь можно приступить к написанию скрипта, который будет выводить время в окно конок. Скрипт пишется по определенной схеме. Некоторые правила написания я покажу на примере скрипта для вывода текста.

-- --------------------------------------------------------------------------------------------------------------------
--[[ Два тире и две открывающие квадратные скобки означают, что дальше идут комментарии, которые занимают больше одной строки.
Здесь обычно пишут название скрипта, время написания, данные о работе скрипта и прочие необходимые записи.
В конце комментарий ставятся две закрывающие квадратные скобки ]]

-- Два тире показывают, что далее идут комментарии. Действуют до конца строки.

require 'cairo'     -- будет использован cairo

-- Далее пишем название функции

function conky_draw_text()

--[[ пустые кавычки в названии функции показывают, что все данные, необходимые для работы находятся в самом скрипте]]

-- задаём координаты для вывода текста

x = 10
y = 50

-- задаем данные для шрифта

font_name = "Ubuntu"
font_size = 24

-- задаем текст

text = conky_parse("${time %H:%M:%S}")

-- Проверяем, запущены конки или нет

if conky_window == nil then return end

-- делаем задержку 3 секунды

if tonumber(conky_parse("$updates"))<3 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_select_font_face (cr, font_name, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD)

cairo_set_font_size (cr, font_size)

cairo_set_source_rgba (cr, 1, 0, 0, 1)
-- цвет текста красный

cairo_move_to (cr, x, y)

cairo_show_text (cr, text)


-- Даем команду закончить работу

cairo_destroy(cr)

-- конец скрипта

end
-- ------------------------------------------------------------------------------------------------

Теперь сохраняем скрипт в папке scripts, или в любой другой по вашему усмотрению, даём права на исполнение, и вписываем в conkyrc следующие строки выше TEXT

lua_load ~/scripts/text.lua
lua_draw_hook_pre draw_text


Первая строка загружает скрипт, вторая запускает скрипт.


Если ниже слова TEXT нет никаких записей, то должна быть минимум одна пустая строка, иначе скрипт работать не будет.

После запуска коньков получим такую картинку.

Изменением координат, размера шрифта, цвета, добиваемся необходимого результата.

Этот образец работает, но конечно далек от совершенства. Далее я продолжу рассказ о некоторых функциях позволяющих выводить более совершенные тексты.

2 комментария:

  1. Спасибо. Весьма интересно. Ждём продолжения.

    ОтветитьУдалить
  2. Спасибо. Очень полезная и позновательная информация

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