[gtk+] widget: Don't queue redraws for properties that don't affect anything
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] widget: Don't queue redraws for properties that don't affect anything
- Date: Sun, 2 Aug 2015 19:57:46 +0000 (UTC)
commit 4da945dc4be6bb1bd14000927c2092053cea3659
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Sun Aug 2 12:37:03 2015 -0700
widget: Don't queue redraws for properties that don't affect anything
Properties like transition-property might change when hovering over
something, even if the property itself does not change. These properties
don't affect drawing, so don't queue redraws for them.
gtk/gtkcsstypesprivate.h | 9 +++++++++
gtk/gtkwidget.c | 9 ++++++---
2 files changed, 15 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkcsstypesprivate.h b/gtk/gtkcsstypesprivate.h
index 4018048..898051e 100644
--- a/gtk/gtkcsstypesprivate.h
+++ b/gtk/gtkcsstypesprivate.h
@@ -134,6 +134,15 @@ typedef enum {
GTK_CSS_AFFECTS_SIZE = (1 << 9)
} GtkCssAffects;
+#define GTK_CSS_AFFECTS_REDRAW (GTK_CSS_AFFECTS_FOREGROUND | \
+ GTK_CSS_AFFECTS_BACKGROUND | \
+ GTK_CSS_AFFECTS_BORDER | \
+ GTK_CSS_AFFECTS_FONT | \
+ GTK_CSS_AFFECTS_TEXT | \
+ GTK_CSS_AFFECTS_TEXT_ATTRS | \
+ GTK_CSS_AFFECTS_ICON | \
+ GTK_CSS_AFFECTS_OUTLINE)
+
enum { /*< skip >*/
GTK_CSS_PROPERTY_COLOR,
GTK_CSS_PROPERTY_DPI,
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 37348ad..2f3b142 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -8250,14 +8250,17 @@ gtk_widget_real_style_updated (GtkWidget *widget)
if (widget->priv->anchored)
{
- static GtkBitmask *affects_size = NULL;
+ static GtkBitmask *affects_size, *affects_redraw;
if (G_UNLIKELY (affects_size == NULL))
- affects_size = _gtk_css_style_property_get_mask_affecting (GTK_CSS_AFFECTS_SIZE |
GTK_CSS_AFFECTS_CLIP);
+ {
+ affects_size = _gtk_css_style_property_get_mask_affecting (GTK_CSS_AFFECTS_SIZE |
GTK_CSS_AFFECTS_CLIP);
+ affects_redraw = _gtk_css_style_property_get_mask_affecting (GTK_CSS_AFFECTS_REDRAW);
+ }
if (changes == NULL || _gtk_bitmask_intersects (changes, affects_size))
gtk_widget_queue_resize (widget);
- else
+ else if (_gtk_bitmask_intersects (changes, affects_redraw))
gtk_widget_queue_draw (widget);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]