2017-03-08 9 views
1

私はconkyによっていくつかのものを表示するためにluaにいくつかのウィジェットを書いています。 私はテキストを中心にしたいと思ったところに達しました。 thisチュートリアルの後、私はluaコードにCコードを移植し、それは次のようになります。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_extentsに渡されるべきCデータ型cairo_text_extents_tではないということですluaによって認識され、実際にはconkyは出力なしで終了します。

luaはデータ型を認識させる方法はありますか?

+0

私はあなたが 'ローカルエクステント= {}'や 'エクステント= cairo_text_extents(CR、UTF8)'行う必要がありますね。 – lhf

+0

'cairo_text_extents'関数は何も返さないので、' C'では '&extents'を渡すことが期待されます。'&extents'は 'cairo_text_extents_t'型の変数のメモリアドレスです。 – Michael

答えて

3

最終的に答えが見つかりました。

cairo_text_extents_t:create() function
この関数を呼び出し新しいcairo_text_extents_t構造を返すために:here指定されているようConkyのであり、私は必要なものない機能が存在します。 A この構造の作成関数は、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) 
関連する問題