[gtk+] widget: Add forgotten push_group code
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] widget: Add forgotten push_group code
- Date: Tue, 19 Jan 2016 03:25:57 +0000 (UTC)
commit ab5dbfd1f1fec1c8e62460236769ffd80cad4a54
Author: Benjamin Otte <otte redhat com>
Date: Tue Jan 19 04:24:32 2016 +0100
widget: Add forgotten push_group code
... and remove the also forgotten void function that lingered around
with it.
Fixes opacity=0 parts like inactive spinners or sort indicators in
treeview headers being drawn since last commit.
Oops.
gtk/gtkwidget.c | 59 ++++++++++++++----------------------------------------
1 files changed, 16 insertions(+), 43 deletions(-)
---
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 3a9e5d2..adba726 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -6957,9 +6957,18 @@ gtk_widget_draw_internal (GtkWidget *widget,
if (gdk_cairo_get_clip_rectangle (cr, NULL))
{
gboolean result;
+ gboolean push_group;
//gdk_window_mark_paint_from_clip (window, cr);
+ push_group =
+ widget->priv->alpha != 255 &&
+ (!_gtk_widget_is_toplevel (widget) ||
+ gtk_widget_get_visual (widget) == gdk_screen_get_rgba_visual (gtk_widget_get_screen (widget)));
+
+ if (push_group)
+ cairo_push_group (cr);
+
if (g_signal_has_handler_pending (widget, widget_signals[DRAW], 0, FALSE))
{
g_signal_emit (widget, widget_signals[DRAW],
@@ -7009,6 +7018,13 @@ gtk_widget_draw_internal (GtkWidget *widget,
}
#endif
+ if (push_group)
+ {
+ cairo_pop_group_to_source (cr);
+ cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
+ cairo_paint_with_alpha (cr, widget->priv->alpha / 255.0);
+ }
+
if (cairo_status (cr) &&
gtk_cairo_get_event_window (cr))
{
@@ -7024,49 +7040,6 @@ gtk_widget_draw_internal (GtkWidget *widget,
}
}
-void
-_gtk_widget_draw (GtkWidget *widget,
- cairo_t *cr)
-{
- gboolean push_group;
-
- /* We get expose events only on native windows, so the draw
- * implementation has to walk the entire widget hierarchy, except
- * that it stops at native subwindows while we're in an expose
- * event (_gtk_cairo_get_event () != NULL).
- *
- * However, we need to properly clip drawing into child windows
- * to avoid drawing outside if widgets use e.g. cairo_paint(), so
- * we traverse over GdkWindows as well as GtkWidgets.
- *
- * In order to be able to have opacity groups for entire widgets
- * that consists of multiple windows we collect all the windows
- * that belongs to a widget and draw them in one go. This means
- * we may somewhat reorder GdkWindows when we paint them, but
- * that’s not generally a problem, as if you want a guaranteed
- * order you generally use a windowed widget where you control
- * the window hierarchy.
- */
-
- push_group =
- widget->priv->alpha != 255 &&
- (!_gtk_widget_is_toplevel (widget) ||
- gtk_widget_get_visual (widget) == gdk_screen_get_rgba_visual (gtk_widget_get_screen (widget)));
-
- if (push_group)
- cairo_push_group (cr);
-
- gtk_widget_draw_internal (widget, cr, TRUE);
-
- if (push_group)
- {
- cairo_pop_group_to_source (cr);
- cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
- cairo_paint_with_alpha (cr, widget->priv->alpha / 255.0);
- }
-}
-
-
/**
* gtk_widget_draw:
* @widget: the widget to draw. It must be drawable (see
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]