]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkruler.c
Without setting "detail-width-chars" and "detail-height-rows"
[~andy/gtk] / gtk / gtkruler.c
index 2bf9be46a8429f752f939f8bc2d3c764dd1b55cd..d308ea3e1ba034f67bf4c3cd4ae37fe0969794d4 100644 (file)
  * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
  */
 
+#include <config.h>
 #include "gtkruler.h"
+#include "gtkprivate.h"
 #include "gtkintl.h"
+#include "gtkalias.h"
 
 enum {
   PROP_0,
   PROP_LOWER,
   PROP_UPPER,
   PROP_POSITION,
-  PROP_MAX_SIZE
+  PROP_MAX_SIZE,
+  PROP_METRIC
 };
 
-static void gtk_ruler_class_init    (GtkRulerClass  *klass);
-static void gtk_ruler_init          (GtkRuler       *ruler);
 static void gtk_ruler_realize       (GtkWidget      *widget);
 static void gtk_ruler_unrealize     (GtkWidget      *widget);
 static void gtk_ruler_size_allocate (GtkWidget      *widget,
@@ -53,42 +55,14 @@ static void gtk_ruler_get_property  (GObject        *object,
                                     GValue         *value,
                                     GParamSpec     *pspec);
 
-static GtkWidgetClass *parent_class;
-
 static const GtkRulerMetric ruler_metrics[] =
 {
-  {"Pixels", "Pi", 1.0, { 1, 2, 5, 10, 25, 50, 100, 250, 500, 1000 }, { 1, 5, 10, 50, 100 }},
-  {"Inches", "In", 72.0, { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 }, { 1, 2, 4, 8, 16 }},
-  {"Centimeters", "Cn", 28.35, { 1, 2, 5, 10, 25, 50, 100, 250, 500, 1000 }, { 1, 5, 10, 50, 100 }},
+  { "Pixel", "Pi", 1.0, { 1, 2, 5, 10, 25, 50, 100, 250, 500, 1000 }, { 1, 5, 10, 50, 100 }},
+  { "Inches", "In", 72.0, { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 }, { 1, 2, 4, 8, 16 }},
+  { "Centimeters", "Cn", 28.35, { 1, 2, 5, 10, 25, 50, 100, 250, 500, 1000 }, { 1, 5, 10, 50, 100 }},
 };
 
-
-GType
-gtk_ruler_get_type (void)
-{
-  static GType ruler_type = 0;
-
-  if (!ruler_type)
-    {
-      static const GTypeInfo ruler_info =
-      {
-       sizeof (GtkRulerClass),
-       NULL,           /* base_init */
-       NULL,           /* base_finalize */
-       (GClassInitFunc) gtk_ruler_class_init,
-       NULL,           /* class_finalize */
-       NULL,           /* class_data */
-       sizeof (GtkRuler),
-       0,              /* n_preallocs */
-       (GInstanceInitFunc) gtk_ruler_init,
-      };
-
-      ruler_type = g_type_register_static (GTK_TYPE_WIDGET, "GtkRuler",
-                                          &ruler_info, 0);
-    }
-
-  return ruler_type;
-}
+G_DEFINE_TYPE (GtkRuler, gtk_ruler, GTK_TYPE_WIDGET)
 
 static void
 gtk_ruler_class_init (GtkRulerClass *class)
@@ -99,8 +73,6 @@ gtk_ruler_class_init (GtkRulerClass *class)
   gobject_class = G_OBJECT_CLASS (class);
   widget_class = (GtkWidgetClass*) class;
 
-  parent_class = g_type_class_peek_parent (class);
-  
   gobject_class->set_property = gtk_ruler_set_property;
   gobject_class->get_property = gtk_ruler_get_property;
 
@@ -120,7 +92,7 @@ gtk_ruler_class_init (GtkRulerClass *class)
                                                        -G_MAXDOUBLE,
                                                        G_MAXDOUBLE,
                                                        0.0,
-                                                       G_PARAM_READWRITE));  
+                                                       GTK_PARAM_READWRITE));  
 
   g_object_class_install_property (gobject_class,
                                    PROP_UPPER,
@@ -130,7 +102,7 @@ gtk_ruler_class_init (GtkRulerClass *class)
                                                        -G_MAXDOUBLE,
                                                        G_MAXDOUBLE,
                                                        0.0,
-                                                       G_PARAM_READWRITE));  
+                                                       GTK_PARAM_READWRITE));  
 
   g_object_class_install_property (gobject_class,
                                    PROP_POSITION,
@@ -140,24 +112,38 @@ gtk_ruler_class_init (GtkRulerClass *class)
                                                        -G_MAXDOUBLE,
                                                        G_MAXDOUBLE,
                                                        0.0,
-                                                       G_PARAM_READWRITE));  
+                                                       GTK_PARAM_READWRITE));  
 
   g_object_class_install_property (gobject_class,
                                    PROP_MAX_SIZE,
-                                   g_param_spec_double ("max_size",
+                                   g_param_spec_double ("max-size",
                                                        P_("Max Size"),
                                                        P_("Maximum size of the ruler"),
                                                        -G_MAXDOUBLE,
                                                        G_MAXDOUBLE,
                                                        0.0,
-                                                       G_PARAM_READWRITE));  
+                                                       GTK_PARAM_READWRITE));  
+  /**
+   * GtkRuler:metric:
+   *
+   * The metric used for the ruler.
+   *
+   * Since: 2.8
+   */
+  g_object_class_install_property (gobject_class,
+                                   PROP_METRIC,
+                                   g_param_spec_enum ("metric",
+                                                     P_("Metric"),
+                                                     P_("The metric used for the ruler"),
+                                                     GTK_TYPE_METRIC_TYPE, 
+                                                     GTK_PIXELS,
+                                                     GTK_PARAM_READWRITE));  
 }
 
 static void
 gtk_ruler_init (GtkRuler *ruler)
 {
   ruler->backing_store = NULL;
-  ruler->non_gr_exp_gc = NULL;
   ruler->xsrc = 0;
   ruler->ysrc = 0;
   ruler->slider_size = 0;
@@ -195,6 +181,12 @@ gtk_ruler_set_property (GObject      *object,
       gtk_ruler_set_range (ruler, ruler->lower, ruler->upper,
                           ruler->position,  g_value_get_double (value));
       break;
+    case PROP_METRIC:
+      gtk_ruler_set_metric (ruler, g_value_get_enum (value));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
     }
 }
 
@@ -220,6 +212,9 @@ gtk_ruler_get_property (GObject      *object,
     case PROP_MAX_SIZE:
       g_value_set_double (value, ruler->max_size);
       break;
+    case PROP_METRIC:
+      g_value_set_enum (value, gtk_ruler_get_metric (ruler));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -236,6 +231,8 @@ gtk_ruler_set_metric (GtkRuler      *ruler,
 
   if (GTK_WIDGET_DRAWABLE (ruler))
     gtk_widget_queue_draw (GTK_WIDGET (ruler));
+
+  g_object_notify (G_OBJECT (ruler), "metric");
 }
 
 /**
@@ -262,6 +259,17 @@ gtk_ruler_get_metric (GtkRuler *ruler)
   return 0;
 }
 
+/**
+ * gtk_ruler_set_range:
+ * @ruler: the gtkruler
+ * @lower: the lower limit of the ruler
+ * @upper: the upper limit of the ruler
+ * @position: the mark on the ruler
+ * @max_size: the maximum size of the ruler used when calculating the space to
+ * leave for the text
+ *
+ * This sets the range of the ruler. 
+ */
 void
 gtk_ruler_set_range (GtkRuler *ruler,
                     gdouble   lower,
@@ -290,7 +298,7 @@ gtk_ruler_set_range (GtkRuler *ruler,
   if (ruler->max_size != max_size)
     {
       ruler->max_size = max_size;
-      g_object_notify (G_OBJECT (ruler), "max_size");
+      g_object_notify (G_OBJECT (ruler), "max-size");
     }
   g_object_thaw_notify (G_OBJECT (ruler));
 
@@ -388,15 +396,19 @@ gtk_ruler_unrealize (GtkWidget *widget)
   GtkRuler *ruler = GTK_RULER (widget);
 
   if (ruler->backing_store)
-    g_object_unref (ruler->backing_store);
-  if (ruler->non_gr_exp_gc)
-    g_object_unref (ruler->non_gr_exp_gc);
+    {
+      g_object_unref (ruler->backing_store);
+      ruler->backing_store = NULL;
+    }
 
-  ruler->backing_store = NULL;
-  ruler->non_gr_exp_gc = NULL;
+  if (ruler->non_gr_exp_gc)
+    {
+      g_object_unref (ruler->non_gr_exp_gc);
+      ruler->non_gr_exp_gc = NULL;
+    }
 
-  if (GTK_WIDGET_CLASS (parent_class)->unrealize)
-    (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
+  if (GTK_WIDGET_CLASS (gtk_ruler_parent_class)->unrealize)
+    (* GTK_WIDGET_CLASS (gtk_ruler_parent_class)->unrealize) (widget);
 }
 
 static void
@@ -475,3 +487,6 @@ gtk_ruler_make_pixmap (GtkRuler *ruler)
       gdk_gc_set_exposures (ruler->non_gr_exp_gc, FALSE);
     }
 }
+
+#define __GTK_RULER_C__
+#include "gtkaliasdef.c"