1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 8 -*- */
3 * Copyright (C) 2002 Dave Camp
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
15 * You should have received a copy of the GNU Library General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
22 * SECTION:cell-renderer-captioned-image
23 * @short_description: Captioned image cell renderer
25 * @stability: Unstable
26 * @include: libanjuta/anjuta-cell-renderer-captioned-image.h
31 #include <glib/gi18n.h>
33 #include "anjuta-cell-renderer-captioned-image.h"
45 G_DEFINE_TYPE(AnjutaCellRendererCaptionedImage
, anjuta_cell_renderer_captioned_image
, GTK_TYPE_CELL_RENDERER
)
48 anjuta_cell_renderer_captioned_image_get_property (GObject
*object
,
53 AnjutaCellRendererCaptionedImage
*cell
= ANJUTA_CELL_RENDERER_CAPTIONED_IMAGE (object
);
57 g_object_get_property (G_OBJECT (cell
->caption
),
61 g_object_get_property (G_OBJECT (cell
->image
),
65 G_OBJECT_WARN_INVALID_PROPERTY_ID (object
, param_id
, pspec
);
71 anjuta_cell_renderer_captioned_image_set_property (GObject
*object
,
76 AnjutaCellRendererCaptionedImage
*cell
= ANJUTA_CELL_RENDERER_CAPTIONED_IMAGE (object
);
80 g_object_set_property (G_OBJECT (cell
->caption
), "text", value
);
84 g_object_set_property (G_OBJECT (cell
->image
), "pixbuf",
89 G_OBJECT_WARN_INVALID_PROPERTY_ID (object
, param_id
, pspec
);
95 anjuta_cell_renderer_captioned_image_new (void)
97 return GTK_CELL_RENDERER (g_object_new (anjuta_cell_renderer_captioned_image_get_type (), NULL
));
101 anjuta_cell_renderer_captioned_image_get_preferred_height (GtkCellRenderer
*gtk_cell
,
111 AnjutaCellRendererCaptionedImage
*cell
= ANJUTA_CELL_RENDERER_CAPTIONED_IMAGE (gtk_cell
);
113 gtk_cell_renderer_get_preferred_height (cell
->image
, widget
, &image_min
, &image_nat
);
115 gtk_cell_renderer_get_preferred_height (cell
->caption
, widget
,
116 &text_min
, &text_nat
);
120 *minimum
= image_min
+ text_min
+ PAD
;
124 *natural
= image_nat
+ text_nat
+ PAD
;
129 anjuta_cell_renderer_captioned_image_get_preferred_width (GtkCellRenderer
*gtk_cell
,
139 AnjutaCellRendererCaptionedImage
*cell
= ANJUTA_CELL_RENDERER_CAPTIONED_IMAGE (gtk_cell
);
141 gtk_cell_renderer_get_preferred_width (cell
->image
, widget
, &image_min
, &image_nat
);
143 gtk_cell_renderer_get_preferred_width (cell
->caption
, widget
,
144 &text_min
, &text_nat
);
148 *minimum
= MAX (image_min
, text_min
);
149 *minimum
+= SPACE
* 2;
153 *natural
= MAX (image_nat
, text_nat
);
154 *natural
+= SPACE
* 2;
159 anjuta_cell_renderer_captioned_image_render (GtkCellRenderer
*gtk_cell
,
162 const GdkRectangle
*background_area
,
163 const GdkRectangle
*cell_area
,
164 GtkCellRendererState flags
)
167 AnjutaCellRendererCaptionedImage
*cell
= ANJUTA_CELL_RENDERER_CAPTIONED_IMAGE (gtk_cell
);
168 GdkRectangle text_area
;
169 GdkRectangle pixbuf_area
;
172 gtk_cell_renderer_get_preferred_width (cell
->image
, widget
, NULL
, &width
);
173 gtk_cell_renderer_get_preferred_height (cell
->image
, widget
, NULL
, &height
);
175 pixbuf_area
.y
= cell_area
->y
;
176 pixbuf_area
.x
= cell_area
->x
;
177 pixbuf_area
.height
= height
;
178 pixbuf_area
.width
= cell_area
->width
;
180 gtk_cell_renderer_get_preferred_width (cell
->caption
, widget
, NULL
, &width
);
181 gtk_cell_renderer_get_preferred_height (cell
->caption
, widget
, NULL
, &height
);
183 text_area
.x
= cell_area
->x
+ (cell_area
->width
- width
) / 2;
184 text_area
.y
= cell_area
->y
+ (pixbuf_area
.height
+ PAD
);
185 text_area
.height
= height
;
186 text_area
.width
= width
;
188 gtk_cell_renderer_render (cell
->image
, cr
, widget
,
189 background_area
, &pixbuf_area
, flags
);
191 gtk_cell_renderer_render (cell
->caption
, cr
, widget
,
192 background_area
, &text_area
, flags
);
196 anjuta_cell_renderer_captioned_image_dispose (GObject
*obj
)
198 AnjutaCellRendererCaptionedImage
*cell
= ANJUTA_CELL_RENDERER_CAPTIONED_IMAGE (obj
);
200 g_object_unref (cell
->image
);
201 g_object_unref (cell
->caption
);
203 G_OBJECT_CLASS (anjuta_cell_renderer_captioned_image_parent_class
)->dispose (obj
);
207 anjuta_cell_renderer_captioned_image_finalize (GObject
*obj
)
209 G_OBJECT_CLASS (anjuta_cell_renderer_captioned_image_parent_class
)->finalize (obj
);
213 anjuta_cell_renderer_captioned_image_init (AnjutaCellRendererCaptionedImage
*cell
)
215 cell
->image
= gtk_cell_renderer_pixbuf_new ();
216 cell
->caption
= gtk_cell_renderer_text_new ();
220 anjuta_cell_renderer_captioned_image_class_init (AnjutaCellRendererCaptionedImageClass
*class)
222 GObjectClass
*object_class
= G_OBJECT_CLASS (class);
223 GtkCellRendererClass
*cell_class
= GTK_CELL_RENDERER_CLASS (class);
225 object_class
->dispose
= anjuta_cell_renderer_captioned_image_dispose
;
226 object_class
->finalize
= anjuta_cell_renderer_captioned_image_finalize
;
228 object_class
->get_property
= anjuta_cell_renderer_captioned_image_get_property
;
229 object_class
->set_property
= anjuta_cell_renderer_captioned_image_set_property
;
231 cell_class
->get_preferred_height
= anjuta_cell_renderer_captioned_image_get_preferred_height
;
232 cell_class
->get_preferred_width
= anjuta_cell_renderer_captioned_image_get_preferred_width
;
234 cell_class
->render
= anjuta_cell_renderer_captioned_image_render
;
236 g_object_class_install_property (object_class
,
238 g_param_spec_string ("text",
243 g_object_class_install_property (object_class
,
245 g_param_spec_object ("pixbuf",
247 _("The pixbuf to render."),