3 * Copyright (C) 2010 Openismus GmbH
6 * Tristan Van Berkom <tristanvb@openismus.com>
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Library General Public License for more details.
18 * You should have received a copy of the GNU Library General Public
19 * License along with this library; if not, write to the
20 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 * Boston, MA 02111-1307, USA.
24 #include "gtkorientable.h"
25 #include "gtkcellareabox.h"
28 static void gtk_cell_area_box_finalize (GObject *object);
29 static void gtk_cell_area_box_dispose (GObject *object);
30 static void gtk_cell_area_box_set_property (GObject *object,
34 static void gtk_cell_area_box_get_property (GObject *object,
39 /* GtkCellAreaClass */
40 static void gtk_cell_area_box_add (GtkCellArea *area,
41 GtkCellRenderer *renderer);
42 static void gtk_cell_area_box_remove (GtkCellArea *area,
43 GtkCellRenderer *renderer);
44 static void gtk_cell_area_box_forall (GtkCellArea *area,
45 GtkCellCallback callback,
46 gpointer callback_data);
47 static gint gtk_cell_area_box_event (GtkCellArea *area,
50 const GdkRectangle *cell_area);
51 static void gtk_cell_area_box_render (GtkCellArea *area,
54 const GdkRectangle *cell_area);
56 static GtkSizeRequestMode gtk_cell_area_box_get_request_mode (GtkCellArea *area);
57 static void gtk_cell_area_box_get_preferred_width (GtkCellArea *area,
61 static void gtk_cell_area_box_get_preferred_height (GtkCellArea *area,
64 gint *natural_height);
65 static void gtk_cell_area_box_get_preferred_height_for_width (GtkCellArea *area,
69 gint *natural_height);
70 static void gtk_cell_area_box_get_preferred_width_for_height (GtkCellArea *area,
77 struct _GtkCellAreaBoxPrivate
79 GtkOrientation orientation;
88 G_DEFINE_TYPE_WITH_CODE (GtkCellAreaBox, gtk_cell_area_box, GTK_TYPE_CELL_AREA,
89 G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL));
93 gtk_cell_area_box_init (GtkCellAreaBox *box)
95 GtkCellAreaBoxPrivate *priv;
97 box->priv = G_TYPE_INSTANCE_GET_PRIVATE (box,
98 GTK_TYPE_CELL_AREA_BOX,
99 GtkCellAreaBoxPrivate);
102 priv->orientation = GTK_ORIENTATION_HORIZONTAL;
106 gtk_cell_area_box_class_init (GtkCellAreaBoxClass *class)
108 GObjectClass *object_class = G_OBJECT_CLASS (class);
109 GtkCellAreaClass *area_class = GTK_CELL_AREA_CLASS (class);
112 object_class->finalize = gtk_cell_area_box_finalize;
113 object_class->dispose = gtk_cell_area_box_dispose;
114 object_class->set_property = gtk_cell_area_box_set_property;
115 object_class->get_property = gtk_cell_area_box_get_property;
117 /* GtkCellAreaClass */
118 area_class->add = gtk_cell_area_box_add;
119 area_class->remove = gtk_cell_area_box_remove;
120 area_class->forall = gtk_cell_area_box_forall;
121 area_class->event = gtk_cell_area_box_event;
122 area_class->render = gtk_cell_area_box_render;
124 area_class->get_request_mode = gtk_cell_area_box_get_request_mode;
125 area_class->get_preferred_width = gtk_cell_area_box_get_preferred_width;
126 area_class->get_preferred_height = gtk_cell_area_box_get_preferred_height;
127 area_class->get_preferred_height_for_width = gtk_cell_area_box_get_preferred_height_for_width;
128 area_class->get_preferred_width_for_height = gtk_cell_area_box_get_preferred_width_for_height;
130 g_object_class_override_property (object_class, PROP_ORIENTATION, "orientation");
133 g_type_class_add_private (object_class, sizeof (GtkCellAreaBoxPrivate));
137 /*************************************************************
139 *************************************************************/
141 gtk_cell_area_box_finalize (GObject *object)
143 G_OBJECT_CLASS (gtk_cell_area_box_parent_class)->finalize (object);
147 gtk_cell_area_box_dispose (GObject *object)
149 G_OBJECT_CLASS (gtk_cell_area_box_parent_class)->dispose (object);
153 gtk_cell_area_box_set_property (GObject *object,
162 gtk_cell_area_box_get_property (GObject *object,
170 /*************************************************************
172 *************************************************************/
174 gtk_cell_area_box_add (GtkCellArea *area,
175 GtkCellRenderer *renderer)
181 gtk_cell_area_box_remove (GtkCellArea *area,
182 GtkCellRenderer *renderer)
188 gtk_cell_area_box_forall (GtkCellArea *area,
189 GtkCellCallback callback,
190 gpointer callback_data)
196 gtk_cell_area_box_event (GtkCellArea *area,
199 const GdkRectangle *cell_area)
207 gtk_cell_area_box_render (GtkCellArea *area,
210 const GdkRectangle *cell_area)
215 static GtkSizeRequestMode
216 gtk_cell_area_box_get_request_mode (GtkCellArea *area)
218 GtkCellAreaBox *box = GTK_CELL_AREA_BOX (area);
219 GtkCellAreaBoxPrivate *priv = box->priv;
221 return (priv->orientation) == GTK_ORIENTATION_HORIZONTAL ?
222 GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH :
223 GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT;
227 gtk_cell_area_box_get_preferred_width (GtkCellArea *area,
236 gtk_cell_area_box_get_preferred_height (GtkCellArea *area,
238 gint *minimum_height,
239 gint *natural_height)
246 gtk_cell_area_box_get_preferred_height_for_width (GtkCellArea *area,
249 gint *minimum_height,
250 gint *natural_height)
256 gtk_cell_area_box_get_preferred_width_for_height (GtkCellArea *area,
265 /*************************************************************
267 *************************************************************/