]> git.sur5r.net Git - i3/i3/commitdiff
Introduce get_output_from_rect
authorOrestis Floros <orestisf1993@gmail.com>
Sat, 17 Mar 2018 18:42:54 +0000 (20:42 +0200)
committerOrestis Floros <orestisf1993@gmail.com>
Fri, 23 Mar 2018 15:42:39 +0000 (17:42 +0200)
include/randr.h
src/randr.c

index d365a9e45cdcf985874355ddcbe11198e0d0f12a..39182c54b3e76d0851cebeb7d3ed99f68e4109b3 100644 (file)
@@ -88,6 +88,14 @@ Output *get_output_by_name(const char *name, const bool require_active);
  */
 Output *get_output_containing(unsigned int x, unsigned int y);
 
+/**
+ * Returns the active output which contains the midpoint of the given rect. If
+ * such an output doesn't exist, returns the output which contains most of the
+ * rectangle or NULL if there is no output which intersects with it.
+ *
+ */
+Output *get_output_from_rect(Rect rect);
+
 /**
  * Returns the active output which spans exactly the area specified by
  * rect or NULL if there is no output like this.
index efdd0352fe5386c6365ecd29d24c1b95bbb99109..c43c645517c215b99a2bd7d306dfc5a058ad1a87 100644 (file)
@@ -114,6 +114,20 @@ Output *get_output_containing(unsigned int x, unsigned int y) {
     return NULL;
 }
 
+/*
+ * Returns the active output which contains the midpoint of the given rect. If
+ * such an output doesn't exist, returns the output which contains most of the
+ * rectangle or NULL if there is no output which intersects with it.
+ *
+ */
+Output *get_output_from_rect(Rect rect) {
+    unsigned int mid_x = rect.x + rect.width / 2;
+    unsigned int mid_y = rect.y + rect.height / 2;
+    Output *output = get_output_containing(mid_x, mid_y);
+
+    return output ? output : output_containing_rect(rect);
+}
+
 /*
  * Returns the active output which spans exactly the area specified by
  * rect or NULL if there is no output like this.