Tuesday, December 06, 2005

簡介Cairo


從一開始我發現Cairo這個drawing library後
一直覺得一定要花時間好好研究一下
因為他一定是一個明日之星
看到Gtk+-2.8已經開始使用cairo當成backend
越來越覺得可以思考一下他的利用

最近試了一下gtk與cairo的整合部份
其實gtk並沒有將cairo包裝起來
而是你可以利用cairo的一樣寫法在gtk程式中

舉例來說
我使用一個drawingarea來示範

GtkWidget *target;
cairo_t *cr;

target = lookup_widget((GtkWidget *)button, "drawingarea1");
cr = gdk_cairo_create ((GtkWidget *)target->window);

cairo_move_to (cr, 10, 10);
cairo_line_to (cr, 150, 20);
cairo_rel_line_to (cr, -50, 100);
cairo_close_path (cr);

cairo_move_to(cr, 150, 100);
cairo_show_text (cr, "中文測試");

cairo_stroke (cr);

cairo_destroy (cr);

(PS. gtk都是使用UTF-8編碼, 所以中文沒問題)
這是一個簡單的glade所完成的gtk+程式(執行畫面如最上方圖)
你可以看到除了得到cairo_t的部份外, 幾乎都是cairo原身的語法
其實gtkmm似乎有在完成cairo的widget元件
但是我其實還挺欣賞這種作法的

gtkmm也可以直接使用cairo的function
唯一差別只在取得cairo_t的方式
對於GUI後端顯示技術與向量式繪圖有興趣的朋友
不妨去看看cairo吧

No comments: