我在lua中编写一些小部件,供conky
用来显示一些东西。
我达到了一个我希望以文字为中心的地步。在this教程之后,我将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
的{{1}}数据类型cairo_text_extents
,lua
1}}没有任何输出关闭。
有没有办法让conky
识别出数据类型?
答案 0 :(得分:3)
我终于找到了答案。在conky中,存在一个按照指定here执行我需要的功能:
cairo_text_extents_t:create() function
调用此函数可返回新的cairo_text_extents_t
结构。一个 cairo API不提供此结构的创建功能。 调用此函数后,您应该在返回时使用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)