static void gtk_style_cascade_lookup (GtkStyleProviderPrivate *provider, const GtkCssMatcher *matcher, GtkCssLookup *lookup) { GtkStyleCascade *cascade = GTK_STYLE_CASCADE (provider); GtkStyleCascadeIter iter; GtkStyleProvider *item; for (item = gtk_style_cascade_iter_init (cascade, &iter); item; item = gtk_style_cascade_iter_next (cascade, &iter)) { if (GTK_IS_STYLE_PROVIDER_PRIVATE (item)) { _gtk_style_provider_private_lookup (GTK_STYLE_PROVIDER_PRIVATE (item), matcher, lookup); } else { /* you lose */ g_warn_if_reached (); } } }
static gboolean gtk_style_cascade_get_style_property (GtkStyleProvider *provider, GtkWidgetPath *path, GtkStateFlags state, GParamSpec *pspec, GValue *value) { GtkStyleCascade *cascade = GTK_STYLE_CASCADE (provider); GtkStyleCascadeIter iter; GtkStyleProvider *item; for (item = gtk_style_cascade_iter_init (cascade, &iter); item; item = gtk_style_cascade_iter_next (cascade, &iter)) { if (gtk_style_provider_get_style_property (item, path, state, pspec, value)) return TRUE; } return FALSE; }
static GtkCssChange gtk_style_cascade_get_change (GtkStyleProviderPrivate *provider, const GtkCssMatcher *matcher) { GtkStyleCascade *cascade = GTK_STYLE_CASCADE (provider); GtkStyleCascadeIter iter; GtkStyleProvider *item; GtkCssChange change = 0; for (item = gtk_style_cascade_iter_init (cascade, &iter); item; item = gtk_style_cascade_iter_next (cascade, &iter)) { if (GTK_IS_STYLE_PROVIDER_PRIVATE (item)) { change |= _gtk_style_provider_private_get_change (GTK_STYLE_PROVIDER_PRIVATE (item), matcher); } else { g_return_val_if_reached (GTK_CSS_CHANGE_ANY); } } return change; }
static GtkCssValue * gtk_style_cascade_get_color (GtkStyleProviderPrivate *provider, const char *name) { GtkStyleCascade *cascade = GTK_STYLE_CASCADE (provider); GtkStyleCascadeIter iter; GtkCssValue *color; GtkStyleProvider *item; for (item = gtk_style_cascade_iter_init (cascade, &iter); item; item = gtk_style_cascade_iter_next (cascade, &iter)) { if (GTK_IS_STYLE_PROVIDER_PRIVATE (item)) { color = _gtk_style_provider_private_get_color (GTK_STYLE_PROVIDER_PRIVATE (item), name); if (color) return color; } else { /* If somebody hits this code path, shout at them */ } } return NULL; }
static void gtk_style_cascade_lookup (GtkStyleProviderPrivate *provider, const GtkCssMatcher *matcher, GtkCssLookup *lookup, GtkCssChange *change) { GtkStyleCascade *cascade = GTK_STYLE_CASCADE (provider); GtkStyleCascadeIter iter; GtkStyleProvider *item; GtkCssChange iter_change; for (item = gtk_style_cascade_iter_init (cascade, &iter); item; item = gtk_style_cascade_iter_next (cascade, &iter)) { GtkStyleProviderPrivate *sp = (GtkStyleProviderPrivate*)item; if (GTK_IS_STYLE_PROVIDER_PRIVATE (sp)) { _gtk_style_provider_private_lookup (sp, matcher, lookup, change ? &iter_change : NULL); if (change) *change |= iter_change; } else { /* you lose */ g_warn_if_reached (); } } gtk_style_cascade_iter_clear (&iter); }
static GtkCssKeyframes * gtk_style_cascade_get_keyframes (GtkStyleProviderPrivate *provider, const char *name) { GtkStyleCascade *cascade = GTK_STYLE_CASCADE (provider); GtkStyleCascadeIter iter; GtkCssKeyframes *keyframes; GtkStyleProvider *item; for (item = gtk_style_cascade_iter_init (cascade, &iter); item; item = gtk_style_cascade_iter_next (cascade, &iter)) { if (!GTK_IS_STYLE_PROVIDER_PRIVATE (item)) continue; keyframes = _gtk_style_provider_private_get_keyframes (GTK_STYLE_PROVIDER_PRIVATE (item), name); if (keyframes) { gtk_style_cascade_iter_clear (&iter); return keyframes; } } gtk_style_cascade_iter_clear (&iter); return NULL; }
static int gtk_style_cascade_get_scale (GtkStyleProviderPrivate *provider) { GtkStyleCascade *cascade = GTK_STYLE_CASCADE (provider); return cascade->scale; }
static GtkSettings * gtk_style_cascade_get_settings (GtkStyleProviderPrivate *provider) { GtkStyleCascade *cascade = GTK_STYLE_CASCADE (provider); GtkStyleCascadeIter iter; GtkSettings *settings; GtkStyleProvider *item; for (item = gtk_style_cascade_iter_init (cascade, &iter); item; item = gtk_style_cascade_iter_next (cascade, &iter)) { if (!GTK_IS_STYLE_PROVIDER_PRIVATE (item)) continue; settings = _gtk_style_provider_private_get_settings (GTK_STYLE_PROVIDER_PRIVATE (item)); if (settings) { gtk_style_cascade_iter_clear (&iter); return settings; } } gtk_style_cascade_iter_clear (&iter); return NULL; }
static void gtk_style_cascade_dispose (GObject *object) { GtkStyleCascade *cascade = GTK_STYLE_CASCADE (object); _gtk_style_cascade_set_parent (cascade, NULL); g_array_unref (cascade->providers); G_OBJECT_CLASS (_gtk_style_cascade_parent_class)->dispose (object); }