]> git.lizzy.rs Git - bspwm.git/commitdiff
Extract geometric functions from helpers.c
authorBastien Dejean <nihilhill@gmail.com>
Fri, 26 Feb 2016 13:22:03 +0000 (14:22 +0100)
committerBastien Dejean <nihilhill@gmail.com>
Fri, 26 Feb 2016 13:22:03 +0000 (14:22 +0100)
Makefile
geometry.c [new file with mode: 0644]
geometry.h [new file with mode: 0644]
helpers.c
helpers.h
monitor.c
monitor.h
tree.c
window.c

index 4a34c3dfd3a882c78b9c35f8c0419c0636c25fb4..9771e8432b24cc96bc7638bbcc4bf4435a03e30a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -14,7 +14,7 @@ ZSHCPL    ?= $(PREFIX)/share/zsh/site-functions
 MD_DOCS = README.md doc/CONTRIBUTING.md doc/INSTALL.md doc/MISC.md doc/TODO.md
 XSESSIONS ?= $(PREFIX)/share/xsessions
 
-WM_SRC = bspwm.c helpers.c jsmn.c settings.c monitor.c desktop.c tree.c stack.c history.c \
+WM_SRC = bspwm.c helpers.c geometry.c jsmn.c settings.c monitor.c desktop.c tree.c stack.c history.c \
         events.c pointer.c window.c messages.c parse.c query.c restore.c rule.c ewmh.c subscribe.c
 WM_OBJ = $(WM_SRC:.c=.o)
 CLI_SRC = bspc.c helpers.c
diff --git a/geometry.c b/geometry.c
new file mode 100644 (file)
index 0000000..cf5888b
--- /dev/null
@@ -0,0 +1,65 @@
+/* Copyright (c) 2012, Bastien Dejean
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ *    list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <math.h>
+#include "geometry.h"
+
+double distance(xcb_point_t a, xcb_point_t b)
+{
+       return hypot(a.x - b.x, a.y - b.y);
+}
+
+bool is_inside(xcb_point_t p, xcb_rectangle_t r)
+{
+       return (p.x >= r.x && p.x < (r.x + r.width) &&
+               p.y >= r.y && p.y < (r.y + r.height));
+}
+
+unsigned int area(xcb_rectangle_t r)
+{
+       return r.width * r.height;
+}
+
+bool rect_eq(xcb_rectangle_t a, xcb_rectangle_t b)
+{
+       return (a.x == b.x && a.y == b.y &&
+               a.width == b.width && a.height == b.height);
+}
+
+int rect_cmp(xcb_rectangle_t r1, xcb_rectangle_t r2)
+{
+       if (r1.y >= (r2.y + r2.height)) {
+               return 1;
+       } else if (r2.y >= (r1.y + r1.height)) {
+               return -1;
+       } else {
+               if (r1.x >= (r2.x + r2.width)) {
+                       return 1;
+               } else if (r2.x >= (r1.x + r1.width)) {
+                       return -1;
+               } else {
+                       return area(r1) - area(r2);
+               }
+       }
+}
diff --git a/geometry.h b/geometry.h
new file mode 100644 (file)
index 0000000..2a77cd4
--- /dev/null
@@ -0,0 +1,37 @@
+/* Copyright (c) 2012, Bastien Dejean
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ *    list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef BSPWM_GEOMETRY_H
+#define BSPWM_GEOMETRY_H
+
+#include <stdbool.h>
+#include <xcb/xcb.h>
+
+double distance(xcb_point_t a, xcb_point_t b);
+bool is_inside(xcb_point_t p, xcb_rectangle_t r);
+unsigned int area(xcb_rectangle_t r);
+bool rect_eq(xcb_rectangle_t a, xcb_rectangle_t b);
+int rect_cmp(xcb_rectangle_t r1, xcb_rectangle_t r2);
+
+#endif
index bfbb346f818e4fb0617b3fe2e59ff2dd84819416..5f165b411683b332ec00705f674c3a71d059112d 100644 (file)
--- a/helpers.c
+++ b/helpers.c
@@ -31,7 +31,6 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <ctype.h>
-#include <math.h>
 #include "bspwm.h"
 
 void warn(char *fmt, ...)
@@ -130,19 +129,3 @@ bool is_hex_color(const char *color)
        }
        return true;
 }
-
-bool rect_eq(xcb_rectangle_t a, xcb_rectangle_t b)
-{
-       return (a.x == b.x && a.y == b.y && a.width == b.width && a.height == b.height);
-}
-
-bool is_inside(xcb_point_t p, xcb_rectangle_t r)
-{
-       return (p.x >= r.x && p.x < (r.x + r.width) &&
-               p.y >= r.y && p.y < (r.y + r.height));
-}
-
-double distance(xcb_point_t a, xcb_point_t b)
-{
-       return hypot(a.x - b.x, a.y - b.y);
-}
index 42df84e4d7a24342b82c14e238a7db4f7636303d..97196b50589b1aa332da1ba5f0646fc6c2b25588 100644 (file)
--- a/helpers.h
+++ b/helpers.h
@@ -65,8 +65,5 @@ void err(char *fmt, ...);
 char *read_string(const char *file_path, size_t *tlen);
 uint32_t get_color_pixel(const char *color);
 bool is_hex_color(const char *color);
-bool rect_eq(xcb_rectangle_t a, xcb_rectangle_t b);
-bool is_inside(xcb_point_t p, xcb_rectangle_t r);
-double distance(xcb_point_t a, xcb_point_t b);
 
 #endif
index 5477223614db1128c651bd13d896156010620874..4d56a77ab0959836f01c2a9218b75cb63659c8b1 100644 (file)
--- a/monitor.c
+++ b/monitor.c
@@ -33,6 +33,7 @@
 #include "history.h"
 #include "query.h"
 #include "settings.h"
+#include "geometry.h"
 #include "tree.h"
 #include "subscribe.h"
 #include "window.h"
@@ -183,25 +184,6 @@ void focus_monitor(monitor_t *m)
        put_status(SBSC_MASK_MONITOR_FOCUS, "monitor_focus %s\n", m->name);
 }
 
-int monitor_cmp(monitor_t *m1, monitor_t *m2)
-{
-       xcb_rectangle_t r1 = m1->rectangle;
-       xcb_rectangle_t r2 = m2->rectangle;
-       if (r1.y >= (r2.y + r2.height)) {
-               return 1;
-       } else if (r2.y >= (r1.y + r1.height)) {
-               return -1;
-       } else {
-               if (r1.x >= (r2.x + r2.width)) {
-                       return 1;
-               } else if (r2.x >= (r1.x + r1.width)) {
-                       return -1;
-               } else {
-                       return 0;
-               }
-       }
-}
-
 void add_monitor(monitor_t *m)
 {
        xcb_rectangle_t r = m->rectangle;
@@ -212,7 +194,7 @@ void add_monitor(monitor_t *m)
                mon_tail = m;
        } else {
                monitor_t *a = mon_head;
-               while (a != NULL && monitor_cmp(m, a) > 0) {
+               while (a != NULL && rect_cmp(m->rectangle, a->rectangle) > 0) {
                        a = a->next;
                }
                if (a != NULL) {
index c10f2b64b5d08a17f63cdb5da00537e63b0bc0f5..20f29715248996a4bb8cb4c423f6e3789c067812 100644 (file)
--- a/monitor.h
+++ b/monitor.h
@@ -35,7 +35,6 @@ monitor_t *get_monitor_by_id(xcb_randr_output_t id);
 void embrace_client(monitor_t *m, client_t *c);
 void adapt_geometry(xcb_rectangle_t *rs, xcb_rectangle_t *rd, node_t *n);
 void focus_monitor(monitor_t *m);
-int monitor_cmp(monitor_t *m1, monitor_t *m2);
 void add_monitor(monitor_t *m);
 void remove_monitor(monitor_t *m);
 void merge_monitors(monitor_t *ms, monitor_t *md);
diff --git a/tree.c b/tree.c
index 90a6618941a6e87cf1ee344de6e184146eb6b2f6..de8590ed8bbb27e796edbd8bbdda5d002bc590b2 100644 (file)
--- a/tree.c
+++ b/tree.c
@@ -33,6 +33,7 @@
 #include "history.h"
 #include "monitor.h"
 #include "query.h"
+#include "geometry.h"
 #include "subscribe.h"
 #include "settings.h"
 #include "stack.h"
@@ -971,8 +972,7 @@ unsigned int node_area(desktop_t *d, node_t *n)
        if (n == NULL) {
                return 0;
        }
-       xcb_rectangle_t rect = get_rectangle(d, n);
-       return rect.width * rect.height;
+       return area(get_rectangle(d, n));
 }
 
 int tiled_count(node_t *n)
index 986a128fc9d059fd9045da51620d1b0714b9ce97..81529ff1bd80f6db0d8bd98796e8e841d0cf27da 100644 (file)
--- a/window.c
+++ b/window.c
@@ -32,6 +32,7 @@
 #include "query.h"
 #include "rule.h"
 #include "settings.h"
+#include "geometry.h"
 #include "stack.h"
 #include "tree.h"
 #include "parse.h"