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