mirror of
https://github.com/vale981/bspwm
synced 2025-03-05 09:51:38 -05:00
Extract geometric functions from helpers.c
This commit is contained in:
parent
87a89ffeac
commit
c895ef0f0e
9 changed files with 108 additions and 44 deletions
2
Makefile
2
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
|
||||
|
|
65
geometry.c
Normal file
65
geometry.c
Normal file
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
37
geometry.h
Normal file
37
geometry.h
Normal file
|
@ -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
|
17
helpers.c
17
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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
22
monitor.c
22
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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
4
tree.c
4
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)
|
||||
|
|
1
window.c
1
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"
|
||||
|
|
Loading…
Add table
Reference in a new issue