#include static GtkWidget *hruler; static GtkWidget *vruler; static int num_paints = 0; static gboolean draw_area_motion_notify_event_cb (GtkWidget *widget, GdkEventMotion *event, gpointer data) { gtk_ruler_set_range (GTK_RULER (hruler), 0, widget->allocation.width, event->x, 1); gtk_ruler_set_range (GTK_RULER (vruler), 0, widget->allocation.height, event->y, 1); num_paints++; return TRUE; } static gboolean timeout_cb (gpointer data) { g_print ("paints: %d\n", num_paints); return TRUE; } int main (int argc, char **argv) { GtkWidget *window; GtkWidget *table; GtkWidget *draw_area; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); table = gtk_table_new (2, 2, FALSE); gtk_container_add (GTK_CONTAINER (window), table); draw_area = gtk_drawing_area_new (); gtk_widget_add_events (draw_area, GDK_POINTER_MOTION_MASK); gtk_table_attach (GTK_TABLE (table), draw_area, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); g_signal_connect (draw_area, "motion-notify-event", G_CALLBACK (draw_area_motion_notify_event_cb), NULL); hruler = gtk_hruler_new (); gtk_table_attach (GTK_TABLE (table), hruler, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); vruler = gtk_vruler_new (); gtk_table_attach (GTK_TABLE (table), vruler, 0, 1, 1, 2, 0, GTK_EXPAND | GTK_FILL, 0, 0); g_timeout_add (1000, timeout_cb, NULL); gtk_widget_show_all (window); gtk_main (); return 0; }