
Former-commit-id: 5af970f6d56d321472f2b91885e41ca113390986 Former-commit-id: 748e222a36362eb5ac8909068c32f2d3f98ca536
79 lines
1.6 KiB
Rust
79 lines
1.6 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
|
|
use super::consts::*;
|
|
use super::WindowFlags;
|
|
|
|
#[derive(Serialize, Deserialize, Clone, Debug, Default)]
|
|
pub struct Window {
|
|
pub left: u8,
|
|
pub right: u8,
|
|
pub top: u8,
|
|
pub bottom: u8,
|
|
pub flags: WindowFlags,
|
|
}
|
|
|
|
impl Window {
|
|
pub fn inside(&self, x: usize, y: usize) -> bool {
|
|
let left = self.left();
|
|
let right = self.right();
|
|
self.contains_y(y) && (x >= left && x < right)
|
|
}
|
|
|
|
#[inline]
|
|
pub fn left(&self) -> usize {
|
|
self.left as usize
|
|
}
|
|
|
|
#[inline]
|
|
pub fn right(&self) -> usize {
|
|
let left = self.left as usize;
|
|
let mut right = self.right as usize;
|
|
if right > DISPLAY_WIDTH || right < left {
|
|
right = DISPLAY_WIDTH;
|
|
}
|
|
right
|
|
}
|
|
|
|
#[inline]
|
|
pub fn top(&self) -> usize {
|
|
self.top as usize
|
|
}
|
|
|
|
#[inline]
|
|
pub fn bottom(&self) -> usize {
|
|
let top = self.top as usize;
|
|
let mut bottom = self.bottom as usize;
|
|
if bottom > DISPLAY_HEIGHT || bottom < top {
|
|
bottom = DISPLAY_HEIGHT;
|
|
}
|
|
bottom
|
|
}
|
|
|
|
#[inline]
|
|
pub fn contains_y(&self, y: usize) -> bool {
|
|
let top = self.top();
|
|
let bottom = self.bottom();
|
|
y >= top && y < bottom
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, PartialEq, Copy, Clone)]
|
|
pub enum WindowType {
|
|
Win0,
|
|
Win1,
|
|
WinObj,
|
|
WinOut,
|
|
WinNone,
|
|
}
|
|
|
|
#[derive(Debug)]
|
|
pub struct WindowInfo {
|
|
pub typ: WindowType,
|
|
pub flags: WindowFlags,
|
|
}
|
|
|
|
impl WindowInfo {
|
|
pub fn new(typ: WindowType, flags: WindowFlags) -> WindowInfo {
|
|
WindowInfo { typ, flags }
|
|
}
|
|
}
|