lua无法识别cairo\u text\u extens\t
我正在用lua编写一些小部件,供conky用来显示一些东西。 我达到了一个点,我想中心文本。在接下来的教程中,我将lua无法识别cairo\u text\u extens\t,lua,cairo,conky,Lua,Cairo,Conky,我正在用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) cair
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\u text\u extends\t
应该传递给cairo\u text\u extends
的lua
无法识别,事实上conky
在没有任何输出的情况下关闭
有没有办法让lua识别出那个数据类型?我终于找到了答案。在conky中,有一个函数满足我的需要,具体如下:
cairo\u text\u extends\u t:create()函数
调用此函数以返回新的cairo\u text\u extensts\t
结构。A.
cairoapi不提供此结构的创建函数。
调用此函数后,应在返回时使用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)
我想您需要执行local extends={}
或extends=cairo\u text\u extends(cr,utf8)
。我不这么认为,因为函数cairo\u text\u extends
不返回任何内容,事实上在C
中,您需要传递它&extends
,其中&extends
是类型为cairo\u text\u extends\u t
的变量的内存地址。