実践Linux                 TOPへ  Cプログラミング目次へ

Glade2/GTK+  2016年8月

●放物線運動



pangoを使ったTrueType文字の表示、cairoを使った描画(TrueType文字を含む)なども試してみました。

プログラムのダウンロード

実行ファイルはsrc/project2です。
なお、システムにあわせてフォントを入れ替える必要があります。
project2
 伝統的なコアXフォントを利用しています。
 システムに合わせて、フォントを入れ替えてやる必要があります。
 src/callbacks.cを編集して、フォントを設定しなおしてください(冒頭の#defineの部分)。

 xlsfontsコマンド等で表示されるフォントから、適切なフォントを選んで設定してください。
 フォントについては、こちらを参照。

 フォントを設定しなおしたら、同ディレクトリ(srcディレクトリ)内でmakeを実行します。
 実行ファイルproject2が更新されたら、これをダブルクリックして実行してみます。
 うまく表示されないときは、また別のフォントで試してみてください。

project2(pango), project2(cairo)
 TrueTypeフォントを使います。
 fc-listコマンド等で表示されるフォントから、適切なフォントを選んで設定してください。
 フォントを設定しなおしたら、同ディレクトリ内でmakeを実行します。


●プログラム・ソース(callbacks.c)抜粋

pango
void
Repaint1(GtkWidget *widget)
{
PangoLayout *mylayout;
PangoFontDescription *pfont_01;

GdkGC *gc1 = gdk_gc_new(widget->window);
px1 = gdk_pixmap_new(widget->window, widget->allocation.width, widget->allocation.height, -1);

・・・・・・・・・・・・(gc1の設定等)

mylayout = gtk_widget_create_pango_layout(widget, “”);
pfont_01 = pango_font_description_from_string(“Sazanami Mincho 18”);
pfont_02 = pango_font_description_from_string(“Sazanami Mincho 12”);

pango_layout_set_font_description(mylayout, pfont_01);
pango_layout_set_text(mylayout, “200”, 3); //最後の数字は表示する文字数
gdk_draw_layout(px1, gc1, 180, 600, mylayout);
pango_layout_set_text(mylayout, “400”, 3);
gdk_draw_layout(px1, gc1, 380, 600, mylayout);

pango_layout_set_font_description(mylayout, pfont_02);
pango_layout_set_text(mylayout, “second”, 6);
gdk_draw_layout(px1, gc1, 200, 670, mylayout);

gdk_draw_pixmap(widget->window, widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
px1, 0, 0, 0, 0, widget->allocation.width, widget->allocation.height); //ピクスマップを貼り付ける
}

cairoを使った描画
void
Repaint1(GtkWidget *widget) //基本描画
{
GdkWindow *drawable = widget->window;
cairo_t *cr;
cr = gdk_cairo_create (drawable);

cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); //白
cairo_rectangle (cr, 0.0, 0.0, widget->allocation.width, widget->allocation.height);
cairo_fill (cr);

cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); //黒
cairo_set_line_width (cr, 0.75);
cairo_move_to (cr, 0.0, 600.0); //始点
cairo_line_to (cr, 1000.0, 600.0); //終点
cairo_stroke (cr);
cairo_move_to (cr, 0.0, 400.0);
cairo_line_to (cr, 1000.0, 400.0);
cairo_stroke (cr);
cairo_move_to (cr, 0.0, 200.0);
cairo_line_to (cr, 1000.0, 200.0);
cairo_stroke (cr);
cairo_move_to (cr, 0.0, 0.0);
cairo_line_to (cr, 0.0, 600.0);
cairo_stroke (cr);
cairo_move_to (cr, 200.0, 0.0);
cairo_line_to (cr, 200.0, 600.0);
cairo_stroke (cr);
cairo_move_to (cr, 400.0, 0.0);
cairo_line_to (cr, 400.0, 600.0);
cairo_stroke (cr);
cairo_move_to (cr, 600.0, 0.0);
cairo_line_to (cr, 600.0, 600.0);
cairo_stroke (cr);
cairo_move_to (cr, 800.0, 0.0);
cairo_line_to (cr, 800.0, 600.0);
cairo_stroke (cr);

cairo_set_source_rgb (cr, 0.0, 0.8, 0.0); //緑
cairo_select_font_face (cr, “Sazanami Mincho”, CAIRO_FONT_SLANT_ITALIC, CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size (cr, 20.0);
cairo_move_to (cr, 180.0, 620.0);
cairo_show_text (cr, "200");
cairo_move_to (cr, 380.0, 620.0);
cairo_show_text (cr, "400");
cairo_move_to (cr, 580.0, 620.0);
cairo_show_text (cr, "600");
cairo_move_to (cr, 780.0, 620.0);
cairo_show_text (cr, "800");

cairo_set_font_size (cr, 14.0);
cairo_move_to (cr, 180.0, 690.0);
cairo_show_text (cr, "second");

cairo_destroy (cr); //開放
}


TOPへ  Cプログラミング目次へ