読者です 読者をやめる 読者になる 読者になる

[GTK+] 線を描画する

とりあえずウィンドウ内に線を引いてみた。
時間がないので説明は明日以降で(ぉぃ

  1 #include <gtk/gtk.h>
  2 
  3 static void destroy(GtkWidget *window, gpointer data)
  4 {
  5     gtk_main_quit();
  6 }
  7 
  8 void draw_point(GtkWidget *area, gint x, gint y)
  9 {
 10     gdk_draw_point(area->window,
 11                    area->style->fg_gc[ GTK_WIDGET_STATE(area) ],
 12                    x, y);
 13 }
 14 
 15 static gboolean
 16 expose_event(GtkWidget *area, GdkEventExpose *event, gpointer data)
 17 {
 18     gint x;
 19 
 20     for (x = 0; x < 200; x++)
 21         draw_point(area, x, x);
 22 
 23     return TRUE;
 24 }
 25 
 26 int main(int argc, char *argv[])
 27 {
 28     GtkWidget *window, *area;
 29 
 30     gtk_init(&argc, &argv);
 31 
 32     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 33     gtk_window_set_title(GTK_WINDOW(window), "Drawing Line");
 34     gtk_widget_set_size_request(window, 200, 200);
 35     g_signal_connect(G_OBJECT(window), "destroy",
 36                      G_CALLBACK(destroy), NULL);
 37 
 38     area = gtk_drawing_area_new();
 39     g_signal_connect(G_OBJECT(area), "expose_event",
 40                      G_CALLBACK(expose_event), NULL);
 41 
 42     gtk_container_add(GTK_CONTAINER(window), area);
 43     gtk_widget_show_all(window);
 44     gtk_main();
 45 
 46     return 0;
 47 }

描画するときのキモは expose_event を g_signal_connect するところかなぁ。


あ、あと、線を引く関数はちゃんとあるよ、というツッコミはなしの方向でww