[gtk+] Fix coalescing of state animation areas for multiple window widgets.



commit 99f59d8266c538127457571a58eccd92096f1fc6
Author: Carlos Garnacho <carlosg gnome org>
Date:   Mon Dec 13 00:27:24 2010 +0100

    Fix coalescing of state animation areas for multiple window widgets.
    
    Coordinates needed to be translated relative to the window position
    in within the widget.

 gtk/gtkstylecontext.c  |    6 ++++--
 gtk/gtkstylecontext.h  |    3 +--
 gtk/gtkwidget.c        |   22 ++++++++++------------
 gtk/gtkwidgetprivate.h |    5 +++++
 4 files changed, 20 insertions(+), 16 deletions(-)
---
diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c
index be7f782..27f7efb 100644
--- a/gtk/gtkstylecontext.c
+++ b/gtk/gtkstylecontext.c
@@ -34,6 +34,7 @@
 #include "gtkanimationdescription.h"
 #include "gtktimeline.h"
 #include "gtkiconfactory.h"
+#include "gtkwidgetprivate.h"
 
 /**
  * SECTION:gtkstylecontext
@@ -2982,8 +2983,7 @@ _gtk_style_context_invalidate_animation_areas (GtkStyleContext *context)
 
 void
 _gtk_style_context_coalesce_animation_areas (GtkStyleContext *context,
-                                             gint             rel_x,
-                                             gint             rel_y)
+					     GtkWidget       *widget)
 {
   GtkStyleContextPrivate *priv;
   GSList *l;
@@ -2998,6 +2998,7 @@ _gtk_style_context_coalesce_animation_areas (GtkStyleContext *context,
   while (l)
     {
       AnimationInfo *info;
+      gint rel_x, rel_y;
       GSList *cur;
       guint i;
 
@@ -3017,6 +3018,7 @@ _gtk_style_context_coalesce_animation_areas (GtkStyleContext *context,
         }
 
       info->invalidation_region = cairo_region_create ();
+      _gtk_widget_get_translation_to_window (widget, info->window, &rel_x, &rel_y);
 
       for (i = 0; i < info->rectangles->len; i++)
         {
diff --git a/gtk/gtkstylecontext.h b/gtk/gtkstylecontext.h
index f7d658a..0d1f74b 100644
--- a/gtk/gtkstylecontext.h
+++ b/gtk/gtkstylecontext.h
@@ -459,8 +459,7 @@ const GValue * _gtk_style_context_peek_style_property (GtkStyleContext *context,
                                                        GParamSpec      *pspec);
 void           _gtk_style_context_invalidate_animation_areas (GtkStyleContext *context);
 void           _gtk_style_context_coalesce_animation_areas   (GtkStyleContext *context,
-                                                              gint             rel_x,
-                                                              gint             rel_y);
+							      GtkWidget       *widget);
 
 void gtk_style_context_invalidate (GtkStyleContext *context);
 void gtk_style_context_reset_widgets (GdkScreen *screen);
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 214c391..317b45b 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -5564,9 +5564,7 @@ _gtk_widget_draw_internal (GtkWidget *widget,
     }
 
   context = gtk_widget_get_style_context (widget);
-  _gtk_style_context_coalesce_animation_areas (context,
-                                               widget->priv->allocation.x,
-                                               widget->priv->allocation.y);
+  _gtk_style_context_coalesce_animation_areas (context, widget);
 }
 
 /**
@@ -5688,11 +5686,11 @@ gtk_widget_event (GtkWidget *widget,
 }
 
 /* Returns TRUE if a translation should be done */
-static gboolean
-gtk_widget_get_translation_to_window (GtkWidget      *widget,
-                                      GdkWindow      *window,
-                                      int            *x,
-                                      int            *y)
+gboolean
+_gtk_widget_get_translation_to_window (GtkWidget      *widget,
+				       GdkWindow      *window,
+				       int            *x,
+				       int            *y)
 {
   GdkWindow *w, *widget_window;
 
@@ -5755,7 +5753,7 @@ gtk_cairo_transform_to_window (cairo_t   *cr,
   g_return_if_fail (GTK_IS_WIDGET (widget));
   g_return_if_fail (GDK_IS_WINDOW (window));
 
-  if (gtk_widget_get_translation_to_window (widget, window, &x, &y))
+  if (_gtk_widget_get_translation_to_window (widget, window, &x, &y))
     cairo_translate (cr, x, y);
 }
 
@@ -5798,9 +5796,9 @@ gtk_widget_send_expose (GtkWidget *widget,
   gdk_cairo_region (cr, event->expose.region);
   cairo_clip (cr);
 
-  do_clip = gtk_widget_get_translation_to_window (widget,
-                                                  event->expose.window,
-                                                  &x, &y);
+  do_clip = _gtk_widget_get_translation_to_window (widget,
+						   event->expose.window,
+						   &x, &y);
   cairo_translate (cr, -x, -y);
 
   _gtk_widget_draw_internal (widget, cr, do_clip);
diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h
index b31efd9..c566646 100644
--- a/gtk/gtkwidgetprivate.h
+++ b/gtk/gtkwidgetprivate.h
@@ -88,6 +88,11 @@ void _gtk_widget_restore_size_request  (GtkWidget *widget,
 					int        old_width,
 					int        old_height);
 
+gboolean _gtk_widget_get_translation_to_window (GtkWidget      *widget,
+						GdkWindow      *window,
+						int            *x,
+						int            *y);
+
 G_END_DECLS
 
 #endif /* __GTK_WIDGET_PRIVATE_H__ */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]