Fedora8を使ってみる

Fedora8をデスクトップとして使ってみる

18.ドラッグ中についてくる線を描画

2007年03月04日 | gtk2
(グローバル)
unsigned drawing_flag = 0; /* ドラッグ中かどうか 1=ドラッグ中 0=他 */

(button_press の中)
drawing_flag = 1; /* ドラッグ中かどうか */

(button_release の中)
drawing_flag = 0; /* ドラッグ中かどうか */

(expose の中)
//ドラッグ中の線を描画
gdk_draw_line(widget->window,widget->style->fg_gc[widget->state],
startx,starty,
endx, endy);

(motion_notify の中)
//ドラッグ中の座標を取得(exposeで描画)
if(drawing_flag){
cur_x = (gint)event->x;
cur_y = (gint)event->y;
endx = cur_x;
endy = cur_y;
printf("drawing %d %dn",endx,endy);

gtk_widget_queue_draw(widget);
}

gcc main.c -o base `pkg-config --cflags --libs gtk+-2.0`

参考

編集

17.button_release_event

2007年03月03日 | gtk2
(グローバル)
int startx,starty,endx,endy;

static gint button_release_event(GtkWidget* widget, GdkEventButton *event, gpointer *data){
//printf("event type = %dn", event->type);
endx = (gint)event->x;
endy = (gint)event->y;
printf("button_release %d %dn",endx,endy);
}

(mainの中)
gtk_signal_connect(GTK_OBJECT(window), "button_release_event",
GTK_SIGNAL_FUNC(button_release_event), NULL);

gtk_widget_set_events(window,
GDK_EXPOSURE_MASK
| GDK_POINTER_MOTION_MASK
// | GDK_POINTER_MOTION_HINT_MASK
| GDK_BUTTON_MOTION_MASK
| GDK_BUTTON1_MOTION_MASK
| GDK_BUTTON2_MOTION_MASK
| GDK_BUTTON3_MOTION_MASK
| GDK_BUTTON_PRESS_MASK
| GDK_BUTTON_RELEASE_MASK
| GDK_KEY_PRESS_MASK
| GDK_KEY_RELEASE_MASK
| GDK_ENTER_NOTIFY_MASK
| GDK_LEAVE_NOTIFY_MASK
| GDK_FOCUS_CHANGE_MASK
| GDK_STRUCTURE_MASK
| GDK_PROPERTY_CHANGE_MASK
| GDK_VISIBILITY_NOTIFY_MASK
| GDK_PROXIMITY_IN_MASK
| GDK_PROXIMITY_OUT_MASK
| GDK_SUBSTRUCTURE_MASK);

gcc main.c -o base `pkg-config --cflags --libs gtk+-2.0`

参考

編集

15.左上に円を描画

2007年03月03日 | gtk2
(draw_brush の中に追加)
/* 左上に円を描画 */
update_rect.x = 0;
update_rect.y = 0;
update_rect.width = 200;
update_rect.height = 200;

gdk_draw_arc(g_pixmap,
g_gc,
TRUE,
0,0,
200,200,
0,64*360);

gtk_widget_draw (widget, &update_rect); //描画

gcc main.c -o base `pkg-config --cflags --libs gtk+-2.0`

編集

14.GDKのキャンバスについて

2007年03月03日 | gtk2
参考 分かり易い

おそらく、ピクスマップに描画
gdk_draw_arc(g_pixmap, g_pen, 1, 200, 200, 30, 30, 0*64, 360*64);

/*ピクスマップをドローイングエリアにコピー*/
gint expose_event(GtkWidget *widget, GdkEventExpose *event)
{
gdk_draw_pixmap(widget->window,
widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
g_pixmap,
event->area.x, event->area.y,
event->area.x, event->area.y,
event->area.width, event->area.height);
}

編集