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)
Другие вопросы по тегам