* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include "gtkmodifierstyle.h"
+#include "gtkstyleproviderprivate.h"
#include "gtkintl.h"
-typedef struct GtkModifierStylePrivate GtkModifierStylePrivate;
typedef struct StylePropertyValue StylePropertyValue;
-struct GtkModifierStylePrivate
+struct _GtkModifierStylePrivate
{
GtkStyleProperties *style;
GHashTable *color_properties;
static guint signals [LAST_SIGNAL] = { 0 };
-static void gtk_modifier_style_provider_init (GtkStyleProviderIface *iface);
-static void gtk_modifier_style_finalize (GObject *object);
+static void gtk_modifier_style_provider_init (GtkStyleProviderIface *iface);
+static void gtk_modifier_style_provider_private_init (GtkStyleProviderPrivateInterface *iface);
+static void gtk_modifier_style_finalize (GObject *object);
-G_DEFINE_TYPE_EXTENDED (GtkModifierStyle, gtk_modifier_style, G_TYPE_OBJECT, 0,
+G_DEFINE_TYPE_EXTENDED (GtkModifierStyle, _gtk_modifier_style, G_TYPE_OBJECT, 0,
G_IMPLEMENT_INTERFACE (GTK_TYPE_STYLE_PROVIDER,
- gtk_modifier_style_provider_init));
+ gtk_modifier_style_provider_init)
+ G_IMPLEMENT_INTERFACE (GTK_TYPE_STYLE_PROVIDER_PRIVATE,
+ gtk_modifier_style_provider_private_init));
static void
-gtk_modifier_style_class_init (GtkModifierStyleClass *klass)
+_gtk_modifier_style_class_init (GtkModifierStyleClass *klass)
{
GObjectClass *object_class;
}
static void
-gtk_modifier_style_init (GtkModifierStyle *modifier_style)
+_gtk_modifier_style_init (GtkModifierStyle *modifier_style)
{
GtkModifierStylePrivate *priv;
iface->get_style_property = gtk_modifier_style_get_style_property;
}
+static GtkSymbolicColor *
+gtk_modifier_style_provider_get_color (GtkStyleProviderPrivate *provider,
+ const char *name)
+{
+ GtkModifierStyle *style = GTK_MODIFIER_STYLE (provider);
+
+ return _gtk_style_provider_private_get_color (GTK_STYLE_PROVIDER_PRIVATE (style->priv->style), name);
+}
+
+static void
+gtk_modifier_style_provider_lookup (GtkStyleProviderPrivate *provider,
+ const GtkCssMatcher *matcher,
+ GtkCssLookup *lookup)
+{
+ GtkModifierStyle *style = GTK_MODIFIER_STYLE (provider);
+
+ _gtk_style_provider_private_lookup (GTK_STYLE_PROVIDER_PRIVATE (style->priv->style),
+ matcher,
+ lookup);
+}
+
+static GtkCssChange
+gtk_modifier_style_provider_get_change (GtkStyleProviderPrivate *provider,
+ const GtkCssMatcher *matcher)
+{
+ GtkModifierStyle *style = GTK_MODIFIER_STYLE (provider);
+
+ return _gtk_style_provider_private_get_change (GTK_STYLE_PROVIDER_PRIVATE (style->priv->style),
+ matcher);
+}
+
+static void
+gtk_modifier_style_provider_private_init (GtkStyleProviderPrivateInterface *iface)
+{
+ iface->get_color = gtk_modifier_style_provider_get_color;
+ iface->lookup = gtk_modifier_style_provider_lookup;
+ iface->get_change = gtk_modifier_style_provider_get_change;
+}
+
static void
gtk_modifier_style_finalize (GObject *object)
{
g_hash_table_destroy (priv->color_properties);
g_object_unref (priv->style);
- G_OBJECT_CLASS (gtk_modifier_style_parent_class)->finalize (object);
+ G_OBJECT_CLASS (_gtk_modifier_style_parent_class)->finalize (object);
}
GtkModifierStyle *
-gtk_modifier_style_new (void)
+_gtk_modifier_style_new (void)
{
return g_object_new (GTK_TYPE_MODIFIER_STYLE, NULL);
}
const GdkRGBA *color)
{
GtkModifierStylePrivate *priv;
- GdkRGBA *old_color;
g_return_if_fail (GTK_IS_MODIFIER_STYLE (style));
priv = style->priv;
- gtk_style_properties_get (priv->style, state,
- prop, &old_color,
- NULL);
-
- if ((!color && !old_color) ||
- (color && old_color && gdk_rgba_equal (color, old_color)))
- {
- gdk_rgba_free (old_color);
- return;
- }
if (color)
gtk_style_properties_set (priv->style, state,
gtk_style_properties_unset_property (priv->style, prop, state);
g_signal_emit (style, signals[CHANGED], 0);
- gdk_rgba_free (old_color);
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (style));
}
void
-gtk_modifier_style_set_background_color (GtkModifierStyle *style,
- GtkStateFlags state,
- const GdkRGBA *color)
+_gtk_modifier_style_set_background_color (GtkModifierStyle *style,
+ GtkStateFlags state,
+ const GdkRGBA *color)
{
g_return_if_fail (GTK_IS_MODIFIER_STYLE (style));
}
void
-gtk_modifier_style_set_color (GtkModifierStyle *style,
- GtkStateFlags state,
- const GdkRGBA *color)
+_gtk_modifier_style_set_color (GtkModifierStyle *style,
+ GtkStateFlags state,
+ const GdkRGBA *color)
{
g_return_if_fail (GTK_IS_MODIFIER_STYLE (style));
}
void
-gtk_modifier_style_set_font (GtkModifierStyle *style,
- const PangoFontDescription *font_desc)
+_gtk_modifier_style_set_font (GtkModifierStyle *style,
+ const PangoFontDescription *font_desc)
{
GtkModifierStylePrivate *priv;
- PangoFontDescription *old_font;
g_return_if_fail (GTK_IS_MODIFIER_STYLE (style));
priv = style->priv;
- gtk_style_properties_get (priv->style, 0,
- "font", &old_font,
- NULL);
-
- if ((!old_font && !font_desc) ||
- (old_font && font_desc &&
- pango_font_description_equal (old_font, font_desc)))
- return;
if (font_desc)
gtk_style_properties_set (priv->style, 0,
gtk_style_properties_unset_property (priv->style, "font", 0);
g_signal_emit (style, signals[CHANGED], 0);
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (style));
}
void
-gtk_modifier_style_map_color (GtkModifierStyle *style,
- const gchar *name,
- const GdkRGBA *color)
+_gtk_modifier_style_map_color (GtkModifierStyle *style,
+ const gchar *name,
+ const GdkRGBA *color)
{
GtkModifierStylePrivate *priv;
GtkSymbolicColor *symbolic_color = NULL;
name, symbolic_color);
g_signal_emit (style, signals[CHANGED], 0);
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (style));
}
void
-gtk_modifier_style_set_color_property (GtkModifierStyle *style,
- GType widget_type,
- const gchar *prop_name,
- const GdkRGBA *color)
+_gtk_modifier_style_set_color_property (GtkModifierStyle *style,
+ GType widget_type,
+ const gchar *prop_name,
+ const GdkRGBA *color)
{
GtkModifierStylePrivate *priv;
const GdkRGBA *old_color;
}
g_signal_emit (style, signals[CHANGED], 0);
+ _gtk_style_provider_private_changed (GTK_STYLE_PROVIDER_PRIVATE (style));
}