scale_x = graphene_vec2_get_x (scale);
scale_y = graphene_vec2_get_y (scale);
- view = GRAPHENE_RECT_INIT (viewport->origin.x,
- viewport->origin.y,
+ view = GRAPHENE_RECT_INIT (scale_x * viewport->origin.x,
+ scale_y * viewport->origin.y,
ceil (scale_x * viewport->size.width),
ceil (scale_y * viewport->size.height));
GskVulkanRender *render,
GskVulkanUploader *uploader,
GskRenderNode *node,
+ const graphene_vec2_t *scale,
const graphene_rect_t *clip_bounds,
const graphene_point_t *clip_offset,
graphene_rect_t *tex_bounds)
uploader,
semaphore,
node,
- &self->scale,
+ scale,
&clipped);
}
}
/* XXX: We could intersect bounds with clip bounds here */
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
- ceil (node->bounds.size.width),
- ceil (node->bounds.size.height));
+ ceil (node->bounds.size.width * graphene_vec2_get_x (scale)),
+ ceil (node->bounds.size.height * graphene_vec2_get_y (scale)));
+ cairo_surface_set_device_scale (surface, graphene_vec2_get_x (scale), graphene_vec2_get_y (scale));
cr = cairo_create (surface);
cairo_translate (cr, -node->bounds.origin.x, -node->bounds.origin.y);
GskVulkanOp *op;
guint i;
const graphene_rect_t *clip = NULL;
+ const graphene_vec2_t *scale = NULL;
for (i = 0; i < self->render_ops->len; i++)
{
render,
uploader,
child,
+ scale,
clip,
&op->render.offset,
&tex_bounds);
uploader,
semaphore,
child,
- &self->scale,
+ scale,
child_bounds);
get_tex_rect (&op->render.source_rect, &op->render.node->bounds, child_bounds);
}
render,
uploader,
child,
+ scale,
&child->bounds,
&GRAPHENE_POINT_INIT (0, 0),
&tex_bounds);
render,
uploader,
child,
+ scale,
clip,
&op->render.offset,
&tex_bounds);
render,
uploader,
child,
+ scale,
clip,
&op->render.offset,
&tex_bounds);
render,
uploader,
start,
+ scale,
clip,
&op->render.offset,
&tex_bounds);
render,
uploader,
end,
+ scale,
clip,
&op->render.offset,
&tex_bounds);
render,
uploader,
top,
+ scale,
clip,
&op->render.offset,
&tex_bounds);
render,
uploader,
bottom,
+ scale,
clip,
&op->render.offset,
&tex_bounds);
case GSK_VULKAN_OP_PUSH_VERTEX_CONSTANTS:
clip = &op->constants.clip.bounds;
+ scale = &op->constants.scale;
break;
default: