cairo_text_extents_t не распознается lua
Я пишу некоторые виджеты в Луа, которые будут использоваться conky
чтобы показать некоторые вещи. Я достиг точки, в которой я хотел бы центрировать текст. После этого урока я портировал C
кода в lua
код, так что теперь это выглядит так:
local extents
local utf8 = "cairo"
local x, y
cairo_select_font_face(cr, "Ubuntu", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL)
cairo_set_font_size(cr, 13)
cairo_text_extents(cr, utf8, extents)
x = 128.0 - (extents.width / 2 + extents.x_bearing)
y = 128.0 - (extents.height / 2 + extents.y_bearing)
cairo_move_to(cr, x, y)
cairo_show_text(cr, utf8)
Проблема, с которой я сейчас имею дело, заключается в том, что C
тип данных cairo_text_extents_t
это должно быть передано cairo_text_extents
не признается lua
, по факту conky
закрывается без вывода.
Есть ли способ сделать lua
распознать этот тип данных?
1 ответ
Я наконец нашел ответ. В conky существует функция, которая делает то, что мне нужно, как указано здесь:
cairo_text_extents_t:create() function
Вызовите эту функцию, чтобы вернуть новыйcairo_text_extents_t
состав. Функция создания для этой структуры не предоставляется API cairo. После вызова этого вы должны использоватьtolua.takeownership()
на возвращаемое значение, чтобы обеспечить право собственности передается должным образом.
Итак, достаточно сделать следующее:
local extents = cairo_text_extents_t:create()
tolua.takeownership(extents)
local utf8 = "cairo"
local x, y
cairo_select_font_face(cr, "Ubuntu", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL)
cairo_set_font_size(cr, 52)
cairo_text_extents(cr, utf8, extents)
x = 128.0 - (extents.width / 2 + extents.x_bearing)
y = 128.0 - (extents.height / 2 + extents.y_bearing)
cairo_move_to (cr, x, y)
cairo_show_text (cr, utf8)