2022-09-07 15:23:37 +00:00
|
|
|
use std::os::raw::*;
|
|
|
|
|
|
|
|
#[repr(C)]
|
2022-09-07 16:44:59 +00:00
|
|
|
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
|
2022-09-07 15:23:37 +00:00
|
|
|
pub struct Position {
|
|
|
|
x: c_int,
|
|
|
|
y: c_int,
|
|
|
|
}
|
|
|
|
|
2022-09-07 15:29:09 +00:00
|
|
|
#[repr(C)]
|
2022-09-07 16:44:59 +00:00
|
|
|
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
|
2022-09-07 15:29:09 +00:00
|
|
|
pub struct Sizes {
|
|
|
|
width: c_int,
|
|
|
|
height: c_int,
|
|
|
|
}
|
|
|
|
|
2022-09-07 15:47:37 +00:00
|
|
|
#[repr(C)]
|
2022-09-07 16:44:59 +00:00
|
|
|
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
|
2022-09-07 15:47:37 +00:00
|
|
|
pub struct BasicGeom {
|
|
|
|
position: Position,
|
|
|
|
sizes: Sizes,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[repr(C)]
|
2022-09-07 16:44:59 +00:00
|
|
|
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
|
2022-09-07 15:47:37 +00:00
|
|
|
pub struct WinGeom {
|
|
|
|
basic: BasicGeom,
|
|
|
|
border_width: c_int,
|
|
|
|
}
|
|
|
|
|
2022-09-07 15:23:37 +00:00
|
|
|
impl Position {
|
2022-09-07 15:31:42 +00:00
|
|
|
pub fn new(x: c_int, y: c_int) -> Self {
|
2022-09-07 15:23:37 +00:00
|
|
|
Self { x, y }
|
|
|
|
}
|
|
|
|
|
2022-09-07 15:31:42 +00:00
|
|
|
pub fn x(&self) -> c_int {
|
2022-09-07 15:23:37 +00:00
|
|
|
self.x
|
|
|
|
}
|
|
|
|
|
2022-09-07 15:31:42 +00:00
|
|
|
pub fn y(&self) -> c_int {
|
2022-09-07 15:23:37 +00:00
|
|
|
self.y
|
|
|
|
}
|
|
|
|
}
|
2022-09-07 15:29:09 +00:00
|
|
|
|
|
|
|
impl Sizes {
|
2022-09-07 15:31:42 +00:00
|
|
|
pub fn new(width: c_int, height: c_int) -> Self {
|
2022-09-07 15:29:09 +00:00
|
|
|
Self { width, height }
|
|
|
|
}
|
|
|
|
|
2022-09-07 15:31:42 +00:00
|
|
|
pub fn width(&self) -> c_int {
|
2022-09-07 15:29:09 +00:00
|
|
|
self.width
|
|
|
|
}
|
|
|
|
|
2022-09-07 15:31:42 +00:00
|
|
|
pub fn height(&self) -> c_int {
|
2022-09-07 15:29:09 +00:00
|
|
|
self.height
|
|
|
|
}
|
|
|
|
}
|
2022-09-07 15:41:32 +00:00
|
|
|
|
2022-09-07 15:47:37 +00:00
|
|
|
impl BasicGeom {
|
|
|
|
pub fn new(position: Position, sizes: Sizes) -> Self {
|
|
|
|
Self { position, sizes }
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn position(&self) -> Position {
|
|
|
|
self.position
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn sizes(&self) -> Sizes {
|
|
|
|
self.sizes
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl WinGeom {
|
|
|
|
pub fn new(basic: BasicGeom, border_width: c_int) -> Self {
|
|
|
|
Self {
|
|
|
|
basic,
|
|
|
|
border_width,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn basic(&self) -> BasicGeom {
|
|
|
|
self.basic
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn border_width(&self) -> c_int {
|
|
|
|
self.border_width
|
|
|
|
}
|
2022-09-07 16:07:56 +00:00
|
|
|
|
|
|
|
pub fn total_width(&self) -> c_int {
|
|
|
|
self.basic.sizes.width + 2 * self.border_width
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn total_height(&self) -> c_int {
|
|
|
|
self.basic.sizes.height + 2 * self.border_width
|
|
|
|
}
|
2022-09-07 15:47:37 +00:00
|
|
|
}
|
|
|
|
|
2022-09-07 15:41:32 +00:00
|
|
|
#[cfg(test)]
|
|
|
|
mod tests {
|
|
|
|
use super::*;
|
|
|
|
|
2022-09-07 16:44:59 +00:00
|
|
|
#[test]
|
|
|
|
fn position_eq() {
|
|
|
|
assert_eq!(Position::new(123, 456), Position::new(123, 456));
|
|
|
|
|
|
|
|
assert_ne!(Position::new(123, 123), Position::new(123, 456));
|
|
|
|
assert_ne!(Position::new(123, 456), Position::new(123, 123));
|
|
|
|
|
|
|
|
assert_ne!(Position::new(123, 123), Position::new(456, 123));
|
|
|
|
assert_ne!(Position::new(456, 123), Position::new(123, 123));
|
|
|
|
|
|
|
|
assert_ne!(Position::new(123, 123), Position::new(456, 456));
|
|
|
|
assert_ne!(Position::new(456, 456), Position::new(123, 123));
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn sizes_eq() {
|
|
|
|
assert_eq!(Sizes::new(123, 456), Sizes::new(123, 456));
|
|
|
|
|
|
|
|
assert_ne!(Sizes::new(123, 123), Sizes::new(123, 456));
|
|
|
|
assert_ne!(Sizes::new(123, 456), Sizes::new(123, 123));
|
|
|
|
|
|
|
|
assert_ne!(Sizes::new(123, 123), Sizes::new(456, 123));
|
|
|
|
assert_ne!(Sizes::new(456, 123), Sizes::new(123, 123));
|
|
|
|
|
|
|
|
assert_ne!(Sizes::new(123, 123), Sizes::new(456, 456));
|
|
|
|
assert_ne!(Sizes::new(456, 456), Sizes::new(123, 123));
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn basic_geom_eq() {
|
|
|
|
let pos1 = Position::new(123, 123);
|
|
|
|
let pos2 = Position::new(123, 456);
|
|
|
|
|
|
|
|
let sizes1 = Sizes::new(123, 123);
|
|
|
|
let sizes2 = Sizes::new(123, 456);
|
|
|
|
|
|
|
|
assert_eq!(BasicGeom::new(pos1, sizes1), BasicGeom::new(pos1, sizes1));
|
|
|
|
assert_eq!(BasicGeom::new(pos1, sizes2), BasicGeom::new(pos1, sizes2));
|
|
|
|
assert_eq!(BasicGeom::new(pos2, sizes1), BasicGeom::new(pos2, sizes1));
|
|
|
|
assert_eq!(BasicGeom::new(pos2, sizes2), BasicGeom::new(pos2, sizes2));
|
|
|
|
|
|
|
|
assert_ne!(BasicGeom::new(pos1, sizes1), BasicGeom::new(pos1, sizes2));
|
|
|
|
assert_ne!(BasicGeom::new(pos1, sizes2), BasicGeom::new(pos1, sizes1));
|
|
|
|
assert_ne!(BasicGeom::new(pos1, sizes1), BasicGeom::new(pos2, sizes1));
|
|
|
|
assert_ne!(BasicGeom::new(pos2, sizes2), BasicGeom::new(pos1, sizes2));
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn win_geom_eq() {
|
|
|
|
let basic_geom1 =
|
|
|
|
BasicGeom::new(Position::new(123, 123), Sizes::new(123, 123));
|
|
|
|
let basic_geom2 =
|
|
|
|
BasicGeom::new(Position::new(123, 123), Sizes::new(123, 456));
|
|
|
|
|
|
|
|
assert_eq!(
|
|
|
|
WinGeom::new(basic_geom1, 99),
|
|
|
|
WinGeom::new(basic_geom1, 99),
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_ne!(
|
|
|
|
WinGeom::new(basic_geom1, 55),
|
|
|
|
WinGeom::new(basic_geom1, 99),
|
|
|
|
);
|
|
|
|
assert_ne!(
|
|
|
|
WinGeom::new(basic_geom1, 99),
|
|
|
|
WinGeom::new(basic_geom1, 55),
|
|
|
|
);
|
|
|
|
assert_ne!(
|
|
|
|
WinGeom::new(basic_geom1, 99),
|
|
|
|
WinGeom::new(basic_geom2, 99),
|
|
|
|
);
|
|
|
|
assert_ne!(
|
|
|
|
WinGeom::new(basic_geom2, 99),
|
|
|
|
WinGeom::new(basic_geom1, 99),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2022-09-07 15:41:32 +00:00
|
|
|
#[test]
|
|
|
|
fn position_default() {
|
2022-09-07 16:44:59 +00:00
|
|
|
assert_eq!(Position::default(), Position::new(0, 0));
|
2022-09-07 15:41:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn sizes_default() {
|
2022-09-07 16:44:59 +00:00
|
|
|
assert_eq!(Sizes::default(), Sizes::new(0, 0));
|
2022-09-07 15:41:32 +00:00
|
|
|
}
|
2022-09-07 15:47:37 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn win_geom_default() {
|
2022-09-07 16:44:59 +00:00
|
|
|
assert_eq!(WinGeom::default(), WinGeom::new(Default::default(), 0));
|
2022-09-07 15:47:37 +00:00
|
|
|
}
|
2022-09-07 16:07:56 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn win_geom_total_width_height() {
|
|
|
|
let sizes = Sizes::new(34, 56);
|
|
|
|
let basic_geom = BasicGeom::new(Default::default(), sizes);
|
|
|
|
let win_geom = WinGeom::new(basic_geom, 12);
|
|
|
|
assert_eq!(win_geom.total_width(), 58);
|
|
|
|
assert_eq!(win_geom.total_height(), 80);
|
|
|
|
}
|
2022-09-07 15:41:32 +00:00
|
|
|
}
|