]> Pileus Git - ~andy/gtk/blobdiff - examples/gtkdial/gtkdial.c
Replace a lot of idle and timeout calls by the new gdk_threads api.
[~andy/gtk] / examples / gtkdial / gtkdial.c
index 0c0fc8bad90335a5bb2587a6e5073549a97d9239..5749e92ad85439e4b3d3fd01bb192abbca556f54 100644 (file)
@@ -1,3 +1,4 @@
+
 /* GTK - The GIMP Toolkit
  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
  *
 
 /* Forward declarations */
 
-static void gtk_dial_class_init               (GtkDialClass   *klass);
-static void gtk_dial_init                     (GtkDial        *dial);
-static void gtk_dial_destroy                  (GtkObject      *object);
-static void gtk_dial_realize                  (GtkWidget      *widget);
-static void gtk_dial_size_request             (GtkWidget      *widget,
-                                              GtkRequisition *requisition);
-static void gtk_dial_size_allocate            (GtkWidget      *widget,
-                                              GtkAllocation  *allocation);
-static gint gtk_dial_expose                   (GtkWidget      *widget,
-                                               GdkEventExpose *event);
-static gint gtk_dial_button_press             (GtkWidget      *widget,
-                                               GdkEventButton *event);
-static gint gtk_dial_button_release           (GtkWidget      *widget,
-                                               GdkEventButton *event);
-static gint gtk_dial_motion_notify            (GtkWidget      *widget,
-                                               GdkEventMotion *event);
-static gint gtk_dial_timer                    (GtkDial        *dial);
+static void gtk_dial_class_init               (GtkDialClass     *klass);
+static void gtk_dial_init                     (GtkDial          *dial);
+static void gtk_dial_destroy                  (GtkObject        *object);
+static void gtk_dial_realize                  (GtkWidget        *widget);
+static void gtk_dial_size_request             (GtkWidget        *widget,
+                                               GtkRequisition   *requisition);
+static void gtk_dial_size_allocate            (GtkWidget        *widget,
+                                               GtkAllocation    *allocation);
+static gboolean gtk_dial_expose               (GtkWidget        *widget,
+                                               GdkEventExpose   *event);
+static gboolean gtk_dial_button_press         (GtkWidget        *widget,
+                                               GdkEventButton   *event);
+static gboolean gtk_dial_button_release       (GtkWidget        *widget,
+                                               GdkEventButton   *event);
+static gboolean gtk_dial_motion_notify        (GtkWidget        *widget,
+                                               GdkEventMotion   *event);
+static gboolean gtk_dial_timer                (GtkDial          *dial);
 
 static void gtk_dial_update_mouse             (GtkDial *dial, gint x, gint y);
 static void gtk_dial_update                   (GtkDial *dial);
-static void gtk_dial_adjustment_changed       (GtkAdjustment  *adjustment,
-                                               gpointer        data);
-static void gtk_dial_adjustment_value_changed (GtkAdjustment  *adjustment,
-                                               gpointer        data);
+static void gtk_dial_adjustment_changed       (GtkAdjustment    *adjustment,
+                                               gpointer          data);
+static void gtk_dial_adjustment_value_changed (GtkAdjustment    *adjustment,
+                                               gpointer          data);
 
 /* Local data */
 
@@ -140,12 +141,16 @@ gtk_dial_destroy (GtkObject *object)
 {
   GtkDial *dial;
 
+  g_return_if_fail (object != NULL);
   g_return_if_fail (GTK_IS_DIAL (object));
 
   dial = GTK_DIAL (object);
 
   if (dial->adjustment)
-    g_object_unref (G_OBJECT (dial->adjustment));
+    {
+      g_object_unref (GTK_OBJECT (dial->adjustment));
+      dial->adjustment = NULL;
+    }
 
   if (GTK_OBJECT_CLASS (parent_class)->destroy)
     (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
@@ -154,6 +159,7 @@ gtk_dial_destroy (GtkObject *object)
 GtkAdjustment*
 gtk_dial_get_adjustment (GtkDial *dial)
 {
+  g_return_val_if_fail (dial != NULL, NULL);
   g_return_val_if_fail (GTK_IS_DIAL (dial), NULL);
 
   return dial->adjustment;
@@ -163,6 +169,7 @@ void
 gtk_dial_set_update_policy (GtkDial      *dial,
                             GtkUpdateType  policy)
 {
+  g_return_if_fail (dial != NULL);
   g_return_if_fail (GTK_IS_DIAL (dial));
 
   dial->policy = policy;
@@ -172,23 +179,24 @@ void
 gtk_dial_set_adjustment (GtkDial      *dial,
                          GtkAdjustment *adjustment)
 {
+  g_return_if_fail (dial != NULL);
   g_return_if_fail (GTK_IS_DIAL (dial));
 
   if (dial->adjustment)
     {
-      g_signal_handlers_disconnect_by_func (G_OBJECT (dial->adjustment), NULL, (gpointer) dial);
-      g_object_unref (G_OBJECT (dial->adjustment));
+      g_signal_handlers_disconnect_by_func (GTK_OBJECT (dial->adjustment), NULL, (gpointer) dial);
+      g_object_unref (GTK_OBJECT (dial->adjustment));
     }
 
   dial->adjustment = adjustment;
-  g_object_ref (G_OBJECT (dial->adjustment));
+  g_object_ref (GTK_OBJECT (dial->adjustment));
 
-  g_signal_connect (G_OBJECT (adjustment), "changed",
-                   G_CALLBACK (gtk_dial_adjustment_changed),
-                   dial);
-  g_signal_connect (G_OBJECT (adjustment), "value_changed",
-                   G_CALLBACK (gtk_dial_adjustment_value_changed),
-                   dial);
+  g_signal_connect (GTK_OBJECT (adjustment), "changed",
+                   GTK_SIGNAL_FUNC (gtk_dial_adjustment_changed),
+                   (gpointer) dial);
+  g_signal_connect (GTK_OBJECT (adjustment), "value_changed",
+                   GTK_SIGNAL_FUNC (gtk_dial_adjustment_value_changed),
+                   (gpointer) dial);
 
   dial->old_value = adjustment->value;
   dial->old_lower = adjustment->lower;
@@ -204,6 +212,7 @@ gtk_dial_realize (GtkWidget *widget)
   GdkWindowAttr attributes;
   gint attributes_mask;
 
+  g_return_if_fail (widget != NULL);
   g_return_if_fail (GTK_IS_DIAL (widget));
 
   GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
@@ -246,6 +255,7 @@ gtk_dial_size_allocate (GtkWidget     *widget,
 {
   GtkDial *dial;
 
+  g_return_if_fail (widget != NULL);
   g_return_if_fail (GTK_IS_DIAL (widget));
   g_return_if_fail (allocation != NULL);
 
@@ -264,9 +274,9 @@ gtk_dial_size_allocate (GtkWidget     *widget,
   dial->pointer_width = dial->radius / 5;
 }
 
-static gint
-gtk_dial_expose (GtkWidget      *widget,
-                GdkEventExpose *event)
+static gboolean
+gtk_dial_exposeGtkWidget      *widget,
+                GdkEventExpose *event )
 {
   GtkDial *dial;
   GdkPoint points[6];
@@ -278,6 +288,7 @@ gtk_dial_expose (GtkWidget      *widget,
   gint tick_length;
   gint i, inc;
 
+  g_return_val_if_fail (widget != NULL, FALSE);
   g_return_val_if_fail (GTK_IS_DIAL (widget), FALSE);
   g_return_val_if_fail (event != NULL, FALSE);
 
@@ -352,7 +363,7 @@ gtk_dial_expose (GtkWidget      *widget,
 
   for (i = 0; i <= inc; i++)
     {
-      theta = ((gdouble)i*M_PI / (18*inc/24.) - M_PI/6.);
+      theta = ((gfloat)i*M_PI / (18*inc/24.) - M_PI/6.);
 
       if ((theta - last) < (increment))
        continue;     
@@ -402,9 +413,9 @@ gtk_dial_expose (GtkWidget      *widget,
   return FALSE;
 }
 
-static gint
-gtk_dial_button_press (GtkWidget      *widget,
-                      GdkEventButton *event)
+static gboolean
+gtk_dial_button_pressGtkWidget      *widget,
+                      GdkEventButton *event )
 {
   GtkDial *dial;
   gint dx, dy;
@@ -412,6 +423,7 @@ gtk_dial_button_press (GtkWidget      *widget,
   double d_parallel;
   double d_perpendicular;
 
+  g_return_val_if_fail (widget != NULL, FALSE);
   g_return_val_if_fail (GTK_IS_DIAL (widget), FALSE);
   g_return_val_if_fail (event != NULL, FALSE);
 
@@ -445,12 +457,13 @@ gtk_dial_button_press (GtkWidget      *widget,
   return FALSE;
 }
 
-static gint
-gtk_dial_button_release (GtkWidget      *widget,
-                         GdkEventButton *event)
+static gboolean
+gtk_dial_button_releaseGtkWidget      *widget,
+                         GdkEventButton *event )
 {
   GtkDial *dial;
 
+  g_return_val_if_fail (widget != NULL, FALSE);
   g_return_val_if_fail (GTK_IS_DIAL (widget), FALSE);
   g_return_val_if_fail (event != NULL, FALSE);
 
@@ -463,24 +476,25 @@ gtk_dial_button_release (GtkWidget      *widget,
       dial->button = 0;
 
       if (dial->policy == GTK_UPDATE_DELAYED)
-       gtk_timeout_remove (dial->timer);
+       g_source_remove (dial->timer);
       
       if ((dial->policy != GTK_UPDATE_CONTINUOUS) &&
          (dial->old_value != dial->adjustment->value))
-        gtk_adjustment_value_changed (dial->adjustment);
+       g_signal_emit_by_name (GTK_OBJECT (dial->adjustment), "value_changed");
     }
 
   return FALSE;
 }
 
-static gint
-gtk_dial_motion_notify (GtkWidget      *widget,
-                        GdkEventMotion *event)
+static gboolean
+gtk_dial_motion_notifyGtkWidget      *widget,
+                        GdkEventMotion *event )
 {
   GtkDial *dial;
   GdkModifierType mods;
   gint x, y, mask;
 
+  g_return_val_if_fail (widget != NULL, FALSE);
   g_return_val_if_fail (GTK_IS_DIAL (widget), FALSE);
   g_return_val_if_fail (event != NULL, FALSE);
 
@@ -517,23 +531,25 @@ gtk_dial_motion_notify (GtkWidget      *widget,
   return FALSE;
 }
 
-static gint
-gtk_dial_timer (GtkDial *dial)
+static gboolean
+gtk_dial_timer( GtkDial *dial )
 {
+  g_return_val_if_fail (dial != NULL, FALSE);
   g_return_val_if_fail (GTK_IS_DIAL (dial), FALSE);
 
   if (dial->policy == GTK_UPDATE_DELAYED)
-    gtk_adjustment_value_changed (dial->adjustment);
+    g_signal_emit_by_name (GTK_OBJECT (dial->adjustment), "value_changed");
 
   return FALSE;
 }
 
 static void
-gtk_dial_update_mouse (GtkDial *dial, gint x, gint y)
+gtk_dial_update_mouse( GtkDial *dial, gint x, gint y )
 {
   gint xc, yc;
-  gdouble old_value;
+  gfloat old_value;
 
+  g_return_if_fail (dial != NULL);
   g_return_if_fail (GTK_IS_DIAL (dial));
 
   xc = GTK_WIDGET(dial)->allocation.width / 2;
@@ -558,7 +574,7 @@ gtk_dial_update_mouse (GtkDial *dial, gint x, gint y)
     {
       if (dial->policy == GTK_UPDATE_CONTINUOUS)
        {
-          gtk_adjustment_value_changed (dial->adjustment);    
+         g_signal_emit_by_name (GTK_OBJECT (dial->adjustment), "value_changed");
        }
       else
        {
@@ -567,11 +583,11 @@ gtk_dial_update_mouse (GtkDial *dial, gint x, gint y)
          if (dial->policy == GTK_UPDATE_DELAYED)
            {
              if (dial->timer)
-               gtk_timeout_remove (dial->timer);
+               g_source_remove (dial->timer);
 
-             dial->timer = gtk_timeout_add (SCROLL_DELAY_LENGTH,
-                                            (GtkFunction) gtk_dial_timer,
-                                            (gpointer) dial);
+             dial->timer = gdk_threads_add_timeout (SCROLL_DELAY_LENGTH,
+                                          (GSourceFunc) gtk_dial_timer,
+                                          (gpointer) dial);
            }
        }
     }
@@ -580,8 +596,9 @@ gtk_dial_update_mouse (GtkDial *dial, gint x, gint y)
 static void
 gtk_dial_update (GtkDial *dial)
 {
-  gdouble new_value;
+  gfloat new_value;
   
+  g_return_if_fail (dial != NULL);
   g_return_if_fail (GTK_IS_DIAL (dial));
 
   new_value = dial->adjustment->value;
@@ -594,7 +611,8 @@ gtk_dial_update (GtkDial *dial)
 
   if (new_value != dial->adjustment->value)
     {
-      gtk_adjustment_set_value (dial->adjustment, new_value);
+      dial->adjustment->value = new_value;
+      g_signal_emit_by_name (GTK_OBJECT (dial->adjustment), "value_changed");
     }
 
   dial->angle = 7.*M_PI/6. - (new_value - dial->adjustment->lower) * 4.*M_PI/3. /
@@ -605,12 +623,12 @@ gtk_dial_update (GtkDial *dial)
 
 static void
 gtk_dial_adjustment_changed (GtkAdjustment *adjustment,
-                             gpointer       data)
+                             gpointer       data)
 {
   GtkDial *dial;
 
   g_return_if_fail (adjustment != NULL);
-  g_return_if_fail (GTK_IS_DIAL (data));
+  g_return_if_fail (data != NULL);
 
   dial = GTK_DIAL (data);
 
@@ -633,7 +651,7 @@ gtk_dial_adjustment_value_changed (GtkAdjustment *adjustment,
   GtkDial *dial;
 
   g_return_if_fail (adjustment != NULL);
-  g_return_if_fail (GTK_IS_DIAL (data));
+  g_return_if_fail (data != NULL);
 
   dial = GTK_DIAL (data);