mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-17 06:10:15 +00:00
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;
|
||||
}
|
||||
|
||||
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)))
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user