[戻る] | Crazy Unit |
void gtk_widget_set_events ( GtkWidget *widget,
gint events );
フラグ | シグナル |
---|---|
GDK_EXPOSURE_MASK | expose-event |
GDK_POINTER_MOTION_MASK | motion-notify-event |
GDK_POINTER_MOTION_HINT_MASK | |
GDK_BUTTON_MOTION_MASK | マウスボタン押下中のmotion-notify-event? |
GDK_BUTTON1_MOTION_MASK | |
GDK_BUTTON2_MOTION_MASK | |
GDK_BUTTON3_MOTION_MASK | |
GDK_BUTTON_PRESS_MASK | button-press-event scroll-event |
GDK_BUTTON_RELEASE_MASK | button-release-event |
GDK_KEY_PRESS_MASK | key-press-event |
GDK_KEY_RELEASE_MASK | key-release-event |
GDK_ENTER_NOTIFY_MASK | enter-notify-event |
GDK_LEAVE_NOTIFY_MASK | leave-notify-event |
GDK_FOCUS_CHANGE_MASK | focus-in-event focus-out-event |
GDK_STRUCTURE_MASK | destroy-event configure-event map-event unmap-event window-state-event |
GDK_PROPERTY_CHANGE_MASK | property-notify-event |
GDK_VISIVILITY_NOTIFY_MASK | visibility-notify-event |
GDK_PROXIMITY_IN_MASK | proximity-in-event |
GDK_PROXIMITY_OUT_MASK | proximity-out-event |
GDK_SUBSTUCTURE_MASK | |
GDK_SCROLL_MASK | |
GDK_ALL_EVENTS_MASK | 全イベント |
void gtk_widget_add_events ( GtkWidget *widget,
gint events );
GTK_WIDGET_SET_FLAGS(widget, GTK_CAN_FOCUS);
とすればOKです。can-focusプロパティをTRUEにしても良いみたいですがわざわざそんな事をする必要もないでしょう。GdkGC* gdk_gc_new ( GdkDrawable *drawable );
GdkGC *gc = gdk_gc_new(widget->widnow);
ウィジェットの中にはGtkLabelのように親ウィジェットに直接描画して自身ではウィンドウを持たないものもあります。
そういったウィジェットのグラフィックコンテキストは取得できません。GdkColormap* gdk_colormap_get_system ( void );
gboolean gdk_colormap_alloc_color ( GdkColormap *colormap,
GdkColor *color,
gboolean writeable,
gboolean best_match );
void gdk_gc_set_foreground ( GdkGC *gc,
const GdkColor *color );
typedef struct {
guint32 pixel;
guint16 red;
guint16 green;
guint16 blue;
} GdkColor;
そして、gdk_gc_set_foreground()でcolor->pixelを描画色として設定しています。void gdk_gc_set_line_attributes ( GdkGC *gc,
gint line_width,
GdkLineStyle line_style,
GdkCapStyle cap_style,
GdkJoinStyle join_style );
typedef enum {
GDK_LINE_SOLID, 実線
GDK_LINE_ON_OFF_DASH, 点線
GDK_LINE_DOUBLE_DASH 描画色と背景色を交互に繰り返す点線
} GdkLineStyle;
typedef enum {
GDK_CAP_NOT_LAST, 線の長さが0でなければGDK_CAP_BUTTと同じ。長さが0のときは最後の点を描画しない。
GDK_CAP_BUTT, 線の終端を直線的に描画する。線の太さ×長さの長方形になる。
GDK_CAP_ROUND, 線の終端を丸く描画する。丸い部分が終端の座標からはみ出す。
GDK_CAP_PROJECTING 線の終端を直線的に描画する。太さの半分だけ終端の座標からはみ出す。
} GdkCapStyle;
typedef enum {
GDK_JOIN_MITER, 線の曲がり角が尖った形になる。
GDK_JOIN_ROUND, 線の曲がり角が丸く描画される。
GDK_JOIN_BEVEL 線の曲がり角が面取りされ平に削られたように描画される。
} GdkJoinStyle;
サンプルではGDK_LINE_SOLID、GDK_CAP_BUTT、GDK_JOIN_MITERを使用しています。gboolean expose_event ( GtkWidget *widget,
GdkEventExpose *event,
gpointer user_data );