cairoを使って文字列を描画してみた。でも日本語が使えない。
入手先
開発環境
- Windows XP Pro SP3 32bit
- VC++ 2010 Express
ライブラリ
- glade3-3.6.7-with-GTK+.exe
- GTK+ 2.16.2.1602
- cairo 1.8.6
VC++
追加インクルードディレクトリ
$(GTK_HOME)\include\;
$(GTK_HOME)\include\atk-1.0;
$(GTK_HOME)\include\cairo;
$(GTK_HOME)\include\gail-1.0;
$(GTK_HOME)\include\glib-2.0;
$(GTK_HOME)\include\gtk-2.0;
$(GTK_HOME)\include\pango-1.0;
$(GTK_HOME)\lib\glib-2.0\include\;
$(GTK_HOME)\lib\gtk-2.0\include\;
一行にすると以下。
$(GTK_HOME)\include\;$(GTK_HOME)\include\atk-1.0;$(GTK_HOME)\include\cairo;$(GTK_HOME)\include\gail-1.0;$(GTK_HOME)\include\glib-2.0;$(GTK_HOME)\include\gtk-2.0;$(GTK_HOME)\include\pango-1.0;$(GTK_HOME)\lib\glib-2.0\include\;$(GTK_HOME)\lib\gtk-2.0\include\;
追加ライブラリディレクトリ
$(GTK_HOME)\lib;
追加ライブラリファイル
glib-2.0.lib;
gtk-win32-2.0.lib;
gdk-win32-2.0.lib;
gobject-2.0.lib;
gdk_pixbuf-2.0.lib;
gthread-2.0.lib;
gmodule-2.0.lib;
pango-1.0.lib;
atk-1.0.lib;
zdll.lib;
cairo.lib;
一行にすると以下。
glib-2.0.lib;gtk-win32-2.0.lib;gdk-win32-2.0.lib;gobject-2.0.lib;gdk_pixbuf-2.0.lib;gthread-2.0.lib;gmodule-2.0.lib;pango-1.0.lib;atk-1.0.lib;zdll.lib;cairo.lib;
ソースコード
#include <gtk-2.0/gtk/gtk.h>
#include <cairo.h>
gboolean expose_event_callback(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
cairo_t *cr;
cr = gdk_cairo_create(widget->window);
cairo_move_to(cr, 30, 30);
cairo_set_font_size(cr, 24);
cairo_show_text(cr, "Hello Cairo !!");
cairo_destroy(cr);
return FALSE;
}
int main(int argc, char* argv[])
{
gtk_set_locale();
gtk_init(&argc, &argv);
GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Hello Cairo !! (GTK+, WindowsXP, VC++2010Express)");
gtk_window_set_default_size(GTK_WINDOW(window), 400, 300);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
GtkWidget *drawing_area = gtk_drawing_area_new();
gtk_widget_set_size_request (drawing_area, 100, 100);
gtk_container_add(GTK_CONTAINER(window), drawing_area);
g_signal_connect(G_OBJECT(drawing_area), "expose_event", G_CALLBACK(expose_event_callback), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
すっきり。これがWindowsメッセージループとGDIで実装していたらもっと行数が多い。
でも、cairoとGDIではそんなに差はなさそうか。
https://github.com/ytyaru/HelloGDI20160701/blob/master/HelloGDI20160701/Program.cpp
https://github.com/ytyaru/HelloGDI20160701
日本語が使えない
cairoのAPIはTCHAR(wchar_t)型が使えない。
どうやって日本語を表示させるのか。 あるいは日本語は表示できないのか。 さっぱりわからない。
VC++でcairoを使ったとき、日本語を表示できるのか。 ほかのコンパイラならできるのか。
GTK+やcairoはクロスプラットフォームなライブラリらしいが、英語限定なら使えない。 調査が必要。