static void gtk_css_computed_values_finalize (GObject *object) { GtkCssComputedValues *values = GTK_CSS_COMPUTED_VALUES (object); _gtk_bitmask_free (values->depends_on_parent); _gtk_bitmask_free (values->equals_parent); _gtk_bitmask_free (values->depends_on_color); _gtk_bitmask_free (values->depends_on_font_size); G_OBJECT_CLASS (_gtk_css_computed_values_parent_class)->finalize (object); }
void _gtk_css_lookup_free (GtkCssLookup *lookup) { gtk_internal_return_if_fail (lookup != NULL); _gtk_bitmask_free (lookup->missing); g_free (lookup); }
static void gtk_css_widget_node_finalize (GObject *object) { GtkCssWidgetNode *node = GTK_CSS_WIDGET_NODE (object); _gtk_bitmask_free (node->accumulated_changes); G_OBJECT_CLASS (gtk_css_widget_node_parent_class)->finalize (object); }
static void gtk_css_widget_node_validate (GtkCssNode *node) { GtkCssWidgetNode *widget_node = GTK_CSS_WIDGET_NODE (node); GtkStyleContext *context; if (widget_node->widget == NULL) return; context = _gtk_widget_peek_style_context (widget_node->widget); if (context) gtk_style_context_validate (context, widget_node->accumulated_changes); else _gtk_widget_style_context_invalidated (widget_node->widget); _gtk_bitmask_free (widget_node->accumulated_changes); widget_node->accumulated_changes = _gtk_bitmask_new (); }
static void gtk_css_path_node_invalidate (GtkCssNode *node) { GtkCssPathNode *path_node = GTK_CSS_PATH_NODE (node); if (path_node->context) { GtkBitmask *changes; changes = _gtk_bitmask_new (); changes = _gtk_bitmask_invert_range (changes, 0, _gtk_css_style_property_get_n_properties ()); gtk_style_context_validate (path_node->context, changes); _gtk_bitmask_free (changes); } }
static void gtk_css_widget_node_style_changed (GtkCssNode *cssnode, GtkCssStyle *old_style, GtkCssStyle *new_style) { GtkCssWidgetNode *node; GtkBitmask *diff; node = GTK_CSS_WIDGET_NODE (cssnode); if (node->widget) gtk_widget_clear_path (node->widget); GTK_CSS_NODE_CLASS (gtk_css_widget_node_parent_class)->style_changed (cssnode, old_style, new_style); diff = gtk_css_style_get_difference (new_style, old_style); node->accumulated_changes = _gtk_bitmask_union (node->accumulated_changes, diff); _gtk_bitmask_free (diff); }
static void node_style_changed_cb (GtkCssNode *node, GtkCssStyle *old_style, GtkCssStyle *new_style, GtkWidget *widget) { GtkBitmask *changes; static GtkBitmask *affects_size = NULL; if (G_UNLIKELY (affects_size == NULL)) affects_size = _gtk_css_style_property_get_mask_affecting (GTK_CSS_AFFECTS_SIZE | GTK_CSS_AFFECTS_CLIP); changes = _gtk_bitmask_new (); changes = gtk_css_style_add_difference (changes, old_style, new_style); if (_gtk_bitmask_intersects (changes, affects_size)) gtk_widget_queue_resize (widget); else gtk_widget_queue_draw (widget); _gtk_bitmask_free (changes); }