Skip to main content

pixels_graphics_lib/ui/
mod.rs

1pub mod alert;
2pub mod button;
3pub mod checkbox;
4pub mod dir_panel;
5pub mod helpers;
6pub mod icon_button;
7pub mod label;
8pub mod layout;
9pub mod menu_bar;
10mod menu_item_view;
11pub mod styles;
12pub mod text_field;
13pub mod toggle_button;
14pub mod toggle_icon_button;
15pub mod tooltip;
16
17use crate::prelude::*;
18use buffer_graphics_lib::prelude::*;
19use std::fmt::Debug;
20
21pub mod prelude {
22    pub use crate::ui::alert::*;
23    pub use crate::ui::button::*;
24    pub use crate::ui::checkbox::*;
25    pub use crate::ui::dir_panel::*;
26    pub use crate::ui::helpers::*;
27    pub use crate::ui::icon_button::*;
28    pub use crate::ui::label::*;
29    pub use crate::ui::layout::column::*;
30    pub use crate::ui::layout::row::*;
31    pub use crate::ui::layout::*;
32    pub use crate::ui::menu_bar::*;
33    pub use crate::ui::styles::*;
34    pub use crate::ui::text_field::*;
35    pub use crate::ui::toggle_button::*;
36    pub use crate::ui::toggle_icon_button::*;
37    pub use crate::ui::tooltip::*;
38    pub use crate::ui::*;
39}
40
41/// Can be used to render multiple views easily
42/// # Usage
43/// ```rust
44/// render!(graphics, mouse, view1, view2);
45/// ```
46#[macro_export]
47macro_rules! render {
48    ($graphics:tt, $mouse:tt, $($view:expr$(,)?)*) => {
49        $(
50            $view.render($graphics, $mouse);
51        )*
52    };
53}
54
55pub trait PixelView: Debug {
56    fn set_position(&mut self, top_left: Coord);
57
58    fn bounds(&self) -> &Rect;
59
60    fn render(&self, graphics: &mut Graphics, mouse: &MouseData);
61
62    fn update(&mut self, timing: &Timing);
63
64    fn set_state(&mut self, new_state: ViewState);
65
66    fn get_state(&self) -> ViewState;
67}
68
69#[derive(Copy, Clone, Eq, PartialEq, Debug, Hash)]
70pub enum ViewState {
71    Normal,
72    Disabled,
73    Error,
74}
75
76impl ViewState {
77    /// Return pair of (is_error, is_disabled)
78    pub fn get_err_dis(&self) -> (bool, bool) {
79        match self {
80            ViewState::Normal => (false, false),
81            ViewState::Disabled => (false, true),
82            ViewState::Error => (true, false),
83        }
84    }
85}