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
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
pub fn top(&self) -> usize {
self.top as usize
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
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,
impl WindowInfo {
pub fn new(typ: WindowType, flags: WindowFlags) -> WindowInfo {
WindowInfo { typ, flags }