X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkcsscomputedvalues.c;h=dea23bdf5e3ef50da9a0e2b4c63945bd034e415c;hb=0ba92bc26d1b716f2f9c0543593f13cd5a92c521;hp=b60324eaa08e854a0bb334227f3810479c430a93;hpb=1454ba15baa2e3378c48566746de3f41da6cde95;p=~andy%2Fgtk diff --git a/gtk/gtkcsscomputedvalues.c b/gtk/gtkcsscomputedvalues.c index b60324eaa..dea23bdf5 100644 --- a/gtk/gtkcsscomputedvalues.c +++ b/gtk/gtkcsscomputedvalues.c @@ -19,6 +19,7 @@ #include "config.h" +#include "gtkprivate.h" #include "gtkcsscomputedvaluesprivate.h" #include "gtkcssanimationprivate.h" @@ -120,9 +121,9 @@ _gtk_css_computed_values_compute_value (GtkCssComputedValues *values, GtkCssDependencies dependencies; GtkCssValue *value; - g_return_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values)); - g_return_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider)); - g_return_if_fail (parent_values == NULL || GTK_IS_CSS_COMPUTED_VALUES (parent_values)); + gtk_internal_return_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values)); + gtk_internal_return_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider)); + gtk_internal_return_if_fail (parent_values == NULL || GTK_IS_CSS_COMPUTED_VALUES (parent_values)); /* http://www.w3.org/TR/css3-cascade/#cascade * Then, for every element, the value for each property can be found @@ -154,8 +155,8 @@ _gtk_css_computed_values_set_animated_value (GtkCssComputedValues *values, guint id, GtkCssValue *value) { - g_return_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values)); - g_return_if_fail (value != NULL); + gtk_internal_return_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values)); + gtk_internal_return_if_fail (value != NULL); if (values->animated_values == NULL) values->animated_values = g_ptr_array_new_with_free_func ((GDestroyNotify)_gtk_css_value_unref); @@ -175,10 +176,11 @@ _gtk_css_computed_values_set_value (GtkCssComputedValues *values, GtkCssDependencies dependencies, GtkCssSection *section) { - g_return_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values)); + gtk_internal_return_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values)); if (values->values == NULL) - values->values = g_ptr_array_new_with_free_func ((GDestroyNotify)_gtk_css_value_unref); + values->values = g_ptr_array_new_full (_gtk_css_style_property_get_n_properties (), + (GDestroyNotify)_gtk_css_value_unref); if (id >= values->values->len) g_ptr_array_set_size (values->values, id + 1); @@ -195,6 +197,12 @@ _gtk_css_computed_values_set_value (GtkCssComputedValues *values, if (dependencies & (GTK_CSS_DEPENDS_ON_FONT_SIZE)) values->depends_on_font_size = _gtk_bitmask_set (values->depends_on_font_size, id, TRUE); + if (values->sections && values->sections->len > id && g_ptr_array_index (values->sections, id)) + { + gtk_css_section_unref (g_ptr_array_index (values->sections, id)); + g_ptr_array_index (values->sections, id) = NULL; + } + if (section) { if (values->sections == NULL) @@ -210,7 +218,7 @@ GtkCssValue * _gtk_css_computed_values_get_value (GtkCssComputedValues *values, guint id) { - g_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), NULL); + gtk_internal_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), NULL); if (values->animated_values && id < values->animated_values->len && @@ -224,7 +232,7 @@ GtkCssValue * _gtk_css_computed_values_get_intrinsic_value (GtkCssComputedValues *values, guint id) { - g_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), NULL); + gtk_internal_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), NULL); if (values->values == NULL || id >= values->values->len) @@ -237,7 +245,7 @@ GtkCssSection * _gtk_css_computed_values_get_section (GtkCssComputedValues *values, guint id) { - g_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), NULL); + gtk_internal_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), NULL); if (values->sections == NULL || id >= values->sections->len) @@ -405,8 +413,7 @@ gtk_css_computed_values_create_css_transitions (GtkCssComputedValues *values, else { animation = _gtk_css_transition_new (i, - start, - end, + _gtk_css_computed_values_get_value (source, i), _gtk_css_array_value_get_nth (timing_functions, i), timestamp + delay * G_USEC_PER_SEC, timestamp + (delay + duration) * G_USEC_PER_SEC); @@ -494,6 +501,7 @@ gtk_css_computed_values_create_css_animations (GtkCssComputedValues *values, _gtk_css_play_state_value_get (_gtk_css_array_value_get_nth (play_states, i)), _gtk_css_fill_mode_value_get (_gtk_css_array_value_get_nth (fill_modes, i)), _gtk_css_number_value_get (_gtk_css_array_value_get_nth (iteration_counts, i), 100)); + _gtk_css_keyframes_unref (keyframes); } values->animations = g_slist_prepend (values->animations, animation); } @@ -522,8 +530,8 @@ _gtk_css_computed_values_advance (GtkCssComputedValues *values, GSList *list; guint i; - g_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), NULL); - g_return_val_if_fail (timestamp >= values->current_time, NULL); + gtk_internal_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), NULL); + gtk_internal_return_val_if_fail (timestamp >= values->current_time, NULL); values->current_time = timestamp; old_computed_values = values->animated_values; @@ -572,7 +580,7 @@ _gtk_css_computed_values_is_static (GtkCssComputedValues *values) { GSList *list; - g_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), TRUE); + gtk_internal_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), TRUE); for (list = values->animations; list; list = list->next) { @@ -586,7 +594,7 @@ _gtk_css_computed_values_is_static (GtkCssComputedValues *values) void _gtk_css_computed_values_cancel_animations (GtkCssComputedValues *values) { - g_return_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values)); + gtk_internal_return_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values)); if (values->animated_values) { @@ -598,3 +606,21 @@ _gtk_css_computed_values_cancel_animations (GtkCssComputedValues *values) values->animations = NULL; } +GtkBitmask * +_gtk_css_computed_values_compute_dependencies (GtkCssComputedValues *values, + const GtkBitmask *parent_changes) +{ + GtkBitmask *changes; + + gtk_internal_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), _gtk_bitmask_new ()); + + changes = _gtk_bitmask_copy (parent_changes); + changes = _gtk_bitmask_intersect (changes, values->depends_on_parent); + if (_gtk_bitmask_get (changes, GTK_CSS_PROPERTY_COLOR)) + changes = _gtk_bitmask_union (changes, values->depends_on_color); + if (_gtk_bitmask_get (changes, GTK_CSS_PROPERTY_FONT_SIZE)) + changes = _gtk_bitmask_union (changes, values->depends_on_font_size); + + return changes; +} +