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.
40 * @GTK_CELL_RENDERER_EXPANDABLE: The cell is in a row that can be expanded. Since 3.4
41 * @GTK_CELL_RENDERER_EXPANDED: The cell is in a row that is expanded. Since 3.4
43 * Tells how a cell is to be rendererd.
47 GTK_CELL_RENDERER_SELECTED = 1 << 0,
48 GTK_CELL_RENDERER_PRELIT = 1 << 1,
49 GTK_CELL_RENDERER_INSENSITIVE = 1 << 2,
50 /* this flag means the cell is in the sort column/row */
51 GTK_CELL_RENDERER_SORTED = 1 << 3,
52 GTK_CELL_RENDERER_FOCUSED = 1 << 4,
53 GTK_CELL_RENDERER_EXPANDABLE = 1 << 5,
54 GTK_CELL_RENDERER_EXPANDED = 1 << 6
55 } GtkCellRendererState;
58 * GtkCellRendererMode:
59 * @GTK_CELL_RENDERER_MODE_INERT: The cell is just for display
60 * and cannot be interacted with. Note that this doesn't mean that eg. the
61 * row being drawn can't be selected -- just that a particular element of
62 * it cannot be individually modified.
63 * @GTK_CELL_RENDERER_MODE_ACTIVATABLE: The cell can be clicked.
64 * @GTK_CELL_RENDERER_MODE_EDITABLE: The cell can be edited or otherwise modified.
66 * Identifies how the user can interact with a particular cell.
70 GTK_CELL_RENDERER_MODE_INERT,
71 GTK_CELL_RENDERER_MODE_ACTIVATABLE,
72 GTK_CELL_RENDERER_MODE_EDITABLE
73 } GtkCellRendererMode;
75 #define GTK_TYPE_CELL_RENDERER (gtk_cell_renderer_get_type ())
76 #define GTK_CELL_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CELL_RENDERER, GtkCellRenderer))
77 #define GTK_CELL_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_CELL_RENDERER, GtkCellRendererClass))
78 #define GTK_IS_CELL_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CELL_RENDERER))
79 #define GTK_IS_CELL_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CELL_RENDERER))
80 #define GTK_CELL_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CELL_RENDERER, GtkCellRendererClass))
82 typedef struct _GtkCellRenderer GtkCellRenderer;
83 typedef struct _GtkCellRendererPrivate GtkCellRendererPrivate;
84 typedef struct _GtkCellRendererClass GtkCellRendererClass;
85 typedef struct _GtkCellRendererClassPrivate GtkCellRendererClassPrivate;
87 struct _GtkCellRenderer
89 GInitiallyUnowned parent_instance;
92 GtkCellRendererPrivate *priv;
95 struct _GtkCellRendererClass
97 GInitiallyUnownedClass parent_class;
99 /* vtable - not signals */
100 GtkSizeRequestMode (* get_request_mode) (GtkCellRenderer *cell);
101 void (* get_preferred_width) (GtkCellRenderer *cell,
105 void (* get_preferred_height_for_width) (GtkCellRenderer *cell,
108 gint *minimum_height,
109 gint *natural_height);
110 void (* get_preferred_height) (GtkCellRenderer *cell,
114 void (* get_preferred_width_for_height) (GtkCellRenderer *cell,
118 gint *natural_width);
119 void (* get_aligned_area) (GtkCellRenderer *cell,
121 GtkCellRendererState flags,
122 const GdkRectangle *cell_area,
123 GdkRectangle *aligned_area);
124 void (* get_size) (GtkCellRenderer *cell,
126 const GdkRectangle *cell_area,
131 void (* render) (GtkCellRenderer *cell,
134 const GdkRectangle *background_area,
135 const GdkRectangle *cell_area,
136 GtkCellRendererState flags);
137 gboolean (* activate) (GtkCellRenderer *cell,
141 const GdkRectangle *background_area,
142 const GdkRectangle *cell_area,
143 GtkCellRendererState flags);
144 GtkCellEditable * (* start_editing) (GtkCellRenderer *cell,
148 const GdkRectangle *background_area,
149 const GdkRectangle *cell_area,
150 GtkCellRendererState flags);
153 void (* editing_canceled) (GtkCellRenderer *cell);
154 void (* editing_started) (GtkCellRenderer *cell,
155 GtkCellEditable *editable,
158 GtkCellRendererClassPrivate *priv;
160 /* Padding for future expansion */
161 void (*_gtk_reserved2) (void);
162 void (*_gtk_reserved3) (void);
163 void (*_gtk_reserved4) (void);
166 GType gtk_cell_renderer_get_type (void) G_GNUC_CONST;
168 GtkSizeRequestMode gtk_cell_renderer_get_request_mode (GtkCellRenderer *cell);
169 void gtk_cell_renderer_get_preferred_width (GtkCellRenderer *cell,
173 void gtk_cell_renderer_get_preferred_height_for_width (GtkCellRenderer *cell,
176 gint *minimum_height,
177 gint *natural_height);
178 void gtk_cell_renderer_get_preferred_height (GtkCellRenderer *cell,
182 void gtk_cell_renderer_get_preferred_width_for_height (GtkCellRenderer *cell,
186 gint *natural_width);
187 void gtk_cell_renderer_get_preferred_size (GtkCellRenderer *cell,
189 GtkRequisition *minimum_size,
190 GtkRequisition *natural_size);
191 void gtk_cell_renderer_get_aligned_area (GtkCellRenderer *cell,
193 GtkCellRendererState flags,
194 const GdkRectangle *cell_area,
195 GdkRectangle *aligned_area);
197 GDK_DEPRECATED_IN_3_0_FOR(gtk_cell_renderer_get_preferred_size)
198 void gtk_cell_renderer_get_size (GtkCellRenderer *cell,
200 const GdkRectangle *cell_area,
205 void gtk_cell_renderer_render (GtkCellRenderer *cell,
208 const GdkRectangle *background_area,
209 const GdkRectangle *cell_area,
210 GtkCellRendererState flags);
211 gboolean gtk_cell_renderer_activate (GtkCellRenderer *cell,
215 const GdkRectangle *background_area,
216 const GdkRectangle *cell_area,
217 GtkCellRendererState flags);
218 GtkCellEditable *gtk_cell_renderer_start_editing (GtkCellRenderer *cell,
222 const GdkRectangle *background_area,
223 const GdkRectangle *cell_area,
224 GtkCellRendererState flags);
226 void gtk_cell_renderer_set_fixed_size (GtkCellRenderer *cell,
229 void gtk_cell_renderer_get_fixed_size (GtkCellRenderer *cell,
233 void gtk_cell_renderer_set_alignment (GtkCellRenderer *cell,
236 void gtk_cell_renderer_get_alignment (GtkCellRenderer *cell,
240 void gtk_cell_renderer_set_padding (GtkCellRenderer *cell,
243 void gtk_cell_renderer_get_padding (GtkCellRenderer *cell,
247 void gtk_cell_renderer_set_visible (GtkCellRenderer *cell,
249 gboolean gtk_cell_renderer_get_visible (GtkCellRenderer *cell);
251 void gtk_cell_renderer_set_sensitive (GtkCellRenderer *cell,
253 gboolean gtk_cell_renderer_get_sensitive (GtkCellRenderer *cell);
255 gboolean gtk_cell_renderer_is_activatable (GtkCellRenderer *cell);
257 /* For use by cell renderer implementations only */
258 void gtk_cell_renderer_stop_editing (GtkCellRenderer *cell,
262 void _gtk_cell_renderer_calc_offset (GtkCellRenderer *cell,
263 const GdkRectangle *cell_area,
264 GtkTextDirection direction,
270 GtkStateFlags gtk_cell_renderer_get_state (GtkCellRenderer *cell,
272 GtkCellRendererState cell_state);
274 void _gtk_cell_renderer_class_set_accessible_type
275 (GtkCellRendererClass *renderer_class,
277 GType _gtk_cell_renderer_get_accessible_type
278 (GtkCellRenderer * renderer);
282 #endif /* __GTK_CELL_RENDERER_H__ */