1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//! This module contains all the logic for handling input events and providing them to widgets.
//!
//! All user input is provided to the `Ui` in the form of `input::Input` events, which are continuously
//! polled from the backend window implementation. These raw input events tend to be fairly low level.
//! The `Ui` passes each of these events off to it's `GlobalInput`, which keeps track of the state of
//! affairs for the entire `Ui`. `GlobalInput` will also aggregate the low level events into higher
//! level ones. For instance, two events indicating that a mouse button was pressed then released
//! would cause a new `UiEvent::MouseClick` to be generated. This saves individual widgets from
//! having to interpret these themselves, thus freeing them from also having to store input state.
//!
//! Whenever there's an update, all of the events that have occured since the last update will be
//! available for widgets to process. This is where the `InputProvider` trait comes in. The
//! `InputProvider` trait provides many methods for conveniently filtering events that a widget would
//! like to handle. There are two things that implement this trait. The first is `GlobalInput`, and
//! the second is `WidgetInput`. `WidgetInput` is used to provide input events to a specific widget.
//! It filters events that don't apply to the widget, and all events provided by `WidgetIput` will
//! have all coordinates in the widget's own local coordinate system. `GlobalInput`, on the other hand,
//! will never filter out any events, and will always provide them with coordinates relative to the
//! window.

pub mod state;
pub mod widget;
pub mod global;

pub use self::state::State;
pub use self::global::Global;
pub use self::widget::Widget;

pub use backend::event::{
    Button,
    ControllerButton,
    ControllerAxisArgs,
    keyboard,
    Key,
    MouseButton,
};