use crate::modules::input::PressState;
use super::board::{Board, ContainerId, HotActive, Id};
mod button;
pub use button::Button;
mod fill;
pub use fill::{h_fill, v_fill};
mod slider;
pub use slider::Slider;
pub trait Widget {
type Response<'a>;
fn add_to_board(
self,
board: &mut Board,
id: Id,
parent: Option<ContainerId>,
) -> Self::Response<'_>;
}
pub fn next_hot_active(
hot_active: HotActive,
mouse_in_rect: bool,
button_press: PressState,
) -> HotActive {
use HotActive::*;
match hot_active {
Nil => {
if mouse_in_rect {
Hot
} else {
Nil
}
}
Hot => {
if mouse_in_rect {
if button_press.just_pressed() {
Active
} else {
Hot
}
} else {
Nil
}
}
Active => {
if button_press.just_released() {
if mouse_in_rect {
Hot
} else {
Nil
}
} else {
Active
}
}
}
}