2017-03-08 96 views
1

我在lua中寫了一些小部件供conky用來顯示一些內容。 我達到了我希望以文本爲中心的一點。繼this教程中,我移植了C代碼爲lua代碼,因此它現在看起來是這樣的:cairo_text_extents_t不被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) 

我現在處理的問題是,應傳遞給cairo_text_extentsC數據類型cairo_text_extents_tlua確認,實際上conky關閉沒有任何輸出。

有沒有辦法讓lua識別數據類型?

+0

我想你需要做的'當地程度= {}'或'程度= cairo_text_extents(CR,UTF8)'。 – lhf

+0

我不這麼認爲,因爲函數'cairo_text_extents'不返回任何東西,事實上在'C'中,你需要傳遞'&extents',其中'&extents'是一個類型爲'cairo_text_extents_t'的變量的內存地址。 。 – Michael

回答

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)