]> Pileus Git - ~andy/gtk/blob - gtk/gtkstyleproviderprivate.c
a646201950da5e12ecbe607170c16f750a089a0b
[~andy/gtk] / gtk / gtkstyleproviderprivate.c
1 /* GTK - The GIMP Toolkit
2  * Copyright (C) 2011 Benjamin Otte <otte@gnome.org>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser 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  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16  */
17
18 #include "config.h"
19
20 #include "gtkstyleproviderprivate.h"
21
22 #include "gtkintl.h"
23 #include "gtkstyleprovider.h"
24
25 enum {
26   CHANGED,
27   LAST_SIGNAL
28 };
29
30 G_DEFINE_INTERFACE (GtkStyleProviderPrivate, _gtk_style_provider_private, GTK_TYPE_STYLE_PROVIDER)
31
32 guint signals[LAST_SIGNAL];
33
34 static void
35 _gtk_style_provider_private_default_init (GtkStyleProviderPrivateInterface *iface)
36 {
37   signals[CHANGED] = g_signal_new (I_("-gtk-private-changed"),
38                                    G_TYPE_FROM_INTERFACE (iface),
39                                    G_SIGNAL_RUN_LAST,
40                                    G_STRUCT_OFFSET (GtkStyleProviderPrivateInterface, changed),
41                                    NULL, NULL,
42                                    g_cclosure_marshal_VOID__VOID,
43                                    G_TYPE_NONE, 0);
44
45 }
46
47 GtkSymbolicColor *
48 _gtk_style_provider_private_get_color (GtkStyleProviderPrivate *provider,
49                                        const char              *name)
50 {
51   GtkStyleProviderPrivateInterface *iface;
52
53   g_return_val_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider), NULL);
54
55   iface = GTK_STYLE_PROVIDER_PRIVATE_GET_INTERFACE (provider);
56
57   if (!iface->get_color)
58     return NULL;
59
60   return iface->get_color (provider, name);
61 }
62
63 void
64 _gtk_style_provider_private_lookup (GtkStyleProviderPrivate *provider,
65                                     const GtkCssMatcher     *matcher,
66                                     GtkCssLookup            *lookup)
67 {
68   GtkStyleProviderPrivateInterface *iface;
69
70   g_return_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider));
71   g_return_if_fail (matcher != NULL);
72   g_return_if_fail (lookup != NULL);
73
74   iface = GTK_STYLE_PROVIDER_PRIVATE_GET_INTERFACE (provider);
75
76   if (!iface->lookup)
77     return;
78
79   iface->lookup (provider, matcher, lookup);
80 }
81
82 GtkCssChange
83 _gtk_style_provider_private_get_change (GtkStyleProviderPrivate *provider,
84                                         const GtkCssMatcher     *matcher)
85 {
86   GtkStyleProviderPrivateInterface *iface;
87
88   g_return_val_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider), GTK_CSS_CHANGE_ANY);
89   g_return_val_if_fail (matcher != NULL, GTK_CSS_CHANGE_ANY);
90
91   iface = GTK_STYLE_PROVIDER_PRIVATE_GET_INTERFACE (provider);
92
93   if (!iface->get_change)
94     return GTK_CSS_CHANGE_ANY;
95
96   return iface->get_change (provider, matcher);
97 }
98
99 void
100 _gtk_style_provider_private_changed (GtkStyleProviderPrivate *provider)
101 {
102   g_return_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider));
103
104   g_signal_emit (provider, signals[CHANGED], 0);
105 }
106