lua无法识别cairo_text_extents_t

时间:2017-03-08 12:33:31

标签: lua cairo conky

我在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_extentslua 1}}没有任何输出关闭。

有没有办法让conky识别出数据类型?

1 个答案:

答案 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)