[gtk+] Fix coalescing of state animation areas for multiple window widgets.
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Fix coalescing of state animation areas for multiple window widgets.
- Date: Mon, 13 Dec 2010 21:33:54 +0000 (UTC)
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]