diff options
author | Alexander Orzechowski <[email protected]> | 2022-04-24 22:32:58 -0400 |
---|---|---|
committer | Alexander Orzechowski <[email protected]> | 2022-05-19 14:21:22 -0400 |
commit | 832b0ea4034290c6af2a1c2025d90e50f9740b26 (patch) | |
tree | b55d0a3195f055d3662d1ff0821dae501ba73acd /wlr_scene.c | |
parent | b390fce88442550a54ad5dfd78ae97047902b2e0 (diff) |
wlr_scene: Add primary_output property to wlr_scene_buffer
Diffstat (limited to 'wlr_scene.c')
-rw-r--r-- | wlr_scene.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/wlr_scene.c b/wlr_scene.c index 86d75ab..cdb04c9 100644 --- a/wlr_scene.c +++ b/wlr_scene.c @@ -218,6 +218,9 @@ static void scene_buffer_update_outputs( struct wlr_box buffer_box = { .x = lx, .y = ly }; scene_node_get_size(&scene_buffer->node, &buffer_box.width, &buffer_box.height); + int largest_overlap = 0; + scene_buffer->primary_output = NULL; + struct wlr_scene_output *scene_output; wl_list_for_each(scene_output, &scene->outputs, link) { struct wlr_box output_box = { @@ -231,6 +234,14 @@ static void scene_buffer_update_outputs( bool intersects = wlr_box_intersection(&intersection, &buffer_box, &output_box); bool intersects_before = scene_buffer->active_outputs & (1ull << scene_output->index); + if (intersects) { + int overlap = intersection.width * intersection.height; + if (overlap > largest_overlap) { + largest_overlap = overlap; + scene_buffer->primary_output = scene_output; + } + } + if (intersects && !intersects_before) { scene_buffer->active_outputs |= 1ull << scene_output->index; wlr_signal_emit_safe(&scene_buffer->events.output_enter, scene_output); |