| 1 | /* gtkcellrenderer.h | 
| 2 |  * Copyright (C) 2000  Red Hat, Inc.,  Jonathan Blandford <jrb@redhat.com> | 
| 3 |  * | 
| 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. | 
| 8 |  * | 
| 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. | 
| 13 |  * | 
| 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/>. | 
| 16 |  */ | 
| 17 |  | 
| 18 | #ifndef __GTK_CELL_RENDERER_H__ | 
| 19 | #define __GTK_CELL_RENDERER_H__ | 
| 20 |  | 
| 21 | #if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) | 
| 22 | #error "Only <gtk/gtk.h> can be included directly." | 
| 23 | #endif | 
| 24 |  | 
| 25 | #include <gtk/gtkcelleditable.h> | 
| 26 |  | 
| 27 | G_BEGIN_DECLS | 
| 28 |  | 
| 29 |  | 
| 30 | /** | 
| 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 | 
| 40 |  * | 
| 41 |  * Tells how a cell is to be rendered. | 
| 42 |  */ | 
| 43 | typedef enum | 
| 44 | { | 
| 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; | 
| 54 |  | 
| 55 | /** | 
| 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. | 
| 63 |  * | 
| 64 |  * Identifies how the user can interact with a particular cell. | 
| 65 |  */ | 
| 66 | typedef enum | 
| 67 | { | 
| 68 |   GTK_CELL_RENDERER_MODE_INERT, | 
| 69 |   GTK_CELL_RENDERER_MODE_ACTIVATABLE, | 
| 70 |   GTK_CELL_RENDERER_MODE_EDITABLE | 
| 71 | } GtkCellRendererMode; | 
| 72 |  | 
| 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)) | 
| 79 |  | 
| 80 | typedef struct _GtkCellRenderer              GtkCellRenderer; | 
| 81 | typedef struct _GtkCellRendererPrivate       GtkCellRendererPrivate; | 
| 82 | typedef struct _GtkCellRendererClass         GtkCellRendererClass; | 
| 83 | typedef struct _GtkCellRendererClassPrivate  GtkCellRendererClassPrivate; | 
| 84 |  | 
| 85 | struct _GtkCellRenderer | 
| 86 | { | 
| 87 |   GInitiallyUnowned parent_instance; | 
| 88 |  | 
| 89 |   /*< private >*/ | 
| 90 |   GtkCellRendererPrivate *priv; | 
| 91 | }; | 
| 92 |  | 
| 93 | /** | 
| 94 |  * GtkCellRendererClass: | 
| 95 |  * @get_request_mode: Called to gets whether the cell renderer prefers | 
| 96 |  *    a height-for-width layout or a width-for-height layout. | 
| 97 |  * @get_preferred_width: Called to get a renderer’s natural width. | 
| 98 |  * @get_preferred_height_for_width: Called to get a renderer’s natural height for width. | 
| 99 |  * @get_preferred_height: Called to get a renderer’s natural height. | 
| 100 |  * @get_preferred_width_for_height: Called to get a renderer’s natural width for height. | 
| 101 |  * @get_aligned_area: Called to get the aligned area used by @cell inside @cell_area. | 
| 102 |  * @get_size: Called to get the width and height needed to render the cell. Deprecated: 3.0. | 
| 103 |  * @render: Called to render the content of the #GtkCellRenderer. | 
| 104 |  * @activate: Called to activate the content of the #GtkCellRenderer. | 
| 105 |  * @start_editing: Called to initiate editing the content of the #GtkCellRenderer. | 
| 106 |  * @editing_canceled: Signal gets emitted when the user cancels the process of editing a cell. | 
| 107 |  * @editing_started: Signal gets emitted when a cell starts to be edited. | 
| 108 |  */ | 
| 109 | struct _GtkCellRendererClass | 
| 110 | { | 
| 111 |   /*< private >*/ | 
| 112 |   GInitiallyUnownedClass parent_class; | 
| 113 |  | 
| 114 |   /*< public >*/ | 
| 115 |  | 
| 116 |   /* vtable - not signals */ | 
| 117 |   GtkSizeRequestMode (* get_request_mode)                (GtkCellRenderer      *cell); | 
| 118 |   void               (* get_preferred_width)             (GtkCellRenderer      *cell, | 
| 119 |                                                           GtkWidget            *widget, | 
| 120 |                                                           gint                 *minimum_size, | 
| 121 |                                                           gint                 *natural_size); | 
| 122 |   void               (* get_preferred_height_for_width)  (GtkCellRenderer      *cell, | 
| 123 |                                                           GtkWidget            *widget, | 
| 124 |                                                           gint                  width, | 
| 125 |                                                           gint                 *minimum_height, | 
| 126 |                                                           gint                 *natural_height); | 
| 127 |   void               (* get_preferred_height)            (GtkCellRenderer      *cell, | 
| 128 |                                                           GtkWidget            *widget, | 
| 129 |                                                           gint                 *minimum_size, | 
| 130 |                                                           gint                 *natural_size); | 
| 131 |   void               (* get_preferred_width_for_height)  (GtkCellRenderer      *cell, | 
| 132 |                                                           GtkWidget            *widget, | 
| 133 |                                                           gint                  height, | 
| 134 |                                                           gint                 *minimum_width, | 
| 135 |                                                           gint                 *natural_width); | 
| 136 |   void               (* get_aligned_area)                (GtkCellRenderer      *cell, | 
| 137 |                                                           GtkWidget            *widget, | 
| 138 | 							  GtkCellRendererState  flags, | 
| 139 |                                                           const GdkRectangle   *cell_area, | 
| 140 |                                                           GdkRectangle         *aligned_area); | 
| 141 |   void               (* get_size)                        (GtkCellRenderer      *cell, | 
| 142 |                                                           GtkWidget            *widget, | 
| 143 |                                                           const GdkRectangle   *cell_area, | 
| 144 |                                                           gint                 *x_offset, | 
| 145 |                                                           gint                 *y_offset, | 
| 146 |                                                           gint                 *width, | 
| 147 |                                                           gint                 *height); | 
| 148 |   void               (* render)                          (GtkCellRenderer      *cell, | 
| 149 |                                                           cairo_t              *cr, | 
| 150 |                                                           GtkWidget            *widget, | 
| 151 |                                                           const GdkRectangle   *background_area, | 
| 152 |                                                           const GdkRectangle   *cell_area, | 
| 153 |                                                           GtkCellRendererState  flags); | 
| 154 |   gboolean           (* activate)                        (GtkCellRenderer      *cell, | 
| 155 |                                                           GdkEvent             *event, | 
| 156 |                                                           GtkWidget            *widget, | 
| 157 |                                                           const gchar          *path, | 
| 158 |                                                           const GdkRectangle   *background_area, | 
| 159 |                                                           const GdkRectangle   *cell_area, | 
| 160 |                                                           GtkCellRendererState  flags); | 
| 161 |   GtkCellEditable *  (* start_editing)                   (GtkCellRenderer      *cell, | 
| 162 |                                                           GdkEvent             *event, | 
| 163 |                                                           GtkWidget            *widget, | 
| 164 |                                                           const gchar          *path, | 
| 165 |                                                           const GdkRectangle   *background_area, | 
| 166 |                                                           const GdkRectangle   *cell_area, | 
| 167 |                                                           GtkCellRendererState  flags); | 
| 168 |  | 
| 169 |   /* Signals */ | 
| 170 |   void (* editing_canceled) (GtkCellRenderer *cell); | 
| 171 |   void (* editing_started)  (GtkCellRenderer *cell, | 
| 172 | 			     GtkCellEditable *editable, | 
| 173 | 			     const gchar     *path); | 
| 174 |  | 
| 175 |   /*< private >*/ | 
| 176 |  | 
| 177 |   GtkCellRendererClassPrivate *priv; | 
| 178 |  | 
| 179 |   /* Padding for future expansion */ | 
| 180 |   void (*_gtk_reserved2) (void); | 
| 181 |   void (*_gtk_reserved3) (void); | 
| 182 |   void (*_gtk_reserved4) (void); | 
| 183 | }; | 
| 184 |  | 
| 185 | GDK_AVAILABLE_IN_ALL | 
| 186 | GType              gtk_cell_renderer_get_type       (void) G_GNUC_CONST; | 
| 187 |  | 
| 188 | GDK_AVAILABLE_IN_ALL | 
| 189 | GtkSizeRequestMode gtk_cell_renderer_get_request_mode               (GtkCellRenderer    *cell); | 
| 190 | GDK_AVAILABLE_IN_ALL | 
| 191 | void               gtk_cell_renderer_get_preferred_width            (GtkCellRenderer    *cell, | 
| 192 |                                                                      GtkWidget          *widget, | 
| 193 |                                                                      gint               *minimum_size, | 
| 194 |                                                                      gint               *natural_size); | 
| 195 | GDK_AVAILABLE_IN_ALL | 
| 196 | void               gtk_cell_renderer_get_preferred_height_for_width (GtkCellRenderer    *cell, | 
| 197 |                                                                      GtkWidget          *widget, | 
| 198 |                                                                      gint                width, | 
| 199 |                                                                      gint               *minimum_height, | 
| 200 |                                                                      gint               *natural_height); | 
| 201 | GDK_AVAILABLE_IN_ALL | 
| 202 | void               gtk_cell_renderer_get_preferred_height           (GtkCellRenderer    *cell, | 
| 203 |                                                                      GtkWidget          *widget, | 
| 204 |                                                                      gint               *minimum_size, | 
| 205 |                                                                      gint               *natural_size); | 
| 206 | GDK_AVAILABLE_IN_ALL | 
| 207 | void               gtk_cell_renderer_get_preferred_width_for_height (GtkCellRenderer    *cell, | 
| 208 |                                                                      GtkWidget          *widget, | 
| 209 |                                                                      gint                height, | 
| 210 |                                                                      gint               *minimum_width, | 
| 211 |                                                                      gint               *natural_width); | 
| 212 | GDK_AVAILABLE_IN_ALL | 
| 213 | void               gtk_cell_renderer_get_preferred_size             (GtkCellRenderer    *cell, | 
| 214 |                                                                      GtkWidget          *widget, | 
| 215 |                                                                      GtkRequisition     *minimum_size, | 
| 216 |                                                                      GtkRequisition     *natural_size); | 
| 217 | GDK_AVAILABLE_IN_ALL | 
| 218 | void               gtk_cell_renderer_get_aligned_area               (GtkCellRenderer    *cell, | 
| 219 | 								     GtkWidget          *widget, | 
| 220 | 								     GtkCellRendererState flags, | 
| 221 | 								     const GdkRectangle *cell_area, | 
| 222 | 								     GdkRectangle       *aligned_area); | 
| 223 |  | 
| 224 | GDK_DEPRECATED_IN_3_0_FOR(gtk_cell_renderer_get_preferred_size) | 
| 225 | void             gtk_cell_renderer_get_size       (GtkCellRenderer      *cell, | 
| 226 |                                                    GtkWidget            *widget, | 
| 227 |                                                    const GdkRectangle   *cell_area, | 
| 228 |                                                    gint                 *x_offset, | 
| 229 |                                                    gint                 *y_offset, | 
| 230 |                                                    gint                 *width, | 
| 231 |                                                    gint                 *height); | 
| 232 | GDK_AVAILABLE_IN_ALL | 
| 233 | void             gtk_cell_renderer_render         (GtkCellRenderer      *cell, | 
| 234 |                                                    cairo_t              *cr, | 
| 235 | 						   GtkWidget            *widget, | 
| 236 | 						   const GdkRectangle   *background_area, | 
| 237 | 						   const GdkRectangle   *cell_area, | 
| 238 | 						   GtkCellRendererState  flags); | 
| 239 | GDK_AVAILABLE_IN_ALL | 
| 240 | gboolean         gtk_cell_renderer_activate       (GtkCellRenderer      *cell, | 
| 241 | 						   GdkEvent             *event, | 
| 242 | 						   GtkWidget            *widget, | 
| 243 | 						   const gchar          *path, | 
| 244 | 						   const GdkRectangle   *background_area, | 
| 245 | 						   const GdkRectangle   *cell_area, | 
| 246 | 						   GtkCellRendererState  flags); | 
| 247 | GDK_AVAILABLE_IN_ALL | 
| 248 | GtkCellEditable *gtk_cell_renderer_start_editing  (GtkCellRenderer      *cell, | 
| 249 | 						   GdkEvent             *event, | 
| 250 | 						   GtkWidget            *widget, | 
| 251 | 						   const gchar          *path, | 
| 252 | 						   const GdkRectangle   *background_area, | 
| 253 | 						   const GdkRectangle   *cell_area, | 
| 254 | 						   GtkCellRendererState  flags); | 
| 255 |  | 
| 256 | GDK_AVAILABLE_IN_ALL | 
| 257 | void             gtk_cell_renderer_set_fixed_size (GtkCellRenderer      *cell, | 
| 258 | 						   gint                  width, | 
| 259 | 						   gint                  height); | 
| 260 | GDK_AVAILABLE_IN_ALL | 
| 261 | void             gtk_cell_renderer_get_fixed_size (GtkCellRenderer      *cell, | 
| 262 | 						   gint                 *width, | 
| 263 | 						   gint                 *height); | 
| 264 |  | 
| 265 | GDK_AVAILABLE_IN_ALL | 
| 266 | void             gtk_cell_renderer_set_alignment  (GtkCellRenderer      *cell, | 
| 267 |                                                    gfloat                xalign, | 
| 268 |                                                    gfloat                yalign); | 
| 269 | GDK_AVAILABLE_IN_ALL | 
| 270 | void             gtk_cell_renderer_get_alignment  (GtkCellRenderer      *cell, | 
| 271 |                                                    gfloat               *xalign, | 
| 272 |                                                    gfloat               *yalign); | 
| 273 |  | 
| 274 | GDK_AVAILABLE_IN_ALL | 
| 275 | void             gtk_cell_renderer_set_padding    (GtkCellRenderer      *cell, | 
| 276 |                                                    gint                  xpad, | 
| 277 |                                                    gint                  ypad); | 
| 278 | GDK_AVAILABLE_IN_ALL | 
| 279 | void             gtk_cell_renderer_get_padding    (GtkCellRenderer      *cell, | 
| 280 |                                                    gint                 *xpad, | 
| 281 |                                                    gint                 *ypad); | 
| 282 |  | 
| 283 | GDK_AVAILABLE_IN_ALL | 
| 284 | void             gtk_cell_renderer_set_visible    (GtkCellRenderer      *cell, | 
| 285 |                                                    gboolean              visible); | 
| 286 | GDK_AVAILABLE_IN_ALL | 
| 287 | gboolean         gtk_cell_renderer_get_visible    (GtkCellRenderer      *cell); | 
| 288 |  | 
| 289 | GDK_AVAILABLE_IN_ALL | 
| 290 | void             gtk_cell_renderer_set_sensitive  (GtkCellRenderer      *cell, | 
| 291 |                                                    gboolean              sensitive); | 
| 292 | GDK_AVAILABLE_IN_ALL | 
| 293 | gboolean         gtk_cell_renderer_get_sensitive  (GtkCellRenderer      *cell); | 
| 294 |  | 
| 295 | GDK_AVAILABLE_IN_ALL | 
| 296 | gboolean         gtk_cell_renderer_is_activatable (GtkCellRenderer      *cell); | 
| 297 |  | 
| 298 | /* For use by cell renderer implementations only */ | 
| 299 | GDK_AVAILABLE_IN_ALL | 
| 300 | void             gtk_cell_renderer_stop_editing   (GtkCellRenderer      *cell, | 
| 301 |                                                    gboolean              canceled); | 
| 302 |  | 
| 303 |  | 
| 304 | void            _gtk_cell_renderer_calc_offset    (GtkCellRenderer      *cell, | 
| 305 |                                                    const GdkRectangle   *cell_area, | 
| 306 |                                                    GtkTextDirection      direction, | 
| 307 |                                                    gint                  width, | 
| 308 |                                                    gint                  height, | 
| 309 |                                                    gint                 *x_offset, | 
| 310 |                                                    gint                 *y_offset); | 
| 311 |  | 
| 312 | GDK_AVAILABLE_IN_ALL | 
| 313 | GtkStateFlags   gtk_cell_renderer_get_state       (GtkCellRenderer      *cell, | 
| 314 |                                                    GtkWidget            *widget, | 
| 315 |                                                    GtkCellRendererState  cell_state); | 
| 316 |  | 
| 317 | GDK_AVAILABLE_IN_ALL | 
| 318 | void            gtk_cell_renderer_class_set_accessible_type  | 
| 319 |                                                   (GtkCellRendererClass *renderer_class, | 
| 320 |                                                    GType                 type); | 
| 321 | GType           _gtk_cell_renderer_get_accessible_type | 
| 322 |                                                   (GtkCellRenderer *     renderer); | 
| 323 |  | 
| 324 | G_END_DECLS | 
| 325 |  | 
| 326 | #endif /* __GTK_CELL_RENDERER_H__ */ | 
| 327 |  |