This repository has been archived on 2024-12-14. You can view files and clone it, but cannot push or open issues or pull requests.
rustboyadvance-ng/core/src/gpu/window.rs

80 lines
1.6 KiB
Rust
Raw Normal View History

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 }
}
}