Updated Makefile.am files after make -f git.mk
[anjuta.git] / libanjuta / anjuta-cell-renderer-captioned-image.c
blobbf96633fe854042ff24fb95c3e79764d47a7d7c0
1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 8 -*- */
2 /*
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.
21 /**
22 * SECTION:cell-renderer-captioned-image
23 * @short_description: Captioned image cell renderer
24 * @see_also:
25 * @stability: Unstable
26 * @include: libanjuta/anjuta-cell-renderer-captioned-image.h
30 #include <stdlib.h>
31 #include <glib/gi18n.h>
33 #include "anjuta-cell-renderer-captioned-image.h"
35 enum {
36 PROP_0,
38 PROP_TEXT,
39 PROP_PIXBUF
42 #define PAD 3
43 #define SPACE 5
45 G_DEFINE_TYPE(AnjutaCellRendererCaptionedImage, anjuta_cell_renderer_captioned_image, GTK_TYPE_CELL_RENDERER)
47 static void
48 anjuta_cell_renderer_captioned_image_get_property (GObject *object,
49 guint param_id,
50 GValue *value,
51 GParamSpec *pspec)
53 AnjutaCellRendererCaptionedImage *cell = ANJUTA_CELL_RENDERER_CAPTIONED_IMAGE (object);
55 switch (param_id) {
56 case PROP_TEXT:
57 g_object_get_property (G_OBJECT (cell->caption),
58 "text", value);
59 break;
60 case PROP_PIXBUF:
61 g_object_get_property (G_OBJECT (cell->image),
62 "pixbuf", value);
63 break;
64 default :
65 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
66 break;
70 static void
71 anjuta_cell_renderer_captioned_image_set_property (GObject *object,
72 guint param_id,
73 const GValue *value,
74 GParamSpec *pspec)
76 AnjutaCellRendererCaptionedImage *cell = ANJUTA_CELL_RENDERER_CAPTIONED_IMAGE (object);
78 switch (param_id) {
79 case PROP_TEXT:
80 g_object_set_property (G_OBJECT (cell->caption), "text", value);
81 break;
83 case PROP_PIXBUF:
84 g_object_set_property (G_OBJECT (cell->image), "pixbuf",
85 value);
86 break;
88 default:
89 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
90 break;
94 GtkCellRenderer *
95 anjuta_cell_renderer_captioned_image_new (void)
97 return GTK_CELL_RENDERER (g_object_new (anjuta_cell_renderer_captioned_image_get_type (), NULL));
100 static void
101 anjuta_cell_renderer_captioned_image_get_preferred_height (GtkCellRenderer *gtk_cell,
102 GtkWidget *widget,
103 gint *minimum,
104 gint *natural)
106 gint text_min;
107 gint text_nat;
108 gint image_min;
109 gint image_nat;
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);
119 if (minimum) {
120 *minimum = image_min + text_min + PAD;
123 if (natural) {
124 *natural = image_nat + text_nat + PAD;
128 static void
129 anjuta_cell_renderer_captioned_image_get_preferred_width (GtkCellRenderer *gtk_cell,
130 GtkWidget *widget,
131 gint *minimum,
132 gint *natural)
134 gint text_min;
135 gint text_nat;
136 gint image_min;
137 gint image_nat;
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);
147 if (minimum) {
148 *minimum = MAX (image_min, text_min);
149 *minimum += SPACE * 2;
152 if (natural) {
153 *natural = MAX (image_nat, text_nat);
154 *natural += SPACE * 2;
158 static void
159 anjuta_cell_renderer_captioned_image_render (GtkCellRenderer *gtk_cell,
160 cairo_t *cr,
161 GtkWidget *widget,
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;
170 gint width, height;
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);
195 static void
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);
206 static void
207 anjuta_cell_renderer_captioned_image_finalize (GObject *obj)
209 G_OBJECT_CLASS (anjuta_cell_renderer_captioned_image_parent_class)->finalize (obj);
212 static void
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 ();
219 static void
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,
237 PROP_TEXT,
238 g_param_spec_string ("text",
239 _("Text"),
240 _("Text to render"),
241 NULL,
242 G_PARAM_READWRITE));
243 g_object_class_install_property (object_class,
244 PROP_PIXBUF,
245 g_param_spec_object ("pixbuf",
246 _("Pixbuf Object"),
247 _("The pixbuf to render."),
248 GDK_TYPE_PIXBUF,
249 G_PARAM_READWRITE));