[gtk+/popovers: 17/33] pixelcache: check whether cached surface and cairo_t scales match



commit eb0af3c3acf1d408f63e2fd0871e22ebcf52f8d1
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]