]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkruler.c
use FALSE for size_only most of the time when calling
[~andy/gtk] / gtk / gtkruler.c
index 986e84a035ccd5009e1406b9e70b64e64c09314e..221b4fffc2509288b6a2a872094c2dcf8c6f80ad 100644 (file)
  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  */
+
+/*
+ * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS
+ * file for a list of people on the GTK+ Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
 #include "gtkruler.h"
 
+enum {
+  ARG_0,
+  ARG_LOWER,
+  ARG_UPPER,
+  ARG_POSITION,
+  ARG_MAX_SIZE
+};
 
 static void gtk_ruler_class_init    (GtkRulerClass  *klass);
 static void gtk_ruler_init          (GtkRuler       *ruler);
@@ -28,7 +43,12 @@ static void gtk_ruler_size_allocate (GtkWidget      *widget,
 static gint gtk_ruler_expose        (GtkWidget      *widget,
                                     GdkEventExpose *event);
 static void gtk_ruler_make_pixmap   (GtkRuler       *ruler);
-
+static void gtk_ruler_set_arg       (GtkObject      *object,
+                                    GtkArg         *arg,
+                                    guint           arg_id);
+static void gtk_ruler_get_arg       (GtkObject      *object,
+                                    GtkArg         *arg,
+                                    guint           arg_id);
 
 static GtkWidgetClass *parent_class;
 
@@ -40,10 +60,10 @@ static const GtkRulerMetric ruler_metrics[] =
 };
 
 
-guint
+GtkType
 gtk_ruler_get_type (void)
 {
-  static guint ruler_type = 0;
+  static GtkType ruler_type = 0;
 
   if (!ruler_type)
     {
@@ -59,7 +79,7 @@ gtk_ruler_get_type (void)
         (GtkClassInitFunc) NULL,
       };
 
-      ruler_type = gtk_type_unique (gtk_widget_get_type (), &ruler_info);
+      ruler_type = gtk_type_unique (GTK_TYPE_WIDGET, &ruler_info);
     }
 
   return ruler_type;
@@ -74,7 +94,10 @@ gtk_ruler_class_init (GtkRulerClass *class)
   object_class = (GtkObjectClass*) class;
   widget_class = (GtkWidgetClass*) class;
 
-  parent_class = gtk_type_class (gtk_widget_get_type ());
+  parent_class = gtk_type_class (GTK_TYPE_WIDGET);
+  
+  object_class->set_arg = gtk_ruler_set_arg;
+  object_class->get_arg = gtk_ruler_get_arg;
 
   widget_class->realize = gtk_ruler_realize;
   widget_class->unrealize = gtk_ruler_unrealize;
@@ -83,6 +106,15 @@ gtk_ruler_class_init (GtkRulerClass *class)
 
   class->draw_ticks = NULL;
   class->draw_pos = NULL;
+
+  gtk_object_add_arg_type ("GtkRuler::lower", GTK_TYPE_FLOAT,
+                          GTK_ARG_READWRITE, ARG_LOWER);
+  gtk_object_add_arg_type ("GtkRuler::upper", GTK_TYPE_FLOAT,
+                          GTK_ARG_READWRITE, ARG_UPPER);
+  gtk_object_add_arg_type ("GtkRuler::position", GTK_TYPE_FLOAT,
+                          GTK_ARG_READWRITE, ARG_POSITION);
+  gtk_object_add_arg_type ("GtkRuler::max_size", GTK_TYPE_FLOAT,
+                          GTK_ARG_READWRITE, ARG_MAX_SIZE);
 }
 
 static void
@@ -101,6 +133,61 @@ gtk_ruler_init (GtkRuler *ruler)
   gtk_ruler_set_metric (ruler, GTK_PIXELS);
 }
 
+static void
+gtk_ruler_set_arg (GtkObject  *object,
+                  GtkArg     *arg,
+                  guint       arg_id)
+{
+  GtkRuler *ruler = GTK_RULER (object);
+
+  switch (arg_id)
+    {
+    case ARG_LOWER:
+      gtk_ruler_set_range (ruler, GTK_VALUE_FLOAT (*arg), ruler->upper,
+                          ruler->position, ruler->max_size);
+      break;
+    case ARG_UPPER:
+      gtk_ruler_set_range (ruler, ruler->lower, GTK_VALUE_FLOAT (*arg),
+                          ruler->position, ruler->max_size);
+      break;
+    case ARG_POSITION:
+      gtk_ruler_set_range (ruler, ruler->lower, ruler->upper,
+                          GTK_VALUE_FLOAT (*arg), ruler->max_size);
+      break;
+    case ARG_MAX_SIZE:
+      gtk_ruler_set_range (ruler, ruler->lower, ruler->upper,
+                          ruler->position,  GTK_VALUE_FLOAT (*arg));
+      break;
+    }
+}
+
+static void
+gtk_ruler_get_arg (GtkObject  *object,
+                  GtkArg     *arg,
+                  guint       arg_id)
+{
+  GtkRuler *ruler = GTK_RULER (object);
+  
+  switch (arg_id)
+    {
+    case ARG_LOWER:
+      GTK_VALUE_FLOAT (*arg) = ruler->lower;
+      break;
+    case ARG_UPPER:
+      GTK_VALUE_FLOAT (*arg) = ruler->upper;
+      break;
+    case ARG_POSITION:
+      GTK_VALUE_FLOAT (*arg) = ruler->position;
+      break;
+    case ARG_MAX_SIZE:
+      GTK_VALUE_FLOAT (*arg) = ruler->max_size;
+      break;
+    default:
+      arg->type = GTK_TYPE_INVALID;
+      break;
+    }
+}
+
 void
 gtk_ruler_set_metric (GtkRuler      *ruler,
                      GtkMetricType  metric)
@@ -108,7 +195,7 @@ gtk_ruler_set_metric (GtkRuler      *ruler,
   g_return_if_fail (ruler != NULL);
   g_return_if_fail (GTK_IS_RULER (ruler));
 
-  ruler->metric = &ruler_metrics[metric];
+  ruler->metric = (GtkRulerMetric *) &ruler_metrics[metric];
 
   if (GTK_WIDGET_DRAWABLE (ruler))
     gtk_widget_queue_draw (GTK_WIDGET (ruler));
@@ -139,8 +226,8 @@ gtk_ruler_draw_ticks (GtkRuler *ruler)
   g_return_if_fail (ruler != NULL);
   g_return_if_fail (GTK_IS_RULER (ruler));
 
-  if (GTK_RULER_CLASS (GTK_OBJECT (ruler)->klass)->draw_ticks)
-    (* GTK_RULER_CLASS (GTK_OBJECT (ruler)->klass)->draw_ticks) (ruler);
+  if (GTK_RULER_GET_CLASS (ruler)->draw_ticks)
+    GTK_RULER_GET_CLASS (ruler)->draw_ticks (ruler);
 }
 
 void
@@ -149,8 +236,8 @@ gtk_ruler_draw_pos (GtkRuler *ruler)
   g_return_if_fail (ruler != NULL);
   g_return_if_fail (GTK_IS_RULER (ruler));
 
-  if (GTK_RULER_CLASS (GTK_OBJECT (ruler)->klass)->draw_pos)
-    (* GTK_RULER_CLASS (GTK_OBJECT (ruler)->klass)->draw_pos) (ruler);
+  if (GTK_RULER_GET_CLASS (ruler)->draw_pos)
+     GTK_RULER_GET_CLASS (ruler)->draw_pos (ruler);
 }
 
 
@@ -249,11 +336,6 @@ gtk_ruler_expose (GtkWidget      *widget,
     {
       ruler = GTK_RULER (widget);
 
-      gtk_paint_box (widget->style, widget->window,
-                    GTK_STATE_NORMAL, GTK_SHADOW_OUT, 
-                    NULL, widget, "ruler",
-                    0, 0, -1, -1);
-      
       gtk_ruler_draw_ticks (ruler);
       
       gdk_draw_pixmap (widget->window,