rendernode: Use cairo_set_device_offset()
authorBenjamin Otte <otte@redhat.com>
Sun, 21 May 2023 03:03:49 +0000 (05:03 +0200)
committerBenjamin Otte <otte@redhat.com>
Mon, 5 Jun 2023 03:33:07 +0000 (05:33 +0200)
Simplifies the code.

gsk/gskrendernodeimpl.c

index c60bd5b00f36ecda78609e4b45a186197967e6eb..9a17de149adabaae77fc69b0d426a3df7effd2bb 100644 (file)
@@ -3956,27 +3956,23 @@ gsk_repeat_node_draw (GskRenderNode *node,
   cairo_pattern_t *pattern;
   cairo_surface_t *surface;
   cairo_t *surface_cr;
+  double scale_x, scale_y;
 
   surface = cairo_surface_create_similar (cairo_get_target (cr),
                                           CAIRO_CONTENT_COLOR_ALPHA,
                                           ceilf (self->child_bounds.size.width),
                                           ceilf (self->child_bounds.size.height));
+  cairo_surface_get_device_scale (surface, &scale_x, &scale_y);
+  cairo_surface_set_device_offset (surface, 
+                                   - self->child_bounds.origin.x * scale_x,
+                                   - self->child_bounds.origin.y * scale_y);
+
   surface_cr = cairo_create (surface);
-  cairo_translate (surface_cr,
-                   - self->child_bounds.origin.x,
-                   - self->child_bounds.origin.y);
   gsk_render_node_draw (self->child, surface_cr);
   cairo_destroy (surface_cr);
 
   pattern = cairo_pattern_create_for_surface (surface);
   cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
-  cairo_pattern_set_matrix (pattern,
-                            &(cairo_matrix_t) {
-                                .xx = 1.0,
-                                .yy = 1.0,
-                                .x0 = - self->child_bounds.origin.x,
-                                .y0 = - self->child_bounds.origin.y
-                            });
   cairo_set_source (cr, pattern);
   cairo_pattern_destroy (pattern);
   cairo_surface_destroy (surface);