From 5cc4a6e74034c22e8f12c6c24cf751afde9e3d28 Mon Sep 17 00:00:00 2001 From: Kenny Levinsen Date: Sun, 4 Aug 2019 14:23:16 +0200 Subject: [PATCH] Calculate window dimensions --- src/main.rs | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index fcd5062..a8fba95 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,7 @@ use std::io::{Read, Write}; use std::os::unix::io::AsRawFd; use std::sync::mpsc::{channel, Sender}; use std::sync::{Arc, Mutex}; +use std::cmp::max; use nix::poll::{poll, PollFd, PollFlags}; use os_pipe::pipe; @@ -149,7 +150,10 @@ impl App { None } - fn new(dimensions: (u32, u32), tx: Sender) -> App { + fn new(tx: Sender) -> App { + // + // Set up modules + // let mut modules = vec![ Module::new(Box::new(Clock::new(tx.clone())), (0, 0, 720, 320)), Module::new(Box::new(Calendar::new()), (0, 368, 1280, 344)), @@ -172,6 +176,19 @@ impl App { modules.push(Module::new(Box::new(m), (720, vert_off, 560, 32))); } + // + // Calculate window dimensions + // + + let mut dimensions = (0, 0); + for m in modules.iter() { + let b = m.get_bounds(); + dimensions = (max(dimensions.0, b.0 + b.2), max(dimensions.1, b.1 + b.3)); + } + + // Add padding + dimensions = (dimensions.0 + 40, dimensions.1 + 40); + let cmd_queue = Arc::new(Mutex::new(VecDeque::new())); let (display, mut event_queue) = Display::connect_to_env().unwrap(); @@ -412,7 +429,7 @@ fn main() { let (mut rx_pipe, mut tx_pipe) = pipe().unwrap(); let (tx_draw, rx_draw) = channel(); - let mut app = App::new((1320u32, 848u32), tx_draw); + let mut app = App::new(tx_draw); let worker_queue = app.cmd_queue(); std::thread::spawn(move || loop {