gpu: Consult scissor for clip bounds
When querying clip bounds, also check the scissor rect, because sometimes that one is tighter than the clip bounds, because the clip bounds need to track some larger rounded corners. Makes a few tests harder to break.
This commit is contained in:
@@ -531,14 +531,25 @@ static void
|
||||
gsk_gpu_node_processor_get_clip_bounds (GskGpuNodeProcessor *self,
|
||||
graphene_rect_t *out_bounds)
|
||||
{
|
||||
graphene_rect_offset_r (&self->clip.rect.bounds,
|
||||
- self->offset.x,
|
||||
- self->offset.y,
|
||||
out_bounds);
|
||||
graphene_rect_t scissor;
|
||||
|
||||
/* FIXME: We could try the scissor rect here.
|
||||
* But how often is that smaller than the clip bounds?
|
||||
*/
|
||||
if (gsk_gpu_node_processor_rect_device_to_clip (self,
|
||||
&GSK_RECT_INIT_CAIRO (&self->scissor),
|
||||
&scissor))
|
||||
{
|
||||
if (!gsk_rect_intersection (&scissor, &self->clip.rect.bounds, out_bounds))
|
||||
{
|
||||
g_warning ("Clipping is broken, everything is clipped, but we didn't early-exit.\n");
|
||||
*out_bounds = self->clip.rect.bounds;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*out_bounds = self->clip.rect.bounds;
|
||||
}
|
||||
|
||||
out_bounds->origin.x -= self->offset.x;
|
||||
out_bounds->origin.y -= self->offset.y;
|
||||
}
|
||||
|
||||
static gboolean G_GNUC_WARN_UNUSED_RESULT
|
||||
|
||||
Reference in New Issue
Block a user