2
* Copyright (c) 2011 Red Hat, Inc.
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU Lesser General Public License as published by
6
* the Free Software Foundation; either version 2 of the License, or (at your
7
* option) any later version.
9
* This program is distributed in the hope that it will be useful, but
10
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
12
* License for more details.
14
* You should have received a copy of the GNU Lesser General Public License
15
* along with this program; if not, write to the Free Software Foundation,
16
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
* Author: Cosimo Cecchi <cosimoc@redhat.com>
22
#include "gd-styled-text-renderer.h"
24
G_DEFINE_TYPE (GdStyledTextRenderer, gd_styled_text_renderer, GTK_TYPE_CELL_RENDERER_TEXT);
26
struct _GdStyledTextRendererPrivate {
31
gd_styled_text_renderer_render (GtkCellRenderer *cell,
34
const GdkRectangle *background_area,
35
const GdkRectangle *cell_area,
36
GtkCellRendererState flags)
38
GdStyledTextRenderer *self = GD_STYLED_TEXT_RENDERER (cell);
39
GtkStyleContext *context;
40
const gchar *style_class;
43
context = gtk_widget_get_style_context (widget);
44
gtk_style_context_save (context);
46
for (l = self->priv->style_classes; l != NULL; l = l->next)
48
style_class = l->data;
49
gtk_style_context_add_class (context, style_class);
52
GTK_CELL_RENDERER_CLASS (gd_styled_text_renderer_parent_class)->render
54
background_area, cell_area, flags);
56
gtk_style_context_restore (context);
60
gd_styled_text_renderer_finalize (GObject *obj)
62
GdStyledTextRenderer *self = GD_STYLED_TEXT_RENDERER (obj);
64
if (self->priv->style_classes != NULL)
66
g_list_free_full (self->priv->style_classes, g_free);
67
self->priv->style_classes = NULL;
70
G_OBJECT_CLASS (gd_styled_text_renderer_parent_class)->finalize (obj);
74
gd_styled_text_renderer_class_init (GdStyledTextRendererClass *klass)
76
GtkCellRendererClass *crclass = GTK_CELL_RENDERER_CLASS (klass);
77
GObjectClass *oclass = G_OBJECT_CLASS (klass);
79
oclass->finalize = gd_styled_text_renderer_finalize;
80
crclass->render = gd_styled_text_renderer_render;
82
g_type_class_add_private (klass, sizeof (GdStyledTextRendererPrivate));
86
gd_styled_text_renderer_init (GdStyledTextRenderer *self)
88
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GD_TYPE_STYLED_TEXT_RENDERER,
89
GdStyledTextRendererPrivate);
93
gd_styled_text_renderer_new (void)
95
return g_object_new (GD_TYPE_STYLED_TEXT_RENDERER,
100
gd_styled_text_renderer_add_class (GdStyledTextRenderer *self,
103
if (g_list_find_custom (self->priv->style_classes, class, (GCompareFunc) g_strcmp0))
106
self->priv->style_classes = g_list_append (self->priv->style_classes, g_strdup (class));
110
gd_styled_text_renderer_remove_class (GdStyledTextRenderer *self,
113
GList *class_element;
115
class_element = g_list_find_custom (self->priv->style_classes, class, (GCompareFunc) g_strcmp0);
117
if (class_element == NULL)
120
self->priv->style_classes = g_list_remove_link (self->priv->style_classes,
122
g_free (class_element->data);
123
g_list_free_1 (class_element);