]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkcellrenderer.c
marshaller fixes.
[~andy/gtk] / gtk / gtkcellrenderer.c
index 75d34ee044281bbc4b597c91454fcaded91cfb13..3bf18932487e6e2dc1622eab28355c382b7ed63f 100644 (file)
  */
 
 #include "gtkcellrenderer.h"
-
-#ifndef _
-#define _(x) x
-#endif
+#include "gtkintl.h"
 
 static void gtk_cell_renderer_init       (GtkCellRenderer      *cell);
 static void gtk_cell_renderer_class_init (GtkCellRendererClass *class);
-static void gtk_cell_renderer_get_param  (GObject              *object,
-                                         guint                 param_id,
-                                         GValue               *value,
-                                         GParamSpec           *pspec,
-                                         const gchar          *trailer);
-static void gtk_cell_renderer_set_param  (GObject              *object,
-                                         guint                 param_id,
-                                         GValue               *value,
-                                         GParamSpec           *pspec,
-                                         const gchar          *trailer);
+static void gtk_cell_renderer_get_property  (GObject              *object,
+                                            guint                 param_id,
+                                            GValue               *value,
+                                            GParamSpec           *pspec);
+static void gtk_cell_renderer_set_property  (GObject              *object,
+                                            guint                 param_id,
+                                            const GValue         *value,
+                                            GParamSpec           *pspec);
 
 
 enum {
   PROP_ZERO,
+  PROP_VISIBLE,
   PROP_XALIGN,
   PROP_YALIGN,
   PROP_XPAD,
-  PROP_YPAD
+  PROP_YPAD,
 };
 
 
@@ -75,10 +71,15 @@ gtk_cell_renderer_get_type (void)
 static void
 gtk_cell_renderer_init (GtkCellRenderer *cell)
 {
-  cell->xpad = 0;
-  cell->ypad = 0;
+  /* FIXME remove on port to GtkObject */
+  gtk_object_ref (GTK_OBJECT (cell));
+  gtk_object_sink (GTK_OBJECT (cell));
+
+  cell->visible = TRUE;
   cell->xalign = 0.5;
   cell->yalign = 0.5;
+  cell->xpad = 0;
+  cell->ypad = 0;
 }
 
 static void
@@ -86,146 +87,190 @@ gtk_cell_renderer_class_init (GtkCellRendererClass *class)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (class);
 
-  object_class->get_param = gtk_cell_renderer_get_param;
-  object_class->set_param = gtk_cell_renderer_set_param;
+  object_class->get_property = gtk_cell_renderer_get_property;
+  object_class->set_property = gtk_cell_renderer_set_property;
 
   class->render = NULL;
   class->get_size = NULL;
 
-
-  g_object_class_install_param (object_class,
-                               PROP_XALIGN,
-                               g_param_spec_float ("xalign",
-                                                   _("xalign"),
-                                                   _("The x-align."),
-                                                   0.0,
-                                                   1.0,
-                                                   0.0,
-                                                   G_PARAM_READABLE |
-                                                   G_PARAM_WRITABLE));
-
-  g_object_class_install_param (object_class,
-                               PROP_YALIGN,
-                               g_param_spec_float ("yalign",
-                                                   _("yalign"),
-                                                   _("The y-align."),
-                                                   0.0,
-                                                   1.0,
-                                                   0.5,
-                                                   G_PARAM_READABLE |
-                                                   G_PARAM_WRITABLE));
-
-  g_object_class_install_param (object_class,
-                               PROP_XPAD,
-                               g_param_spec_uint ("xpad",
-                                                  _("xpad"),
-                                                  _("The xpad."),
-                                                  0,
-                                                  100,
-                                                  2,
-                                                  G_PARAM_READABLE |
-                                                  G_PARAM_WRITABLE));
-
-  g_object_class_install_param (object_class,
-                               PROP_YPAD,
-                               g_param_spec_uint ("ypad",
-                                                  _("ypad"),
-                                                  _("The ypad."),
-                                                  0,
-                                                  100,
-                                                  2,
-                                                  G_PARAM_READABLE |
-                                                  G_PARAM_WRITABLE));
+  g_object_class_install_property (object_class,
+                                  PROP_VISIBLE,
+                                  g_param_spec_boolean ("visible",
+                                                        _("visible"),
+                                                        _("Display the cell"),
+                                                        TRUE,
+                                                        G_PARAM_READABLE |
+                                                        G_PARAM_WRITABLE));
+  
+  g_object_class_install_property (object_class,
+                                  PROP_XALIGN,
+                                  g_param_spec_float ("xalign",
+                                                      _("xalign"),
+                                                      _("The x-align."),
+                                                      0.0,
+                                                      1.0,
+                                                      0.0,
+                                                      G_PARAM_READABLE |
+                                                      G_PARAM_WRITABLE));
+  
+  g_object_class_install_property (object_class,
+                                  PROP_YALIGN,
+                                  g_param_spec_float ("yalign",
+                                                      _("yalign"),
+                                                      _("The y-align."),
+                                                      0.0,
+                                                      1.0,
+                                                      0.5,
+                                                      G_PARAM_READABLE |
+                                                      G_PARAM_WRITABLE));
+  
+  g_object_class_install_property (object_class,
+                                  PROP_XPAD,
+                                  g_param_spec_uint ("xpad",
+                                                     _("xpad"),
+                                                     _("The xpad."),
+                                                     0,
+                                                     100,
+                                                     2,
+                                                     G_PARAM_READABLE |
+                                                     G_PARAM_WRITABLE));
+  
+  g_object_class_install_property (object_class,
+                                  PROP_YPAD,
+                                  g_param_spec_uint ("ypad",
+                                                     _("ypad"),
+                                                     _("The ypad."),
+                                                     0,
+                                                     100,
+                                                     2,
+                                                     G_PARAM_READABLE |
+                                                     G_PARAM_WRITABLE));
 }
 
 static void
-gtk_cell_renderer_get_param (GObject     *object,
-                            guint        param_id,
-                            GValue      *value,
-                            GParamSpec  *pspec,
-                            const gchar *trailer)
+gtk_cell_renderer_get_property (GObject     *object,
+                               guint        param_id,
+                               GValue      *value,
+                               GParamSpec  *pspec)
 {
   GtkCellRenderer *cell = GTK_CELL_RENDERER (object);
 
   switch (param_id)
     {
+    case PROP_VISIBLE:
+      g_value_set_boolean (value, cell->visible);
+      break;
     case PROP_XALIGN:
-      g_value_init (value, G_TYPE_FLOAT);
       g_value_set_float (value, cell->xalign);
       break;
     case PROP_YALIGN:
-      g_value_init (value, G_TYPE_FLOAT);
       g_value_set_float (value, cell->yalign);
       break;
     case PROP_XPAD:
-      g_value_init (value, G_TYPE_INT);
       g_value_set_float (value, cell->xpad);
       break;
     case PROP_YPAD:
-      g_value_init (value, G_TYPE_INT);
       g_value_set_float (value, cell->ypad);
       break;
     default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
       break;
     }
 
 }
 
 static void
-gtk_cell_renderer_set_param (GObject     *object,
-                            guint        param_id,
-                            GValue      *value,
-                            GParamSpec  *pspec,
-                            const gchar *trailer)
+gtk_cell_renderer_set_property (GObject      *object,
+                               guint         param_id,
+                               const GValue *value,
+                               GParamSpec   *pspec)
 {
   GtkCellRenderer *cell = GTK_CELL_RENDERER (object);
 
   switch (param_id)
     {
+    case PROP_VISIBLE:
+      cell->visible = g_value_get_boolean (value);
+      g_object_notify (object, "visible");
+      break;
     case PROP_XALIGN:
       cell->xalign = g_value_get_float (value);
+      g_object_notify (object, "xalign");
       break;
     case PROP_YALIGN:
       cell->yalign = g_value_get_float (value);
+      g_object_notify (object, "yalign");
       break;
     case PROP_XPAD:
       cell->xpad = g_value_get_int (value);
+      g_object_notify (object, "xpad");
       break;
     case PROP_YPAD:
       cell->ypad = g_value_get_int (value);
+      g_object_notify (object, "ypad");
       break;
     default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
       break;
     }
 }
 
+/**
+ * gtk_cell_renderer_get_size:
+ * @cell: a #GtkCellRenderer
+ * @widget: the widget the renderer is rendering to
+ * @width: location to return width needed to render a cell, or %NULL
+ * @height: location to return height needed to render a cell, or %NULL
+ * 
+ * Obtains the width and height needed to render the cell. Used by
+ * view widgets to determine the appropriate size for the cell_area
+ * passed to gtk_cell_renderer_render().
+ **/
 void
 gtk_cell_renderer_get_size (GtkCellRenderer *cell,
                            GtkWidget *widget,
                            gint      *width,
                            gint      *height)
 {
-  /* It's actually okay to pass in a NULL cell, as we run into that
-   * a lot */
-  if (cell == NULL)
-    return;
   g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
   g_return_if_fail (GTK_CELL_RENDERER_GET_CLASS (cell)->get_size != NULL);
 
   GTK_CELL_RENDERER_GET_CLASS (cell)->get_size (cell, widget, width, height);
 }
 
+/**
+ * gtk_cell_renderer_render:
+ * @cell: a #GtkCellRenderer
+ * @window: a #GdkDrawable to draw to
+ * @widget: the widget owning @window
+ * @background_area: entire cell area (including tree expanders and maybe padding on the sides)
+ * @cell_area: area normally rendered by a cell renderer
+ * @expose_area: area that actually needs updating
+ * @flags: flags that affect rendering
+ *
+ * Invokes the virtual render function of the #GtkCellRenderer. The
+ * three passed-in rectangles are areas of @window. Most renderers
+ * will draw to @cell_area; the xalign, yalign, xpad, and ypad fields
+ * of the #GtkCellRenderer should be honored with respect to
+ * @cell_area. @background_area includes the blank space around the
+ * cell, and also the area containing the tree expander; so the
+ * @background_area rectangles for all cells tile to cover the entire
+ * @window. Cell renderers can use the @background_area to draw custom expanders, for
+ * example. @expose_area is a clip rectangle.
+ * 
+ **/
 void
-gtk_cell_renderer_render (GtkCellRenderer *cell,
-                         GdkWindow       *window,
-                         GtkWidget       *widget,
-                         GdkRectangle    *background_area,
-                         GdkRectangle    *cell_area,
-                         GdkRectangle    *expose_area,
-                         guint            flags)
+gtk_cell_renderer_render (GtkCellRenderer     *cell,
+                         GdkWindow           *window,
+                         GtkWidget           *widget,
+                         GdkRectangle        *background_area,
+                         GdkRectangle        *cell_area,
+                         GdkRectangle        *expose_area,
+                         GtkCellRendererState flags)
 {
   /* It's actually okay to pass in a NULL cell, as we run into that
-   * a lot */
+   * a lot
+   */
   if (cell == NULL)
     return;
   g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
@@ -240,17 +285,34 @@ gtk_cell_renderer_render (GtkCellRenderer *cell,
                                              flags);
 }
 
+/**
+ * gtk_cell_renderer_event:
+ * @cell: a #GtkCellRenderer
+ * @event: a #GdkEvent
+ * @widget: widget that received the event
+ * @path: widget-dependent string representation of the event location; e.g. for #GtkTreeView, a string representation of #GtkTreePath
+ * @background_area: background area as passed to gtk_cell_renderer_render()
+ * @cell_area: cell area as passed to gtk_cell_renderer_render()
+ * @flags: render flags
+ * 
+ * Passes an event to the cell renderer for possible processing.  Some
+ * cell renderers may use events; for example, #GtkCellRendererToggle
+ * toggles when it gets a mouse click.
+ * 
+ * Return value: %TRUE if the event was consumed/handled
+ **/
 gint
-gtk_cell_renderer_event (GtkCellRenderer *cell,
-                        GdkEvent        *event,
-                        GtkWidget       *widget,
-                        gchar           *path,
-                        GdkRectangle    *background_area,
-                        GdkRectangle    *cell_area,
-                        guint            flags)
+gtk_cell_renderer_event (GtkCellRenderer     *cell,
+                        GdkEvent            *event,
+                        GtkWidget           *widget,
+                        gchar               *path,
+                        GdkRectangle        *background_area,
+                        GdkRectangle        *cell_area,
+                        GtkCellRendererState flags)
 {
   /* It's actually okay to pass in a NULL cell, as we run into that
-   * a lot */
+   * a lot
+   */
   if (cell == NULL)
     return FALSE;
   g_return_val_if_fail (GTK_IS_CELL_RENDERER (cell), FALSE);