「GNOMEフレームワーク」の版間の差分

削除された内容 追加された内容
編集の要約なし
cairo について
745 行
最近のGTKでは、図形描画ライブラリにcairoというフリーの画像描画ライブラリを採用している。特に追加インストールすることなく、cairoの図形描画命令が使用できる。
cairo自体は、GTKとは別のアプリなので、詳細はcairoの入門書を参照のこと。
 
 
コード例を示すと下記のようになります。
 
;コード例 (CentOS7 で確認)
<syntaxhighlight lang="c">
#include <gtk/gtk.h>
//#include <gdk/gdk.h>
 
GtkWidget *uindou;
 
static gboolean kansuu(GtkWidget *uijet1, cairo_t *handoru, gpointer abcde)
{
//ハンドルの作成
handoru = gdk_cairo_create(gtk_widget_get_window(uijet1));
 
//線の性質の定義
cairo_set_line_width (handoru, 10); // 線の太さ
cairo_set_source_rgb (handoru, 1.0 , 0.0 , 0.0); // 線の色
cairo_move_to (handoru, 00, 50); // 線の起点
cairo_line_to (handoru, 300, 300); // 線の終点
 
// 実際に線を引く命令
cairo_stroke (handoru);
 
//長方形の描画
{
//長方形(x,y,width,height)の大きさを指定
cairo_rectangle(handoru, 50.0, 20.0, 30.0, 90.0);
//線の色の指定(Red,Green,Blue)
cairo_set_source_rgb(handoru, 0.0, 0.0, 1.0);
//実際に長方形を塗りつぶす命令
cairo_fill(handoru);
}
 
cairo_destroy(handoru);
return FALSE;
}
 
int main(int argc, char **argv)
{
gtk_init(&argc, &argv);
 
uindou = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(uindou), "テスト");
gtk_widget_set_size_request(uindou, 420,200);
 
//ウインドウに図形を描けるように設定
gtk_widget_set_app_paintable(uindou, TRUE);
 
 
//ウインドウが表示されたときにkansuu()を呼び出す
g_signal_connect(G_OBJECT(uindou), "draw", G_CALLBACK(kansuu), NULL);
 
gtk_widget_show_all(uindou);
gtk_main();
 
return 0;
}
</syntaxhighlight>
 
 
GTK3 では、まず main 関数側で、図形の描画をできるように設定を宣言する必要があります。
 
 
なお、ネットに転がってるコード例をみると、cairo の呼び出し方では、一般に任意の自作の関数(上記のコード例では kansuu)を介して cairo を呼び出します。
 
 
cairo による図形描画プログラムを作成するとき、windows APIプログラミングでいうところのハンドルのような物を宣言する必要があります。
 
上記コードでは
handoru = gdk_cairo_create(gtk_widget_get_window(uijet1));
で、ハンドル作成しています。
 
このハンドル宣言で、作業に必要なメモリの確保を行っているものと考えられます。
 
この画像描画の説明でいう「ハンドル」とは、たとえるなら絵を書くときのキャンバスのようなものです。
 
線を引いたりなど図形を描画するときは、初心者には わずらわしいですが、どのハンドル(キャンバス)に図形を描画するのかを、各命令で宣言する必要があります。
 
 
GTKでは図形の性質の定義と、実際に図形の描画を実行する命令とは、異なる命令になります。(Winodws APIと同様。)
 
cairo_stroke の命令で、実際に線分の描画を実行します。
 
 
そして、使用し終わったら、destroy でハンドルを破棄するのが一般的です。(メモリの圧迫を防ぐため。)(Winodws APIでも同様に、使い終わったハンドルは破棄を宣言する。)
 
 
;この章を書くに当たり参考にした文献:
:[http://uchigo.main.jp/gtk3/chap08/chap08.html 素人の独学GTK+3.0 8章:タイムカウントとGDK3] 2019年9月28日に閲覧
 
{{NDC|007.64|GNOMEふれむわく}}