From: Matthias Clasen Date: Sat, 25 Jan 2020 00:57:45 +0000 (-0500) Subject: css: Update affects flags for icons X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~20^2~185 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=71ee4df357feb1333b23579aa53bdc8c30e8f61f;p=gtk4.git css: Update affects flags for icons We want to differentiate what requires recreating the texture and what doesn't. In particular, the current flags are not handling symbolic icons right. --- diff --git a/gtk/gtkcssstylepropertyimpl.c b/gtk/gtkcssstylepropertyimpl.c index e5834b1dfd..ce076944d5 100644 --- a/gtk/gtkcssstylepropertyimpl.c +++ b/gtk/gtkcssstylepropertyimpl.c @@ -935,7 +935,7 @@ _gtk_css_style_property_init_properties (void) GTK_CSS_PROPERTY_COLOR, GDK_TYPE_RGBA, GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED, - GTK_CSS_AFFECTS_CONTENT | GTK_CSS_AFFECTS_SYMBOLIC_ICON, + GTK_CSS_AFFECTS_CONTENT | GTK_CSS_AFFECTS_ICON_REDRAW_SYMBOLIC, color_parse, color_query, gtk_css_color_value_new_white ()); @@ -959,7 +959,7 @@ _gtk_css_style_property_init_properties (void) GTK_CSS_PROPERTY_ICON_THEME, G_TYPE_NONE, GTK_STYLE_PROPERTY_INHERIT, - GTK_CSS_AFFECTS_ICON | GTK_CSS_AFFECTS_SYMBOLIC_ICON | GTK_CSS_AFFECTS_ICON_SIZE, + GTK_CSS_AFFECTS_ICON_TEXTURE, icon_theme_value_parse, NULL, gtk_css_icon_theme_value_new (NULL)); @@ -967,7 +967,7 @@ _gtk_css_style_property_init_properties (void) GTK_CSS_PROPERTY_ICON_PALETTE, G_TYPE_NONE, GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_INHERIT, - GTK_CSS_AFFECTS_SYMBOLIC_ICON, + GTK_CSS_AFFECTS_ICON_REDRAW_SYMBOLIC, icon_palette_parse, NULL, gtk_css_palette_value_new_default ()); @@ -1494,7 +1494,7 @@ _gtk_css_style_property_init_properties (void) GTK_CSS_PROPERTY_ICON_SOURCE, G_TYPE_NONE, GTK_STYLE_PROPERTY_ANIMATED, - GTK_CSS_AFFECTS_ICON | GTK_CSS_AFFECTS_SYMBOLIC_ICON, + GTK_CSS_AFFECTS_ICON_TEXTURE, css_image_value_parse, NULL, _gtk_css_image_value_new (NULL)); @@ -1502,7 +1502,7 @@ _gtk_css_style_property_init_properties (void) GTK_CSS_PROPERTY_ICON_SIZE, G_TYPE_NONE, GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED, - GTK_CSS_AFFECTS_SIZE | GTK_CSS_AFFECTS_ICON | GTK_CSS_AFFECTS_SYMBOLIC_ICON, + GTK_CSS_AFFECTS_SIZE | GTK_CSS_AFFECTS_ICON_SIZE, icon_size_parse, NULL, _gtk_css_number_value_new (16, GTK_CSS_PX)); @@ -1510,7 +1510,7 @@ _gtk_css_style_property_init_properties (void) GTK_CSS_PROPERTY_ICON_SHADOW, G_TYPE_NONE, GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED, - GTK_CSS_AFFECTS_ICON | GTK_CSS_AFFECTS_SYMBOLIC_ICON, + GTK_CSS_AFFECTS_ICON_REDRAW, shadow_value_parse, NULL, gtk_css_shadow_value_new_none ()); @@ -1518,7 +1518,7 @@ _gtk_css_style_property_init_properties (void) GTK_CSS_PROPERTY_ICON_STYLE, G_TYPE_NONE, GTK_STYLE_PROPERTY_INHERIT, - GTK_CSS_AFFECTS_ICON | GTK_CSS_AFFECTS_SYMBOLIC_ICON | GTK_CSS_AFFECTS_ICON_SIZE, + GTK_CSS_AFFECTS_ICON_TEXTURE, icon_style_parse, NULL, _gtk_css_icon_style_value_new (GTK_CSS_ICON_STYLE_REQUESTED)); diff --git a/gtk/gtkcsstypesprivate.h b/gtk/gtkcsstypesprivate.h index 28ecc7d168..5a6978a2ed 100644 --- a/gtk/gtkcsstypesprivate.h +++ b/gtk/gtkcsstypesprivate.h @@ -132,13 +132,16 @@ typedef guint64 GtkCssChange; * see @GTK_CSS_AFFECTS_TEXT. * @GTK_CSS_AFFECTS_BACKGROUND: The background rendering is affected. * @GTK_CSS_AFFECTS_BORDER: The border styling is affected. - * @GTK_CSS_AFFECTS_ICON_SIZE: Icon size is affected. * @GTK_CSS_AFFECTS_TEXT_ATTRS: Text attributes are affected. * @GTK_CSS_AFFECTS_TEXT_SIZE: Text size is affected. * @GTK_CSS_AFFECTS_TEXT_CONTENT: Text rendering is affected, but size or * attributes are not. - * @GTK_CSS_AFFECTS_ICON: Fullcolor icons and their rendering is affected. - * @GTK_CSS_AFFECTS_SYMBOLIC_ICON: Symbolic icons and their rendering is affected. + * @GTK_CSS_AFFECTS_ICON_SIZE: Icon size is affected. + * @GTK_CSS_AFFECTS_ICON_TEXTURE: The icon texture has changed and needs to be + * reloaded. + * @GTK_CSS_AFFECTS_ICON_REDRAW: Icons need to be redrawn (both symbolic and + * non-symbolic). + * @GTK_CSS_AFFECTS_ICON_REDRAW_SYMBOLIC: Symbolic icons need to be redrawn. * @GTK_CSS_AFFECTS_OUTLINE: The outline styling is affected. * @GTK_CSS_AFFECTS_SIZE: Changes in this property may have an effect * on the allocated size of the element. Changes in these properties @@ -154,26 +157,25 @@ typedef guint64 GtkCssChange; * Note that multiple values can be set. */ typedef enum { - GTK_CSS_AFFECTS_CONTENT = (1 << 0), - GTK_CSS_AFFECTS_BACKGROUND = (1 << 1), - GTK_CSS_AFFECTS_BORDER = (1 << 2), - GTK_CSS_AFFECTS_ICON_SIZE = (1 << 3), - GTK_CSS_AFFECTS_TEXT_ATTRS = (1 << 4), - GTK_CSS_AFFECTS_TEXT_SIZE = (1 << 5), - GTK_CSS_AFFECTS_TEXT_CONTENT = (1 << 6), - GTK_CSS_AFFECTS_ICON = (1 << 7), - GTK_CSS_AFFECTS_SYMBOLIC_ICON = (1 << 8), - GTK_CSS_AFFECTS_OUTLINE = (1 << 9), - GTK_CSS_AFFECTS_SIZE = (1 << 10), - GTK_CSS_AFFECTS_POSTEFFECT = (1 << 11), - GTK_CSS_AFFECTS_TRANSFORM = (1 << 12), + GTK_CSS_AFFECTS_CONTENT = (1 << 0), + GTK_CSS_AFFECTS_BACKGROUND = (1 << 1), + GTK_CSS_AFFECTS_BORDER = (1 << 2), + GTK_CSS_AFFECTS_TEXT_ATTRS = (1 << 3), + GTK_CSS_AFFECTS_TEXT_SIZE = (1 << 4), + GTK_CSS_AFFECTS_TEXT_CONTENT = (1 << 5), + GTK_CSS_AFFECTS_ICON_SIZE = (1 << 6), + GTK_CSS_AFFECTS_ICON_TEXTURE = (1 << 7), + GTK_CSS_AFFECTS_ICON_REDRAW = (1 << 8), + GTK_CSS_AFFECTS_ICON_REDRAW_SYMBOLIC = (1 << 9), + GTK_CSS_AFFECTS_OUTLINE = (1 << 10), + GTK_CSS_AFFECTS_SIZE = (1 << 11), + GTK_CSS_AFFECTS_POSTEFFECT = (1 << 12), + GTK_CSS_AFFECTS_TRANSFORM = (1 << 13), } GtkCssAffects; #define GTK_CSS_AFFECTS_REDRAW (GTK_CSS_AFFECTS_CONTENT | \ GTK_CSS_AFFECTS_BACKGROUND | \ GTK_CSS_AFFECTS_BORDER | \ - GTK_CSS_AFFECTS_ICON | \ - GTK_CSS_AFFECTS_SYMBOLIC_ICON | \ GTK_CSS_AFFECTS_OUTLINE | \ GTK_CSS_AFFECTS_POSTEFFECT) diff --git a/gtk/gtkiconhelper.c b/gtk/gtkiconhelper.c index 3aeeb8b168..315e6e8a6d 100644 --- a/gtk/gtkiconhelper.c +++ b/gtk/gtkiconhelper.c @@ -385,19 +385,24 @@ gtk_icon_helper_invalidate_for_change (GtkIconHelper *self, GtkCssStyleChange *change) { if (change == NULL || - ((gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_SYMBOLIC_ICON) && - self->texture_is_symbolic) || - (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_ICON) && - !self->texture_is_symbolic))) + gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_ICON_TEXTURE)) { /* Avoid the queue_resize in gtk_icon_helper_invalidate */ g_clear_object (&self->paintable); self->texture_is_symbolic = FALSE; + gtk_widget_queue_draw (self->owner); + } - if (change == NULL || - (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_ICON_SIZE) && - !GTK_IS_CSS_TRANSIENT_NODE (self->node))) - gtk_widget_queue_resize (self->owner); + if (change == NULL || + gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_ICON_SIZE)) + { + gtk_widget_queue_resize (self->owner); + } + else if (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_ICON_REDRAW) || + (self->texture_is_symbolic && + gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_ICON_REDRAW_SYMBOLIC))) + { + gtk_widget_queue_draw (self->owner); } }