pixelcache: check whether cached surface and cairo_t scales match
This commit is contained in:
parent
695b979b10
commit
15d7d5b31f
@ -396,6 +396,19 @@ blow_cache_cb (gpointer user_data)
|
|||||||
return G_SOURCE_REMOVE;
|
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
|
void
|
||||||
_gtk_pixel_cache_draw (GtkPixelCache *cache,
|
_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_set_position (cache, view_rect, canvas_rect);
|
||||||
_gtk_pixel_cache_repaint (cache, draw, view_rect, canvas_rect, user_data);
|
_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 */
|
/* Don't use backing surface if rendering elsewhere */
|
||||||
cairo_surface_get_type (cache->surface) == cairo_surface_get_type (cairo_get_target (cr)))
|
cairo_surface_get_type (cache->surface) == cairo_surface_get_type (cairo_get_target (cr)))
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user