forked from AuroraMiddleware/gtk
cssnode: Create animated styles by default
... and hardcode transient and path nodes to never create animated styles.
This commit is contained in:
parent
f43543165b
commit
6dd19306eb
@ -206,6 +206,12 @@ gtk_css_node_create_style (GtkCssNode *cssnode)
|
|||||||
return style;
|
return style;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
should_create_transitions (GtkCssChange change)
|
||||||
|
{
|
||||||
|
return (change & GTK_CSS_CHANGE_ANIMATIONS) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gtk_css_style_needs_recreation (GtkCssStyle *style,
|
gtk_css_style_needs_recreation (GtkCssStyle *style,
|
||||||
GtkCssChange change)
|
GtkCssChange change)
|
||||||
@ -225,14 +231,53 @@ gtk_css_style_needs_recreation (GtkCssStyle *style,
|
|||||||
|
|
||||||
static GtkCssStyle *
|
static GtkCssStyle *
|
||||||
gtk_css_node_real_update_style (GtkCssNode *cssnode,
|
gtk_css_node_real_update_style (GtkCssNode *cssnode,
|
||||||
GtkCssChange pending_change,
|
GtkCssChange change,
|
||||||
gint64 timestamp,
|
gint64 timestamp,
|
||||||
GtkCssStyle *old_style)
|
GtkCssStyle *style)
|
||||||
{
|
{
|
||||||
if (!gtk_css_style_needs_recreation (old_style, pending_change))
|
GtkCssStyle *static_style, *new_static_style, *new_style;
|
||||||
return g_object_ref (old_style);
|
|
||||||
|
|
||||||
return gtk_css_node_create_style (cssnode);
|
if (GTK_IS_CSS_ANIMATED_STYLE (style))
|
||||||
|
{
|
||||||
|
static_style = GTK_CSS_ANIMATED_STYLE (style)->style;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
static_style = style;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gtk_css_style_needs_recreation (static_style, change))
|
||||||
|
new_static_style = gtk_css_node_create_style (cssnode);
|
||||||
|
else
|
||||||
|
new_static_style = g_object_ref (static_style);
|
||||||
|
|
||||||
|
if (new_static_style != static_style || (change & GTK_CSS_CHANGE_ANIMATIONS))
|
||||||
|
{
|
||||||
|
GtkCssNode *parent = gtk_css_node_get_parent (cssnode);
|
||||||
|
new_style = gtk_css_animated_style_new (new_static_style,
|
||||||
|
parent ? gtk_css_node_get_style (parent) : NULL,
|
||||||
|
timestamp,
|
||||||
|
gtk_css_node_get_style_provider (cssnode),
|
||||||
|
should_create_transitions (change) ? style : NULL);
|
||||||
|
}
|
||||||
|
else if (GTK_IS_CSS_ANIMATED_STYLE (style) && (change & GTK_CSS_CHANGE_TIMESTAMP))
|
||||||
|
{
|
||||||
|
new_style = gtk_css_animated_style_new_advance (GTK_CSS_ANIMATED_STYLE (style),
|
||||||
|
static_style,
|
||||||
|
timestamp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
new_style = g_object_ref (style);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GTK_IS_CSS_ANIMATED_STYLE (new_style) &&
|
||||||
|
!gtk_css_animated_style_is_static (GTK_CSS_ANIMATED_STYLE (new_style)))
|
||||||
|
gtk_css_node_set_invalid (cssnode, TRUE);
|
||||||
|
|
||||||
|
g_object_unref (new_static_style);
|
||||||
|
|
||||||
|
return new_style;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -101,6 +101,16 @@ gtk_css_path_node_real_get_widget_path (GtkCssNode *node)
|
|||||||
return path_node->path;
|
return path_node->path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GtkCssStyle *
|
||||||
|
gtk_css_path_node_update_style (GtkCssNode *cssnode,
|
||||||
|
GtkCssChange change,
|
||||||
|
gint64 timestamp,
|
||||||
|
GtkCssStyle *style)
|
||||||
|
{
|
||||||
|
/* This should get rid of animations */
|
||||||
|
return GTK_CSS_NODE_CLASS (gtk_css_path_node_parent_class)->update_style (cssnode, change, 0, style);
|
||||||
|
}
|
||||||
|
|
||||||
static GtkStyleProviderPrivate *
|
static GtkStyleProviderPrivate *
|
||||||
gtk_css_path_node_get_style_provider (GtkCssNode *node)
|
gtk_css_path_node_get_style_provider (GtkCssNode *node)
|
||||||
{
|
{
|
||||||
@ -121,6 +131,7 @@ gtk_css_path_node_class_init (GtkCssPathNodeClass *klass)
|
|||||||
object_class->finalize = gtk_css_path_node_finalize;
|
object_class->finalize = gtk_css_path_node_finalize;
|
||||||
|
|
||||||
node_class->invalidate = gtk_css_path_node_invalidate;
|
node_class->invalidate = gtk_css_path_node_invalidate;
|
||||||
|
node_class->update_style = gtk_css_path_node_update_style;
|
||||||
node_class->init_matcher = gtk_css_path_node_real_init_matcher;
|
node_class->init_matcher = gtk_css_path_node_real_init_matcher;
|
||||||
node_class->create_widget_path = gtk_css_path_node_real_create_widget_path;
|
node_class->create_widget_path = gtk_css_path_node_real_create_widget_path;
|
||||||
node_class->get_widget_path = gtk_css_path_node_real_get_widget_path;
|
node_class->get_widget_path = gtk_css_path_node_real_get_widget_path;
|
||||||
|
@ -52,6 +52,16 @@ gtk_css_transient_node_get_widget_path (GtkCssNode *node)
|
|||||||
return gtk_css_node_get_widget_path (parent);
|
return gtk_css_node_get_widget_path (parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GtkCssStyle *
|
||||||
|
gtk_css_transient_node_update_style (GtkCssNode *cssnode,
|
||||||
|
GtkCssChange change,
|
||||||
|
gint64 timestamp,
|
||||||
|
GtkCssStyle *style)
|
||||||
|
{
|
||||||
|
/* This should get rid of animations */
|
||||||
|
return GTK_CSS_NODE_CLASS (gtk_css_transient_node_parent_class)->update_style (cssnode, change, 0, style);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_css_transient_node_class_init (GtkCssTransientNodeClass *klass)
|
gtk_css_transient_node_class_init (GtkCssTransientNodeClass *klass)
|
||||||
{
|
{
|
||||||
@ -59,6 +69,7 @@ gtk_css_transient_node_class_init (GtkCssTransientNodeClass *klass)
|
|||||||
|
|
||||||
node_class->create_widget_path = gtk_css_transient_node_create_widget_path;
|
node_class->create_widget_path = gtk_css_transient_node_create_widget_path;
|
||||||
node_class->get_widget_path = gtk_css_transient_node_get_widget_path;
|
node_class->get_widget_path = gtk_css_transient_node_get_widget_path;
|
||||||
|
node_class->update_style = gtk_css_transient_node_update_style;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user