mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-07 09:10:11 +00:00
stylecontext: Split out a function for simplicity
This commit is contained in:
parent
9b228c59d5
commit
5d2acb1fe9
@ -3027,6 +3027,43 @@ gtk_style_context_start_animations (GtkStyleContext *context,
|
||||
gtk_style_context_start_animating (context);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_style_context_needs_full_revalidate (GtkStyleContext *context,
|
||||
GtkCssChange change)
|
||||
{
|
||||
GtkStyleContextPrivate *priv = context->priv;
|
||||
|
||||
/* Try to avoid invalidating if we can */
|
||||
if (change & GTK_STYLE_CONTEXT_RADICAL_CHANGE)
|
||||
{
|
||||
priv->relevant_changes = GTK_CSS_CHANGE_ANY;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (priv->relevant_changes == GTK_CSS_CHANGE_ANY)
|
||||
{
|
||||
GtkWidgetPath *path;
|
||||
GtkCssMatcher matcher;
|
||||
|
||||
path = create_query_path (context);
|
||||
if (_gtk_css_matcher_init (&matcher, path, priv->info->state_flags))
|
||||
priv->relevant_changes = _gtk_style_provider_private_get_change (GTK_STYLE_PROVIDER_PRIVATE (priv->cascade),
|
||||
&matcher);
|
||||
else
|
||||
priv->relevant_changes = 0;
|
||||
|
||||
priv->relevant_changes &= ~GTK_STYLE_CONTEXT_RADICAL_CHANGE;
|
||||
|
||||
gtk_widget_path_unref (path);
|
||||
}
|
||||
}
|
||||
|
||||
if (priv->relevant_changes & change)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
_gtk_style_context_validate (GtkStyleContext *context,
|
||||
gint64 timestamp,
|
||||
@ -3065,31 +3102,7 @@ _gtk_style_context_validate (GtkStyleContext *context,
|
||||
gtk_style_context_set_invalid (context, FALSE);
|
||||
|
||||
/* Try to avoid invalidating if we can */
|
||||
if (change & GTK_STYLE_CONTEXT_RADICAL_CHANGE)
|
||||
{
|
||||
priv->relevant_changes = GTK_CSS_CHANGE_ANY;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (priv->relevant_changes == GTK_CSS_CHANGE_ANY)
|
||||
{
|
||||
GtkWidgetPath *path;
|
||||
GtkCssMatcher matcher;
|
||||
|
||||
path = create_query_path (context);
|
||||
if (_gtk_css_matcher_init (&matcher, path, priv->info->state_flags))
|
||||
priv->relevant_changes = _gtk_style_provider_private_get_change (GTK_STYLE_PROVIDER_PRIVATE (priv->cascade),
|
||||
&matcher);
|
||||
else
|
||||
priv->relevant_changes = 0;
|
||||
|
||||
priv->relevant_changes &= ~GTK_STYLE_CONTEXT_RADICAL_CHANGE;
|
||||
|
||||
gtk_widget_path_unref (path);
|
||||
}
|
||||
}
|
||||
|
||||
if (priv->relevant_changes & change)
|
||||
if (gtk_style_context_needs_full_revalidate (context, change))
|
||||
{
|
||||
GtkStyleInfo *info = priv->info;
|
||||
StyleData *current;
|
||||
|
Loading…
Reference in New Issue
Block a user