]> Pileus Git - ~andy/gtk/blob - gtk/gtkstyleproviderprivate.c
stylecontext: Do invalidation on first resize container
[~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 static 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 GtkCssValue *
48 _gtk_style_provider_private_get_color (GtkStyleProviderPrivate *provider,
49                                        const char              *name)
50 {
51   GtkStyleProviderPrivateInterface *iface;
52
53   /* for compat with gtk_symbolic_color_resolve() */
54   if (provider == NULL)
55     return NULL;
56
57   g_return_val_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider), NULL);
58
59   iface = GTK_STYLE_PROVIDER_PRIVATE_GET_INTERFACE (provider);
60
61   if (!iface->get_color)
62     return NULL;
63
64   return iface->get_color (provider, name);
65 }
66
67 GtkCssKeyframes *
68 _gtk_style_provider_private_get_keyframes (GtkStyleProviderPrivate *provider,
69                                            const char              *name)
70 {
71   GtkStyleProviderPrivateInterface *iface;
72
73   g_return_val_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider), NULL);
74   g_return_val_if_fail (name != NULL, NULL);
75
76   iface = GTK_STYLE_PROVIDER_PRIVATE_GET_INTERFACE (provider);
77
78   if (!iface->get_keyframes)
79     return NULL;
80
81   return iface->get_keyframes (provider, name);
82 }
83
84 void
85 _gtk_style_provider_private_lookup (GtkStyleProviderPrivate *provider,
86                                     const GtkCssMatcher     *matcher,
87                                     GtkCssLookup            *lookup)
88 {
89   GtkStyleProviderPrivateInterface *iface;
90
91   g_return_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider));
92   g_return_if_fail (matcher != NULL);
93   g_return_if_fail (lookup != NULL);
94
95   iface = GTK_STYLE_PROVIDER_PRIVATE_GET_INTERFACE (provider);
96
97   if (!iface->lookup)
98     return;
99
100   iface->lookup (provider, matcher, lookup);
101 }
102
103 GtkCssChange
104 _gtk_style_provider_private_get_change (GtkStyleProviderPrivate *provider,
105                                         const GtkCssMatcher     *matcher)
106 {
107   GtkStyleProviderPrivateInterface *iface;
108
109   g_return_val_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider), GTK_CSS_CHANGE_ANY);
110   g_return_val_if_fail (matcher != NULL, GTK_CSS_CHANGE_ANY);
111
112   iface = GTK_STYLE_PROVIDER_PRIVATE_GET_INTERFACE (provider);
113
114   if (!iface->get_change)
115     return GTK_CSS_CHANGE_ANY;
116
117   return iface->get_change (provider, matcher);
118 }
119
120 void
121 _gtk_style_provider_private_changed (GtkStyleProviderPrivate *provider)
122 {
123   g_return_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider));
124
125   g_signal_emit (provider, signals[CHANGED], 0);
126 }
127
128 GtkSettings *
129 _gtk_style_provider_private_get_settings (GtkStyleProviderPrivate *provider)
130 {
131   GtkStyleProviderPrivateInterface *iface;
132
133   g_return_val_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider), NULL);
134
135   iface = GTK_STYLE_PROVIDER_PRIVATE_GET_INTERFACE (provider);
136
137   if (!iface->get_settings)
138     return NULL;
139
140   return iface->get_settings (provider);
141 }
142