diff options
author | 4 <jrb@redhat.com> | 2000-10-05 01:04:57 +0000 |
---|---|---|
committer | Jonathan Blandford <jrb@src.gnome.org> | 2000-10-05 01:04:57 +0000 |
commit | 3ff4a2c081e5225f010ecaed91b162eabbb9caf5 (patch) | |
tree | f1b889ac680e66a61e54d559baa911e524d10f2a /gtk/gtkcellrenderer.c | |
parent | 76806e9a1e2c56f31d7a96c02ea194d3cc5bbc0e (diff) | |
download | gdk-pixbuf-3ff4a2c081e5225f010ecaed91b162eabbb9caf5.tar.gz |
Checked in initial draft of the new tree widget.
2000-10-04 <jrb@redhat.com>
* gtk/gtk{tree,cell}?*.[ch]: Checked in initial draft of the new
tree widget.
Diffstat (limited to 'gtk/gtkcellrenderer.c')
-rw-r--r-- | gtk/gtkcellrenderer.c | 268 |
1 files changed, 268 insertions, 0 deletions
diff --git a/gtk/gtkcellrenderer.c b/gtk/gtkcellrenderer.c new file mode 100644 index 000000000..5a12dc21e --- /dev/null +++ b/gtk/gtkcellrenderer.c @@ -0,0 +1,268 @@ +/* gtkcellrenderer.c + * Copyright (C) 2000 Red Hat, Inc. Jonathan Blandford + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "gtkcellrenderer.h" + +#ifndef _ +#define _(x) x +#endif + +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); + + +enum { + PROP_ZERO, + PROP_XALIGN, + PROP_YALIGN, + PROP_XPAD, + PROP_YPAD +}; + + +GtkType +gtk_cell_renderer_get_type (void) +{ + static GtkType cell_type = 0; + + if (!cell_type) + { + static const GTypeInfo cell_info = + { + sizeof (GtkCellRendererClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) gtk_cell_renderer_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (GtkCellRenderer), + 0, + (GInstanceInitFunc) gtk_cell_renderer_init, + }; + + cell_type = g_type_register_static (GTK_TYPE_OBJECT, "GtkCellRenderer", &cell_info); + } + + return cell_type; +} + +static void +gtk_cell_renderer_init (GtkCellRenderer *cell) +{ + cell->xpad = 0; + cell->ypad = 0; + cell->xalign = 0.5; + cell->yalign = 0.5; +} + +static void +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; + + 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)); +} + +static void +gtk_cell_renderer_get_param (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec, + const gchar *trailer) +{ + GtkCellRenderer *cell = GTK_CELL_RENDERER (object); + + switch (param_id) + { + 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: + break; + } + +} + +static void +gtk_cell_renderer_set_param (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec, + const gchar *trailer) +{ + GtkCellRenderer *cell = GTK_CELL_RENDERER (object); + + switch (param_id) + { + case PROP_XALIGN: + cell->xalign = g_value_get_float (value); + break; + case PROP_YALIGN: + cell->yalign = g_value_get_float (value); + break; + case PROP_XPAD: + cell->xpad = g_value_get_int (value); + break; + case PROP_YPAD: + cell->ypad = g_value_get_int (value); + break; + default: + break; + } +} + +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); +} + +void +gtk_cell_renderer_render (GtkCellRenderer *cell, + GdkWindow *window, + GtkWidget *widget, + GdkRectangle *background_area, + GdkRectangle *cell_area, + GdkRectangle *expose_area, + guint flags) +{ + /* 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)->render != NULL); + + GTK_CELL_RENDERER_GET_CLASS (cell)->render (cell, + window, + widget, + background_area, + cell_area, + expose_area, + flags); +} + +gint +gtk_cell_renderer_event (GtkCellRenderer *cell, + GdkEvent *event, + GtkWidget *widget, + gchar *path, + GdkRectangle *background_area, + GdkRectangle *cell_area, + guint flags) +{ + /* It's actually okay to pass in a NULL cell, as we run into that + * a lot */ + if (cell == NULL) + return FALSE; + g_return_val_if_fail (GTK_IS_CELL_RENDERER (cell), FALSE); + if (GTK_CELL_RENDERER_GET_CLASS (cell)->event == NULL) + return FALSE; + + return GTK_CELL_RENDERER_GET_CLASS (cell)->event (cell, + event, + widget, + path, + background_area, + cell_area, + flags); +} + |