]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkcellrenderer.c
marshaller fixes.
[~andy/gtk] / gtk / gtkcellrenderer.c
index adb255e67214323cf1abc8060dcf61790890bbec..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_property  (GObject              *object,
                                             guint                 param_id,
                                             GValue               *value,
-                                            GParamSpec           *pspec,
-                                            const gchar          *trailer);
+                                            GParamSpec           *pspec);
 static void gtk_cell_renderer_set_property  (GObject              *object,
                                             guint                 param_id,
                                             const GValue         *value,
-                                            GParamSpec           *pspec,
-                                            const gchar          *trailer);
+                                            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
@@ -92,6 +93,14 @@ gtk_cell_renderer_class_init (GtkCellRendererClass *class)
   class->render = NULL;
   class->get_size = NULL;
 
+  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,
@@ -142,27 +151,25 @@ static void
 gtk_cell_renderer_get_property (GObject     *object,
                                guint        param_id,
                                GValue      *value,
-                               GParamSpec  *pspec,
-                               const gchar *trailer)
+                               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:
@@ -176,24 +183,31 @@ static void
 gtk_cell_renderer_set_property (GObject      *object,
                                guint         param_id,
                                const GValue *value,
-                               GParamSpec   *pspec,
-                               const gchar  *trailer)
+                               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);
@@ -201,33 +215,62 @@ gtk_cell_renderer_set_property (GObject      *object,
     }
 }
 
+/**
+ * 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));
@@ -242,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);