summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Orzechowski <[email protected]>2022-04-24 22:32:58 -0400
committerAlexander Orzechowski <[email protected]>2022-05-19 14:21:22 -0400
commit832b0ea4034290c6af2a1c2025d90e50f9740b26 (patch)
treeb55d0a3195f055d3662d1ff0821dae501ba73acd
parentb390fce88442550a54ad5dfd78ae97047902b2e0 (diff)
wlr_scene: Add primary_output property to wlr_scene_buffer
-rw-r--r--wlr_scene.c11
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);