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, see <http://www.gnu.org/licenses/>.
18 #if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
19 #error "Only <gtk/gtk.h> can be included directly."
22 #ifndef __GTK_CELL_RENDERER_H__
23 #define __GTK_CELL_RENDERER_H__
25 #include <gtk/gtkcelleditable.h>
31 * GtkCellRendererState:
32 * @GTK_CELL_RENDERER_SELECTED: The cell is currently selected, and
33 * probably has a selection colored background to render to.
34 * @GTK_CELL_RENDERER_PRELIT: The mouse is hovering over the cell.
35 * @GTK_CELL_RENDERER_INSENSITIVE: The cell is drawn in an insensitive manner
36 * @GTK_CELL_RENDERER_SORTED: The cell is in a sorted row
37 * @GTK_CELL_RENDERER_FOCUSED: The cell is in the focus row.
38 * @GTK_CELL_RENDERER_EXPANDABLE: The cell is in a row that can be expanded. Since 3.4
39 * @GTK_CELL_RENDERER_EXPANDED: The cell is in a row that is expanded. Since 3.4
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 GTK_CELL_RENDERER_EXPANDABLE = 1 << 5,
52 GTK_CELL_RENDERER_EXPANDED = 1 << 6
53 } GtkCellRendererState;
56 * GtkCellRendererMode:
57 * @GTK_CELL_RENDERER_MODE_INERT: The cell is just for display
58 * and cannot be interacted with. Note that this doesn't mean that eg. the
59 * row being drawn can't be selected -- just that a particular element of
60 * it cannot be individually modified.
61 * @GTK_CELL_RENDERER_MODE_ACTIVATABLE: The cell can be clicked.
62 * @GTK_CELL_RENDERER_MODE_EDITABLE: The cell can be edited or otherwise modified.
64 * Identifies how the user can interact with a particular cell.
68 GTK_CELL_RENDERER_MODE_INERT,
69 GTK_CELL_RENDERER_MODE_ACTIVATABLE,
70 GTK_CELL_RENDERER_MODE_EDITABLE
71 } GtkCellRendererMode;
73 #define GTK_TYPE_CELL_RENDERER (gtk_cell_renderer_get_type ())
74 #define GTK_CELL_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CELL_RENDERER, GtkCellRenderer))
75 #define GTK_CELL_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_CELL_RENDERER, GtkCellRendererClass))
76 #define GTK_IS_CELL_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CELL_RENDERER))
77 #define GTK_IS_CELL_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CELL_RENDERER))
78 #define GTK_CELL_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CELL_RENDERER, GtkCellRendererClass))
80 typedef struct _GtkCellRenderer GtkCellRenderer;
81 typedef struct _GtkCellRendererPrivate GtkCellRendererPrivate;
82 typedef struct _GtkCellRendererClass GtkCellRendererClass;
83 typedef struct _GtkCellRendererClassPrivate GtkCellRendererClassPrivate;
85 struct _GtkCellRenderer
87 GInitiallyUnowned parent_instance;
90 GtkCellRendererPrivate *priv;
93 struct _GtkCellRendererClass
95 GInitiallyUnownedClass parent_class;
97 /* vtable - not signals */
98 GtkSizeRequestMode (* get_request_mode) (GtkCellRenderer *cell);
99 void (* get_preferred_width) (GtkCellRenderer *cell,
103 void (* get_preferred_height_for_width) (GtkCellRenderer *cell,
106 gint *minimum_height,
107 gint *natural_height);
108 void (* get_preferred_height) (GtkCellRenderer *cell,
112 void (* get_preferred_width_for_height) (GtkCellRenderer *cell,
116 gint *natural_width);
117 void (* get_aligned_area) (GtkCellRenderer *cell,
119 GtkCellRendererState flags,
120 const GdkRectangle *cell_area,
121 GdkRectangle *aligned_area);
122 void (* get_size) (GtkCellRenderer *cell,
124 const GdkRectangle *cell_area,
129 void (* render) (GtkCellRenderer *cell,
132 const GdkRectangle *background_area,
133 const GdkRectangle *cell_area,
134 GtkCellRendererState flags);
135 gboolean (* activate) (GtkCellRenderer *cell,
139 const GdkRectangle *background_area,
140 const GdkRectangle *cell_area,
141 GtkCellRendererState flags);
142 GtkCellEditable * (* start_editing) (GtkCellRenderer *cell,
146 const GdkRectangle *background_area,
147 const GdkRectangle *cell_area,
148 GtkCellRendererState flags);
151 void (* editing_canceled) (GtkCellRenderer *cell);
152 void (* editing_started) (GtkCellRenderer *cell,
153 GtkCellEditable *editable,
156 GtkCellRendererClassPrivate *priv;
158 /* Padding for future expansion */
159 void (*_gtk_reserved2) (void);
160 void (*_gtk_reserved3) (void);
161 void (*_gtk_reserved4) (void);
164 GType gtk_cell_renderer_get_type (void) G_GNUC_CONST;
166 GtkSizeRequestMode gtk_cell_renderer_get_request_mode (GtkCellRenderer *cell);
167 void gtk_cell_renderer_get_preferred_width (GtkCellRenderer *cell,
171 void gtk_cell_renderer_get_preferred_height_for_width (GtkCellRenderer *cell,
174 gint *minimum_height,
175 gint *natural_height);
176 void gtk_cell_renderer_get_preferred_height (GtkCellRenderer *cell,
180 void gtk_cell_renderer_get_preferred_width_for_height (GtkCellRenderer *cell,
184 gint *natural_width);
185 void gtk_cell_renderer_get_preferred_size (GtkCellRenderer *cell,
187 GtkRequisition *minimum_size,
188 GtkRequisition *natural_size);
189 void gtk_cell_renderer_get_aligned_area (GtkCellRenderer *cell,
191 GtkCellRendererState flags,
192 const GdkRectangle *cell_area,
193 GdkRectangle *aligned_area);
195 GDK_DEPRECATED_IN_3_0_FOR(gtk_cell_renderer_get_preferred_size)
196 void gtk_cell_renderer_get_size (GtkCellRenderer *cell,
198 const GdkRectangle *cell_area,
203 void gtk_cell_renderer_render (GtkCellRenderer *cell,
206 const GdkRectangle *background_area,
207 const GdkRectangle *cell_area,
208 GtkCellRendererState flags);
209 gboolean gtk_cell_renderer_activate (GtkCellRenderer *cell,
213 const GdkRectangle *background_area,
214 const GdkRectangle *cell_area,
215 GtkCellRendererState flags);
216 GtkCellEditable *gtk_cell_renderer_start_editing (GtkCellRenderer *cell,
220 const GdkRectangle *background_area,
221 const GdkRectangle *cell_area,
222 GtkCellRendererState flags);
224 void gtk_cell_renderer_set_fixed_size (GtkCellRenderer *cell,
227 void gtk_cell_renderer_get_fixed_size (GtkCellRenderer *cell,
231 void gtk_cell_renderer_set_alignment (GtkCellRenderer *cell,
234 void gtk_cell_renderer_get_alignment (GtkCellRenderer *cell,
238 void gtk_cell_renderer_set_padding (GtkCellRenderer *cell,
241 void gtk_cell_renderer_get_padding (GtkCellRenderer *cell,
245 void gtk_cell_renderer_set_visible (GtkCellRenderer *cell,
247 gboolean gtk_cell_renderer_get_visible (GtkCellRenderer *cell);
249 void gtk_cell_renderer_set_sensitive (GtkCellRenderer *cell,
251 gboolean gtk_cell_renderer_get_sensitive (GtkCellRenderer *cell);
253 gboolean gtk_cell_renderer_is_activatable (GtkCellRenderer *cell);
255 /* For use by cell renderer implementations only */
256 void gtk_cell_renderer_stop_editing (GtkCellRenderer *cell,
260 void _gtk_cell_renderer_calc_offset (GtkCellRenderer *cell,
261 const GdkRectangle *cell_area,
262 GtkTextDirection direction,
268 GtkStateFlags gtk_cell_renderer_get_state (GtkCellRenderer *cell,
270 GtkCellRendererState cell_state);
272 void _gtk_cell_renderer_class_set_accessible_type
273 (GtkCellRendererClass *renderer_class,
275 GType _gtk_cell_renderer_get_accessible_type
276 (GtkCellRenderer * renderer);
280 #endif /* __GTK_CELL_RENDERER_H__ */