Commit 99f59d82 authored by Carlos Garnacho's avatar Carlos Garnacho
Browse files

Fix coalescing of state animation areas for multiple window widgets.

Coordinates needed to be translated relative to the window position
in within the widget.
parent f285a84b
......@@ -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++)
{
......
......@@ -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);
......
......@@ -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);
......
......@@ -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__ */
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment