From 4d8d69ada1e87d8daf1cc2b03148c815643e09b3 Mon Sep 17 00:00:00 2001 From: Mike Lowis Date: Mon, 5 Aug 2024 16:31:44 -0400 Subject: [PATCH] minor refactoring of client placement logic. --- client.c | 69 +++++++++++++++++++++++--------------------------------- 1 file changed, 28 insertions(+), 41 deletions(-) diff --git a/client.c b/client.c index 4cd601d..89e3138 100644 --- a/client.c +++ b/client.c @@ -5,6 +5,7 @@ static void ReadProps(Client* c); static void Redraw(Client* c); static void LayerWindows(void); +static int MonitorOverlap(Monitor* mon, Client* c); void* ecalloc(size_t n, size_t sz) { @@ -130,29 +131,6 @@ Client* Client_Create(Window win) return c; } -static int MonitorOverlap(Monitor* mon, Client* c) -{ - /* calculate client boundaries */ - int cleft = (c->x - BORDER_WIDTH); - int cright = (c->x + c->w + 2*BORDER_WIDTH); - int ctop = (c->y - BORDER_WIDTH); - int cbot = (c->y + c->h + 2*BORDER_WIDTH + TITLE_HEIGHT); - - /* calculate monitor boundaries */ - int left = max(cleft, mon->x); - int right = min(cright, mon->x + mon->w); - int top = max(ctop, mon->y); - int bot = min(cbot, mon->y + mon->h); - - - /* return the overlapped area */ - int area = 0; - if (left < right && top < bot) - { - area = (right - left) * (bot - top); - } - return area; -} @@ -278,31 +256,17 @@ void Client_Close(Client* client) void Client_Place(Client* c) { - (void)c; - /* calculate client boundaries */ - int cleft = (c->x - BORDER_WIDTH); - int cright = (c->x + c->w + 2*BORDER_WIDTH); - int ctop = (c->y - BORDER_WIDTH); - int cbot = (c->y + c->h + 2*BORDER_WIDTH + TITLE_HEIGHT); - /* now find the most appropriate monitor to own it */ int maxarea = 0; int monitor = 0; for (int i = 0; i < Num_Monitors; i++) { Monitor* mon = &Monitors[i]; - int left = max(cleft, mon->x); - int right = min(cright, mon->x + mon->w); - int top = max(ctop, mon->y); - int bot = min(cbot, mon->y + mon->h); - if (left < right && top < bot) + int area = MonitorOverlap(mon, c); + if (area > maxarea) { - int area = (right - left) * (bot - top); - if (area > maxarea) - { - maxarea = area; - monitor = i; - } + maxarea = area; + monitor = i; } } @@ -507,6 +471,29 @@ void Client_UpdateAll(void) } +static int MonitorOverlap(Monitor* mon, Client* c) +{ + /* calculate client boundaries */ + int cleft = (c->x - BORDER_WIDTH); + int cright = (c->x + c->w + 2*BORDER_WIDTH); + int ctop = (c->y - BORDER_WIDTH); + int cbot = (c->y + c->h + 2*BORDER_WIDTH + TITLE_HEIGHT); + + /* calculate monitor boundaries */ + int left = max(cleft, mon->x); + int right = min(cright, mon->x + mon->w); + int top = max(ctop, mon->y); + int bot = min(cbot, mon->y + mon->h); + + + /* return the overlapped area */ + int area = 0; + if (left < right && top < bot) + { + area = (right - left) * (bot - top); + } + return area; +} -- 2.52.0