[gtk+/popovers: 17/42] pixelcache: check whether cached surface and cairo_t scales match
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/popovers: 17/42] pixelcache: check whether cached surface and cairo_t scales match
- Date: Wed, 15 Jan 2014 12:42:46 +0000 (UTC)
commit e38071e3bd32864ed38e81d85ba6541ed14adf03
Author: Carlos Garnacho <carlosg gnome org>
Date: Wed Dec 11 15:41:08 2013 +0100
pixelcache: check whether cached surface and cairo_t scales match
gtk/gtkpixelcache.c | 15 ++++++++++++++-
1 files changed, 14 insertions(+), 1 deletions(-)
---
diff --git a/gtk/gtkpixelcache.c b/gtk/gtkpixelcache.c
index 71c7833..4cc0717 100644
--- a/gtk/gtkpixelcache.c
+++ b/gtk/gtkpixelcache.c
@@ -396,6 +396,19 @@ blow_cache_cb (gpointer user_data)
return G_SOURCE_REMOVE;
}
+static gboolean
+context_is_unscaled (cairo_t *cr)
+{
+ cairo_matrix_t matrix;
+ gdouble x, y;
+
+ x = y = 1;
+ cairo_get_matrix (cr, &matrix);
+ cairo_matrix_transform_distance (&matrix, &x, &y);
+
+ return x == 1 && y == 1;
+}
+
void
_gtk_pixel_cache_draw (GtkPixelCache *cache,
@@ -420,7 +433,7 @@ _gtk_pixel_cache_draw (GtkPixelCache *cache,
_gtk_pixel_cache_set_position (cache, view_rect, canvas_rect);
_gtk_pixel_cache_repaint (cache, draw, view_rect, canvas_rect, user_data);
- if (cache->surface &&
+ if (cache->surface && context_is_unscaled (cr) &&
/* Don't use backing surface if rendering elsewhere */
cairo_surface_get_type (cache->surface) == cairo_surface_get_type (cairo_get_target (cr)))
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]