#include <gtk/gtk.h>

int main( int argc, char *argv[] )
{
  GtkWidget *fenetre, *pTable, *aArea, *eReglev, *eRegleh;

  gtk_init (&argc, &argv);
  fenetre = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  g_signal_connect(G_OBJECT(fenetre),"destroy",G_CALLBACK(gtk_main_quit),NULL);

  #define XSIZE  600
  #define YSIZE  400
  #define EVENT_METHOD(i, x) GTK_WIDGET_GET_CLASS(i)->x

  pTable = gtk_table_new (3, 2, FALSE);
  gtk_container_add (GTK_CONTAINER (fenetre), pTable);

  aArea = gtk_drawing_area_new ();
  gtk_widget_set_size_request (GTK_WIDGET (aArea), XSIZE, YSIZE);
  gtk_table_attach (GTK_TABLE (pTable), aArea, 1, 2, 1, 2,
                      GTK_EXPAND|GTK_FILL, GTK_FILL, 0, 0);
  gtk_widget_set_events (aArea, GDK_POINTER_MOTION_MASK |
                                 GDK_POINTER_MOTION_HINT_MASK);

  eReglev = gtk_vruler_new();
  gtk_ruler_set_metric (GTK_RULER (eReglev), GTK_PIXELS);
  gtk_ruler_set_range (GTK_RULER (eReglev), 0, YSIZE, 10, YSIZE );
  g_signal_connect_swapped (G_OBJECT (aArea), "motion_notify_event",
                              G_CALLBACK (EVENT_METHOD (eReglev, motion_notify_event)),
                              G_OBJECT (eReglev));
  gtk_table_attach (GTK_TABLE (pTable), eReglev, 0, 1, 1, 2,
                      GTK_FILL, GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0);

  eRegleh = gtk_hruler_new();
  gtk_ruler_set_metric (GTK_RULER (eRegleh), GTK_PIXELS);
  gtk_ruler_set_range (GTK_RULER (eRegleh), 7, 13, 0, 20);
  g_signal_connect_swapped (G_OBJECT (aArea), "motion_notify_event",
                              G_CALLBACK (EVENT_METHOD (eRegleh, motion_notify_event)),
                              G_OBJECT (eRegleh));
  gtk_table_attach (GTK_TABLE (pTable), eRegleh, 1, 2, 0, 1,
                      GTK_EXPAND|GTK_SHRINK|GTK_FILL, GTK_FILL, 0, 0);

  gtk_widget_show_all(fenetre);
  gtk_main ();
    
  return 0;
}