図形の描画

gdk_draw_rectangle()
短型の描画を行う
void gdk_draw_rectangle(

GdkDrawable *drawable,
GdkGC *gc,
gboolean filled, //filled=塗りつぶさない TRUE=前景色で塗りつぶす
gint x, //左上のx座標
gint y, //左上のy座標
gint width, //幅
gint height //高さ

描画の基準は、指定した座標を左上とした基準の形で四角を描く
引数 filled をTRUEにすると、枠の中を前景色で塗りつぶす
gdk_draw_arc()
円弧の描画を行う
void gdk_draw_arc(GdkDrawable *drawable,
GdkGC gc,
gboolean filled, //TRUEなら塗りつぶし
gint x, //左上のx座標
gint y, //左上のy座標
gint width, //幅
gint height, //高さ
gint angle1, //円弧の開始角度
gint angle2 //相対的な角度
);
引数x,yは円弧を含む左上の座標を表す
width=幅 height=高さを表す
angle1 円弧の開始角を表す
(3時の方向を0°として、1/64単位で与える)
angle2 angle1からの相対的な角度
filledをTRUEにすると、円弧内を前景色で塗りつぶす
gdk_draw_polygon()
多角形の描画を行う
void gdk_draw_polygon(GdkDrawable *drawable,
GdkGC *gc,
gboolean filled, //TRUEなら前景色で塗りつぶし
GdkPoint *points, //GdkPoint構造体の配列で指定
gint hpoints //ポイント(多角形の頂点の点)の数
);
多角形の頂点を、Gpoint構造体の配列 *pointsで指定する
filledをTRUEにすると、多角型内を前景色で塗りつぶす
★ピックスマップへの描画
GdkPixmapもドローアプルのひとつ
図形などをウィンドウに描画する時にはGdkWindowを使う
GdkPixmapは
ウィンドウにたくさんの図形を描画するときに使う
なぜなら、直接 GdkWindow に 描画すると画面がちらつくから
なので、図形を先に GdkPixmapに描画して、それを GdkWndow に貼り付ける
これで描画のチラつきが回避可能らしい

Gdkの関数

gdk_gc_set_line_attributes()
線の描画をするためにいろいろな属性をセットする
引数は(gc 、線の幅、線のスタイル、線の終端、線の結合部分のスタイル)
g_object_unref()
リファレンスカウンタの値が1つ減る
カウンタが0になるとオブジェクトは開放される

線分の種類

★線分の種類は3つ
GDK_LINE_SOLID
実線
GDK_LINE_ON_OFF_DASH
点線
GDK_LINE_DOUBLE_DASH
前景色と背景色を交互に描画
gdk_gc_set_dashes()
点線の間隔を設定
void gdk_gc_set_dash(
GdkDC *gc,
gint dash_offset,
gint8 dash_list[],
gint n
);
dash_offset
前景色を何ピクセル目から描画するか指定
dash_list[]
点線のパターンを配列で指定

線分の描画

線分を描画する関数は3種類
gdk_draw_line()
指定した2点(x1,y1)(x2,y2)を結んだ線分を描画する
gdk_draw_lines()
GdkPoint構造体の配列で指定した点を
順番に結んだ 複数の線分を描画する
gdk_draw_segment()
GdkSegment構造体の配列で指定した、複数の線分を描画する
★GdkSegments構造体
struct GdkSegment{
gint x1;
gint y1;
gint x2;
gint y2;
}

色の設定

点や線などの色の設定は、GdkColor構造体で行ってGC(グラフィックコンテキスト)に割り当てる
GdkColor構造体は次のように定義されています
struct GdkColor{
guint32 pixel;
guint16 red;
guint16 green;
guint16 blue;
};
gdk_color_alloc()
pixelメンバの値を自動的に設定
gdk_colormap_get_system()
デフォルトのカラーマップを取得
gdk_gc_set_forground()
点や線などを描画する前景色の設定
gdk_gc_set_background()
背景色の設定