changed multiple (i32, i32) tuples to Point<i32>

This commit is contained in:
Janis 2021-11-26 22:52:27 +01:00
parent af21769d52
commit aafbcf2314
3 changed files with 68 additions and 62 deletions

View file

@ -4,6 +4,7 @@ use std::{ops::Rem, usize};
use indexmap::IndexMap; use indexmap::IndexMap;
use log::{error, info}; use log::{error, info};
use crate::backends::window_event::Point;
use crate::util::BuildIdentityHasher; use crate::util::BuildIdentityHasher;
mod client { mod client {
@ -11,11 +12,13 @@ mod client {
use x11::xlib::Window; use x11::xlib::Window;
use crate::backends::window_event::Point;
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct Client { pub struct Client {
pub(crate) window: Window, pub(crate) window: Window,
pub(crate) size: (i32, i32), pub(crate) size: Point<i32>,
pub(crate) position: (i32, i32), pub(crate) position: Point<i32>,
pub(crate) transient_for: Option<Window>, pub(crate) transient_for: Option<Window>,
} }
@ -23,8 +26,8 @@ mod client {
fn default() -> Self { fn default() -> Self {
Self { Self {
window: 0, window: 0,
size: (100, 100), size: (100, 100).into(),
position: (0, 0), position: (0, 0).into(),
transient_for: None, transient_for: None,
} }
} }
@ -34,8 +37,8 @@ mod client {
#[allow(dead_code)] #[allow(dead_code)]
pub fn new( pub fn new(
window: Window, window: Window,
size: (i32, i32), size: Point<i32>,
position: (i32, i32), position: Point<i32>,
) -> Self { ) -> Self {
Self { Self {
window, window,
@ -47,7 +50,7 @@ mod client {
pub fn new_transient( pub fn new_transient(
window: Window, window: Window,
size: (i32, i32), size: Point<i32>,
transient: Window, transient: Window,
) -> Self { ) -> Self {
Self { Self {
@ -140,7 +143,7 @@ pub struct ClientState {
pub(self) virtual_screens: VirtualScreenStore, pub(self) virtual_screens: VirtualScreenStore,
pub(self) gap: i32, pub(self) gap: i32,
pub(self) screen_size: (i32, i32), pub(self) screen_size: Point<i32>,
pub(self) master_size: f32, pub(self) master_size: f32,
border_size: i32, border_size: i32,
} }
@ -166,7 +169,7 @@ impl Default for ClientState {
focused: None, focused: None,
virtual_screens: VirtualScreenStore::new(1), virtual_screens: VirtualScreenStore::new(1),
gap: 0, gap: 0,
screen_size: (1, 1), screen_size: (1, 1).into(),
master_size: 1.0, master_size: 1.0,
border_size: 0, border_size: 0,
} }
@ -189,7 +192,7 @@ impl ClientState {
} }
} }
pub fn with_screen_size(self, screen_size: (i32, i32)) -> Self { pub fn with_screen_size(self, screen_size: Point<i32>) -> Self {
Self { Self {
screen_size, screen_size,
..self ..self
@ -222,11 +225,12 @@ impl ClientState {
client.position = { client.position = {
( (
transient.position.0 transient.position.x
+ (transient.size.0 - client.size.0) / 2, + (transient.size.x - client.size.x) / 2,
transient.position.1 transient.position.y
+ (transient.size.1 - client.size.1) / 2, + (transient.size.y - client.size.y) / 2,
) )
.into()
}; };
self.floating_clients.insert(key, client); self.floating_clients.insert(key, client);
@ -623,7 +627,7 @@ impl ClientState {
*/ */
pub fn arrange_virtual_screen(&mut self) { pub fn arrange_virtual_screen(&mut self) {
let gap = self.gap; let gap = self.gap;
let (width, height) = self.screen_size; let (width, height) = self.screen_size.as_tuple();
// should be fine to unwrap since we will always have at least 1 virtual screen // should be fine to unwrap since we will always have at least 1 virtual screen
let vs = self.virtual_screens.get_mut_current(); let vs = self.virtual_screens.get_mut_current();
@ -670,8 +674,8 @@ impl ClientState {
if let Some(client) = self.clients.get_mut(key) { if let Some(client) = self.clients.get_mut(key) {
*client = Client { *client = Client {
size, size: size.into(),
position, position: position.into(),
..*client ..*client
}; };
} }
@ -689,8 +693,8 @@ impl ClientState {
if let Some(client) = self.clients.get_mut(key) { if let Some(client) = self.clients.get_mut(key) {
*client = Client { *client = Client {
size, size: size.into(),
position, position: position.into(),
..*client ..*client
}; };
} }

View file

@ -13,7 +13,7 @@ use crate::{
keycodes::{MouseButton, VirtualKeyCode}, keycodes::{MouseButton, VirtualKeyCode},
window_event::{ window_event::{
ButtonEvent, KeyBind, KeyEvent, KeyState, ModifierKey, ButtonEvent, KeyBind, KeyEvent, KeyState, ModifierKey,
ModifierState, ModifierState, Point,
}, },
xlib::XLib, xlib::XLib,
WindowServerBackend, WindowServerBackend,
@ -59,14 +59,14 @@ enum MoveResizeInfo {
struct MoveInfoInner { struct MoveInfoInner {
window: Window, window: Window,
starting_cursor_pos: (i32, i32), starting_cursor_pos: Point<i32>,
starting_window_pos: (i32, i32), starting_window_pos: Point<i32>,
} }
struct ResizeInfoInner { struct ResizeInfoInner {
window: Window, window: Window,
starting_cursor_pos: (i32, i32), starting_cursor_pos: Point<i32>,
starting_window_size: (i32, i32), starting_window_size: Point<i32>,
} }
#[derive(Clone)] #[derive(Clone)]
@ -97,7 +97,7 @@ where
B: WindowServerBackend<Window = xlib::Window>, B: WindowServerBackend<Window = xlib::Window>,
{ {
pub fn new(config: WMConfig) -> Self { pub fn new(config: WMConfig) -> Self {
let backend = B::new(); let backend = B::build();
let clients = ClientState::new() let clients = ClientState::new()
.with_virtualscreens(config.num_virtualscreens) .with_virtualscreens(config.num_virtualscreens)
@ -600,7 +600,9 @@ where
{ {
Client::new_transient( Client::new_transient(
window, window,
self.backend.get_window_size(window).unwrap_or((100, 100)), self.backend
.get_window_size(window)
.unwrap_or((100, 100).into()),
transient_window, transient_window,
) )
} else { } else {
@ -670,7 +672,7 @@ where
self.move_resize_window = MoveResizeInfo::Move(MoveInfoInner { self.move_resize_window = MoveResizeInfo::Move(MoveInfoInner {
window, window,
starting_cursor_pos: event.cursor_position.as_tuple(), starting_cursor_pos: event.cursor_position,
starting_window_pos: self starting_window_pos: self
.clients .clients
.get(&window) .get(&window)
@ -687,8 +689,8 @@ where
let corner_pos = { let corner_pos = {
( (
client.position.0 + client.size.0, client.position.x + client.size.x,
client.position.1 + client.size.1, client.position.y + client.size.y,
) )
}; };
@ -699,7 +701,7 @@ where
self.move_resize_window = self.move_resize_window =
MoveResizeInfo::Resize(ResizeInfoInner { MoveResizeInfo::Resize(ResizeInfoInner {
window, window,
starting_cursor_pos: corner_pos, starting_cursor_pos: corner_pos.into(),
starting_window_size: client.size, starting_window_size: client.size,
}); });
} }
@ -725,8 +727,8 @@ where
match &self.move_resize_window { match &self.move_resize_window {
MoveResizeInfo::Move(info) => { MoveResizeInfo::Move(info) => {
let (x, y) = ( let (x, y) = (
event.x - info.starting_cursor_pos.0, event.x - info.starting_cursor_pos.x,
event.y - info.starting_cursor_pos.1, event.y - info.starting_cursor_pos.y,
); );
if let Some(client) = if let Some(client) =
@ -734,16 +736,16 @@ where
{ {
let position = &mut client.position; let position = &mut client.position;
position.0 = info.starting_window_pos.0 + x; position.x = info.starting_window_pos.x + x;
position.1 = info.starting_window_pos.1 + y; position.y = info.starting_window_pos.y + y;
self.backend.move_window(client.window, client.position); self.backend.move_window(client.window, client.position);
} }
} }
MoveResizeInfo::Resize(info) => { MoveResizeInfo::Resize(info) => {
let (x, y) = ( let (x, y) = (
event.x - info.starting_cursor_pos.0, event.x - info.starting_cursor_pos.x,
event.y - info.starting_cursor_pos.1, event.y - info.starting_cursor_pos.y,
); );
if let Some(client) = if let Some(client) =
@ -751,8 +753,8 @@ where
{ {
let size = &mut client.size; let size = &mut client.size;
size.0 = std::cmp::max(1, info.starting_window_size.0 + x); size.x = std::cmp::max(1, info.starting_window_size.x + x);
size.1 = std::cmp::max(1, info.starting_window_size.1 + y); size.y = std::cmp::max(1, info.starting_window_size.y + y);
self.backend.resize_window(client.window, client.size); self.backend.resize_window(client.window, client.size);
} }

View file

@ -274,16 +274,16 @@ impl XLib {
pub fn move_resize_client(&self, client: &Client) { pub fn move_resize_client(&self, client: &Client) {
let mut windowchanges = xlib::XWindowChanges { let mut windowchanges = xlib::XWindowChanges {
x: client.position.0, x: client.position.x,
y: client.position.1, y: client.position.y,
width: client.size.0, width: client.size.x,
height: client.size.1, height: client.size.y,
border_width: 0, border_width: 0,
sibling: 0, sibling: 0,
stack_mode: 0, stack_mode: 0,
}; };
if client.size.0 < 1 || client.size.1 < 1 { if client.size.x < 1 || client.size.y < 1 {
error!("client {:?} size is less than 1 pixel!", client); error!("client {:?} size is less than 1 pixel!", client);
} else { } else {
unsafe { unsafe {
@ -303,16 +303,16 @@ impl XLib {
pub fn move_client(&self, client: &Client) { pub fn move_client(&self, client: &Client) {
let mut wc = xlib::XWindowChanges { let mut wc = xlib::XWindowChanges {
x: client.position.0, x: client.position.x,
y: client.position.1, y: client.position.y,
width: client.size.0, width: client.size.x,
height: client.size.1, height: client.size.y,
border_width: 0, border_width: 0,
sibling: 0, sibling: 0,
stack_mode: 0, stack_mode: 0,
}; };
if client.size.0 < 1 || client.size.1 < 1 { if client.size.x < 1 || client.size.y < 1 {
error!("client {:?} size is less than 1 pixel!", client); error!("client {:?} size is less than 1 pixel!", client);
} else { } else {
unsafe { unsafe {
@ -328,16 +328,16 @@ impl XLib {
pub fn resize_client(&self, client: &Client) { pub fn resize_client(&self, client: &Client) {
let mut wc = xlib::XWindowChanges { let mut wc = xlib::XWindowChanges {
x: client.position.0, x: client.position.x,
y: client.position.1, y: client.position.y,
width: client.size.0, width: client.size.x,
height: client.size.1, height: client.size.y,
border_width: 0, border_width: 0,
sibling: 0, sibling: 0,
stack_mode: 0, stack_mode: 0,
}; };
if client.size.0 < 1 || client.size.1 < 1 { if client.size.x < 1 || client.size.y < 1 {
error!("client {:?} size is less than 1 pixel!", client); error!("client {:?} size is less than 1 pixel!", client);
} else { } else {
unsafe { unsafe {
@ -353,16 +353,16 @@ impl XLib {
pub fn hide_client(&self, client: &Client) { pub fn hide_client(&self, client: &Client) {
let mut wc = xlib::XWindowChanges { let mut wc = xlib::XWindowChanges {
x: client.size.0 * -2, x: client.size.x * -2,
y: client.position.1, y: client.position.y,
width: client.size.0, width: client.size.x,
height: client.size.1, height: client.size.y,
border_width: 0, border_width: 0,
sibling: 0, sibling: 0,
stack_mode: 0, stack_mode: 0,
}; };
if client.size.0 < 1 || client.size.1 < 1 { if client.size.x < 1 || client.size.y < 1 {
error!("client {:?} size is less than 1 pixel!", client); error!("client {:?} size is less than 1 pixel!", client);
} else { } else {
unsafe { unsafe {
@ -477,10 +477,10 @@ impl XLib {
display: self.dpy(), display: self.dpy(),
event: client.window, event: client.window,
window: client.window, window: client.window,
x: client.position.0, x: client.position.x,
y: client.position.1, y: client.position.y,
width: client.size.0, width: client.size.x,
height: client.size.1, height: client.size.y,
border_width: border, border_width: border,
override_redirect: 0, override_redirect: 0,
send_event: 0, send_event: 0,