[gtk+/wip/cssstyle: 22/27] cssstaticstyle: Move function
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/cssstyle: 22/27] cssstaticstyle: Move function
- Date: Wed, 24 Dec 2014 02:21:14 +0000 (UTC)
commit b957a3edb361c157395080f908cb867921322c91
Author: Benjamin Otte <otte redhat com>
Date: Wed Dec 17 13:22:03 2014 +0100
cssstaticstyle: Move function
And with that move, GtkCssStaticStyle is immutable.
gtk/gtkcssstaticstyle.c | 70 +++++++++++++++++++++++++++++----------
gtk/gtkcssstaticstyleprivate.h | 8 +++-
gtk/gtkstylecontext.c | 33 ++++++-------------
3 files changed, 68 insertions(+), 43 deletions(-)
---
diff --git a/gtk/gtkcssstaticstyle.c b/gtk/gtkcssstaticstyle.c
index 2819fdb..d34deb0 100644
--- a/gtk/gtkcssstaticstyle.c
+++ b/gtk/gtkcssstaticstyle.c
@@ -208,35 +208,69 @@ gtk_css_static_style_new_compute (GtkStyleProviderPrivate *provider,
}
GtkCssStyle *
-gtk_css_static_style_copy (GtkCssStaticStyle *original,
- const GtkBitmask *properties_to_not_copy)
+gtk_css_static_style_new_update (GtkCssStaticStyle *style,
+ const GtkBitmask *parent_changes,
+ GtkStyleProviderPrivate *provider,
+ const GtkCssMatcher *matcher,
+ int scale,
+ GtkCssStyle *parent)
{
- GtkCssStaticStyle *copy;
+ GtkCssStaticStyle *result;
+ GtkCssLookup *lookup;
+ GtkBitmask *changes;
guint i;
- copy = g_object_new (GTK_TYPE_CSS_STATIC_STYLE, NULL);
+ gtk_internal_return_val_if_fail (GTK_IS_CSS_STATIC_STYLE (style), NULL);
+ gtk_internal_return_val_if_fail (parent_changes != NULL, NULL);
+ gtk_internal_return_val_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider), NULL);
+ gtk_internal_return_val_if_fail (matcher != NULL, NULL);
- copy->depends_on_parent = _gtk_bitmask_subtract (_gtk_bitmask_union (copy->depends_on_parent,
original->depends_on_parent),
- properties_to_not_copy);
- copy->equals_parent = _gtk_bitmask_subtract (_gtk_bitmask_union (copy->equals_parent,
original->equals_parent),
- properties_to_not_copy);
- copy->depends_on_color = _gtk_bitmask_subtract (_gtk_bitmask_union (copy->depends_on_color,
original->depends_on_color),
- properties_to_not_copy);
- copy->depends_on_font_size = _gtk_bitmask_subtract (_gtk_bitmask_union (copy->depends_on_font_size,
original->depends_on_font_size),
- properties_to_not_copy);
+ changes = gtk_css_style_compute_dependencies (GTK_CSS_STYLE (style), parent_changes);
+ if (_gtk_bitmask_is_empty (changes))
+ {
+ _gtk_bitmask_free (changes);
+ return g_object_ref (style);
+ }
- for (i = 0; i < original->values->len; i++)
+ result = g_object_new (GTK_TYPE_CSS_STATIC_STYLE, NULL);
+
+ result->depends_on_parent = _gtk_bitmask_subtract (_gtk_bitmask_union (result->depends_on_parent,
style->depends_on_parent),
+ changes);
+ result->equals_parent = _gtk_bitmask_subtract (_gtk_bitmask_union (result->equals_parent,
style->equals_parent),
+ changes);
+ result->depends_on_color = _gtk_bitmask_subtract (_gtk_bitmask_union (result->depends_on_color,
style->depends_on_color),
+ changes);
+ result->depends_on_font_size = _gtk_bitmask_subtract (_gtk_bitmask_union (result->depends_on_font_size,
style->depends_on_font_size),
+ changes);
+
+ for (i = 0; i < style->values->len; i++)
{
- if (_gtk_bitmask_get (properties_to_not_copy, i))
+ if (_gtk_bitmask_get (changes, i))
continue;
- gtk_css_static_style_set_value (copy,
+ gtk_css_static_style_set_value (result,
i,
- gtk_css_static_style_get_value (GTK_CSS_STYLE (original), i),
- gtk_css_static_style_get_section (GTK_CSS_STYLE (original), i));
+ gtk_css_static_style_get_value (GTK_CSS_STYLE (style), i),
+ gtk_css_static_style_get_section (GTK_CSS_STYLE (style), i));
}
- return GTK_CSS_STYLE (copy);
+ lookup = _gtk_css_lookup_new (changes);
+
+ _gtk_style_provider_private_lookup (provider,
+ matcher,
+ lookup,
+ NULL);
+
+ _gtk_css_lookup_resolve (lookup,
+ provider,
+ scale,
+ result,
+ parent);
+
+ _gtk_css_lookup_free (lookup);
+ _gtk_bitmask_free (changes);
+
+ return GTK_CSS_STYLE (result);
}
void
diff --git a/gtk/gtkcssstaticstyleprivate.h b/gtk/gtkcssstaticstyleprivate.h
index 09e2818..cdd0207 100644
--- a/gtk/gtkcssstaticstyleprivate.h
+++ b/gtk/gtkcssstaticstyleprivate.h
@@ -60,8 +60,12 @@ GtkCssStyle * gtk_css_static_style_new_compute (GtkStyleProvide
int scale,
GtkCssStyle *parent,
GtkCssChange *out_change);
-GtkCssStyle * gtk_css_static_style_copy (GtkCssStaticStyle *original,
- const GtkBitmask *properties_to_not_copy);
+GtkCssStyle * gtk_css_static_style_new_update (GtkCssStaticStyle *style,
+ const GtkBitmask *parent_changes,
+ GtkStyleProviderPrivate *provider,
+ const GtkCssMatcher *matcher,
+ int scale,
+ GtkCssStyle *parent);
void gtk_css_static_style_compute_value (GtkCssStaticStyle *style,
GtkStyleProviderPrivate*provider,
diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c
index a9bdcc5..bed3522 100644
--- a/gtk/gtkstylecontext.c
+++ b/gtk/gtkstylecontext.c
@@ -678,38 +678,25 @@ update_properties (GtkStyleContext *context,
GtkStyleContextPrivate *priv;
GtkCssMatcher matcher;
GtkWidgetPath *path;
- GtkCssLookup *lookup;
- GtkBitmask *changes;
GtkCssStyle *result;
priv = context->priv;
- changes = gtk_css_style_compute_dependencies (style, parent_changes);
- if (_gtk_bitmask_is_empty (changes))
+ path = create_query_path (context, decl);
+
+ if (!_gtk_css_matcher_init (&matcher, path))
{
- _gtk_bitmask_free (changes);
- return g_object_ref (style);
+ g_assert_not_reached ();
}
- result = gtk_css_static_style_copy (GTK_CSS_STATIC_STYLE (style), changes);
- path = create_query_path (context, decl);
- lookup = _gtk_css_lookup_new (changes);
+ result = gtk_css_static_style_new_update (GTK_CSS_STATIC_STYLE (style),
+ parent_changes,
+ GTK_STYLE_PROVIDER_PRIVATE (priv->cascade),
+ &matcher,
+ priv->scale,
+ priv->parent ? style_values_lookup (priv->parent) : NULL);
- if (_gtk_css_matcher_init (&matcher, path))
- _gtk_style_provider_private_lookup (GTK_STYLE_PROVIDER_PRIVATE (priv->cascade),
- &matcher,
- lookup,
- NULL);
-
- _gtk_css_lookup_resolve (lookup,
- GTK_STYLE_PROVIDER_PRIVATE (priv->cascade),
- priv->scale,
- GTK_CSS_STATIC_STYLE (result),
- priv->parent ? style_values_lookup (priv->parent) : NULL);
-
- _gtk_css_lookup_free (lookup);
gtk_widget_path_free (path);
- _gtk_bitmask_free (changes);
return result;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]