2 * Copyright (C) 2000 Red Hat, Inc., Jonathan Blandford <jrb@redhat.com>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
20 #if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
21 #error "Only <gtk/gtk.h> can be included directly."
24 #ifndef __GTK_CELL_RENDERER_H__
25 #define __GTK_CELL_RENDERER_H__
27 #include <gtk/gtkcelleditable.h>
33 * GtkCellRendererState:
34 * @GTK_CELL_RENDERER_SELECTED: The cell is currently selected, and
35 * probably has a selection colored background to render to.
36 * @GTK_CELL_RENDERER_PRELIT: The mouse is hovering over the cell.
37 * @GTK_CELL_RENDERER_INSENSITIVE: The cell is drawn in an insensitive manner
38 * @GTK_CELL_RENDERER_SORTED: The cell is in a sorted row
39 * @GTK_CELL_RENDERER_FOCUSED: The cell is in the focus row.
41 * Tells how a cell is to be rendererd.
45 GTK_CELL_RENDERER_SELECTED = 1 << 0,
46 GTK_CELL_RENDERER_PRELIT = 1 << 1,
47 GTK_CELL_RENDERER_INSENSITIVE = 1 << 2,
48 /* this flag means the cell is in the sort column/row */
49 GTK_CELL_RENDERER_SORTED = 1 << 3,
50 GTK_CELL_RENDERER_FOCUSED = 1 << 4
51 } GtkCellRendererState;
54 * GtkCellRendererMode:
55 * @GTK_CELL_RENDERER_MODE_INERT: The cell is just for display
56 * and cannot be interacted with. Note that this doesn't mean that eg. the
57 * row being drawn can't be selected -- just that a particular element of
58 * it cannot be individually modified.
59 * @GTK_CELL_RENDERER_MODE_ACTIVATABLE: The cell can be clicked.
60 * @GTK_CELL_RENDERER_MODE_EDITABLE: The cell can be edited or otherwise modified.
62 * Identifies how the user can interact with a particular cell.
66 GTK_CELL_RENDERER_MODE_INERT,
67 GTK_CELL_RENDERER_MODE_ACTIVATABLE,
68 GTK_CELL_RENDERER_MODE_EDITABLE
69 } GtkCellRendererMode;
71 #define GTK_TYPE_CELL_RENDERER (gtk_cell_renderer_get_type ())
72 #define GTK_CELL_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CELL_RENDERER, GtkCellRenderer))
73 #define GTK_CELL_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_CELL_RENDERER, GtkCellRendererClass))
74 #define GTK_IS_CELL_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CELL_RENDERER))
75 #define GTK_IS_CELL_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CELL_RENDERER))
76 #define GTK_CELL_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CELL_RENDERER, GtkCellRendererClass))
78 typedef struct _GtkCellRenderer GtkCellRenderer;
79 typedef struct _GtkCellRendererPrivate GtkCellRendererPrivate;
80 typedef struct _GtkCellRendererClass GtkCellRendererClass;
82 struct _GtkCellRenderer
84 GInitiallyUnowned parent_instance;
87 GtkCellRendererPrivate *priv;
90 struct _GtkCellRendererClass
92 GInitiallyUnownedClass parent_class;
94 /* vtable - not signals */
95 GtkSizeRequestMode (* get_request_mode) (GtkCellRenderer *cell);
96 void (* get_preferred_width) (GtkCellRenderer *cell,
100 void (* get_preferred_height_for_width) (GtkCellRenderer *cell,
103 gint *minimum_height,
104 gint *natural_height);
105 void (* get_preferred_height) (GtkCellRenderer *cell,
109 void (* get_preferred_width_for_height) (GtkCellRenderer *cell,
113 gint *natural_width);
114 void (* get_aligned_area) (GtkCellRenderer *cell,
116 GtkCellRendererState flags,
117 const GdkRectangle *cell_area,
118 GdkRectangle *aligned_area);
119 void (* get_size) (GtkCellRenderer *cell,
121 const GdkRectangle *cell_area,
126 void (* render) (GtkCellRenderer *cell,
129 const GdkRectangle *background_area,
130 const GdkRectangle *cell_area,
131 GtkCellRendererState flags);
132 gboolean (* activate) (GtkCellRenderer *cell,
136 const GdkRectangle *background_area,
137 const GdkRectangle *cell_area,
138 GtkCellRendererState flags);
139 GtkCellEditable * (* start_editing) (GtkCellRenderer *cell,
143 const GdkRectangle *background_area,
144 const GdkRectangle *cell_area,
145 GtkCellRendererState flags);
148 void (* editing_canceled) (GtkCellRenderer *cell);
149 void (* editing_started) (GtkCellRenderer *cell,
150 GtkCellEditable *editable,
153 /* Padding for future expansion */
154 void (*_gtk_reserved1) (void);
155 void (*_gtk_reserved2) (void);
156 void (*_gtk_reserved3) (void);
157 void (*_gtk_reserved4) (void);
160 GType gtk_cell_renderer_get_type (void) G_GNUC_CONST;
162 GtkSizeRequestMode gtk_cell_renderer_get_request_mode (GtkCellRenderer *cell);
163 void gtk_cell_renderer_get_preferred_width (GtkCellRenderer *cell,
167 void gtk_cell_renderer_get_preferred_height_for_width (GtkCellRenderer *cell,
170 gint *minimum_height,
171 gint *natural_height);
172 void gtk_cell_renderer_get_preferred_height (GtkCellRenderer *cell,
176 void gtk_cell_renderer_get_preferred_width_for_height (GtkCellRenderer *cell,
180 gint *natural_width);
181 void gtk_cell_renderer_get_preferred_size (GtkCellRenderer *cell,
183 GtkRequisition *minimum_size,
184 GtkRequisition *natural_size);
185 void gtk_cell_renderer_get_aligned_area (GtkCellRenderer *cell,
187 GtkCellRendererState flags,
188 const GdkRectangle *cell_area,
189 GdkRectangle *aligned_area);
191 #ifndef GTK_DISABLE_DEPRECATED
192 void gtk_cell_renderer_get_size (GtkCellRenderer *cell,
194 const GdkRectangle *cell_area,
200 void gtk_cell_renderer_render (GtkCellRenderer *cell,
203 const GdkRectangle *background_area,
204 const GdkRectangle *cell_area,
205 GtkCellRendererState flags);
206 gboolean gtk_cell_renderer_activate (GtkCellRenderer *cell,
210 const GdkRectangle *background_area,
211 const GdkRectangle *cell_area,
212 GtkCellRendererState flags);
213 GtkCellEditable *gtk_cell_renderer_start_editing (GtkCellRenderer *cell,
217 const GdkRectangle *background_area,
218 const GdkRectangle *cell_area,
219 GtkCellRendererState flags);
221 void gtk_cell_renderer_set_fixed_size (GtkCellRenderer *cell,
224 void gtk_cell_renderer_get_fixed_size (GtkCellRenderer *cell,
228 void gtk_cell_renderer_set_alignment (GtkCellRenderer *cell,
231 void gtk_cell_renderer_get_alignment (GtkCellRenderer *cell,
235 void gtk_cell_renderer_set_padding (GtkCellRenderer *cell,
238 void gtk_cell_renderer_get_padding (GtkCellRenderer *cell,
242 void gtk_cell_renderer_set_visible (GtkCellRenderer *cell,
244 gboolean gtk_cell_renderer_get_visible (GtkCellRenderer *cell);
246 void gtk_cell_renderer_set_sensitive (GtkCellRenderer *cell,
248 gboolean gtk_cell_renderer_get_sensitive (GtkCellRenderer *cell);
250 gboolean gtk_cell_renderer_is_activatable (GtkCellRenderer *cell);
252 /* For use by cell renderer implementations only */
253 void gtk_cell_renderer_stop_editing (GtkCellRenderer *cell,
257 void _gtk_cell_renderer_calc_offset (GtkCellRenderer *cell,
258 const GdkRectangle *cell_area,
259 GtkTextDirection direction,
265 GtkStateFlags gtk_cell_renderer_get_state (GtkCellRenderer *cell,
267 GtkCellRendererState cell_state);
271 #endif /* __GTK_CELL_RENDERER_H__ */