summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-07-15 16:40:13 -0400
committerMatthias Clasen <mclasen@redhat.com>2021-07-15 16:40:13 -0400
commit1c90bb522e7e722bcac4bd391c1631efe9eef58a (patch)
treefdf6a6891cbf17ebd7a7e6e5781b04b1c65813f3
parentb70b058b66fcbfbd453ec5a705db062c2dd5d2c1 (diff)
downloadgtk+-1c90bb522e7e722bcac4bd391c1631efe9eef58a.tar.gz
ngl: Handle negative scales
Scale factors can be negative, but we were not looking out for that, triggering an assertion when trying to create a render target with negative width of height. Avoid that. Fixes: #4096
-rw-r--r--gsk/ngl/gsknglrenderjob.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/gsk/ngl/gsknglrenderjob.c b/gsk/ngl/gsknglrenderjob.c
index 3f36d506ab..72efcae92a 100644
--- a/gsk/ngl/gsknglrenderjob.c
+++ b/gsk/ngl/gsknglrenderjob.c
@@ -3725,19 +3725,23 @@ gsk_ngl_render_job_visit_node_with_offscreen (GskNglRenderJob *job,
{
int max_texture_size = job->command_queue->max_texture_size;
- scaled_width = ceilf (offscreen->bounds->size.width * job->scale_x);
+ scaled_width = ceilf (offscreen->bounds->size.width * fabs (job->scale_x));
if (scaled_width > max_texture_size)
{
downscale_x = (float)max_texture_size / scaled_width;
scaled_width = max_texture_size;
}
+ if (job->scale_x < 0)
+ downscale_x = -downscale_x;
- scaled_height = ceilf (offscreen->bounds->size.height * job->scale_y);
+ scaled_height = ceilf (offscreen->bounds->size.height * fabs (job->scale_y));
if (scaled_height > max_texture_size)
{
downscale_y = (float)max_texture_size / scaled_height;
scaled_height = max_texture_size;
}
+ if (job->scale_y < 0)
+ downscale_y = -downscale_y;
}
GskNglRenderTarget *render_target;