forked from AuroraMiddleware/gtk
cssnode: Only recreate styles when needed
This commit is contained in:
parent
219e52f7e1
commit
caf2fc9a10
@ -19,10 +19,15 @@
|
|||||||
|
|
||||||
#include "gtkcssnodeprivate.h"
|
#include "gtkcssnodeprivate.h"
|
||||||
|
|
||||||
|
#include "gtkcssanimatedstyleprivate.h"
|
||||||
#include "gtkcsstransientnodeprivate.h"
|
#include "gtkcsstransientnodeprivate.h"
|
||||||
#include "gtkdebug.h"
|
#include "gtkdebug.h"
|
||||||
#include "gtksettingsprivate.h"
|
#include "gtksettingsprivate.h"
|
||||||
|
|
||||||
|
/* When these change we do a full restyling. Otherwise we try to figure out
|
||||||
|
* if we need to change things. */
|
||||||
|
#define GTK_CSS_RADICAL_CHANGE (GTK_CSS_CHANGE_NAME | GTK_CSS_CHANGE_CLASS | GTK_CSS_CHANGE_SOURCE)
|
||||||
|
|
||||||
G_DEFINE_TYPE (GtkCssNode, gtk_css_node, G_TYPE_OBJECT)
|
G_DEFINE_TYPE (GtkCssNode, gtk_css_node, G_TYPE_OBJECT)
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -222,11 +227,31 @@ gtk_css_node_create_style (GtkCssNode *cssnode)
|
|||||||
return style;
|
return style;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gtk_css_style_needs_recreation (GtkCssStyle *style,
|
||||||
|
GtkCssChange change)
|
||||||
|
{
|
||||||
|
/* Try to avoid invalidating if we can */
|
||||||
|
if (change & GTK_CSS_RADICAL_CHANGE)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
if (GTK_IS_CSS_ANIMATED_STYLE (style))
|
||||||
|
style = GTK_CSS_ANIMATED_STYLE (style)->style;
|
||||||
|
|
||||||
|
if (gtk_css_static_style_get_change (GTK_CSS_STATIC_STYLE (style)) & change)
|
||||||
|
return TRUE;
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static GtkCssStyle *
|
static GtkCssStyle *
|
||||||
gtk_css_node_real_update_style (GtkCssNode *cssnode,
|
gtk_css_node_real_update_style (GtkCssNode *cssnode,
|
||||||
GtkCssChange pending_change,
|
GtkCssChange pending_change,
|
||||||
GtkCssStyle *old_style)
|
GtkCssStyle *old_style)
|
||||||
{
|
{
|
||||||
|
if (!gtk_css_style_needs_recreation (old_style, pending_change))
|
||||||
|
return g_object_ref (old_style);
|
||||||
|
|
||||||
return gtk_css_node_create_style (cssnode);
|
return gtk_css_node_create_style (cssnode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user