[−][src]Enum druid::Event
An event, propagated downwards during event flow.
With two exceptions (Event::Command
and Event::Notification
, which
have special considerations outlined in their own docs) each event
corresponds to some user action or other message recieved from the platform.
Events are things that happen that can change the state of widgets. An important category is events plumbed from the platform windowing system, which includes mouse and keyboard events, but also (in the future) status changes such as window focus changes.
Events can also be higher level concepts indicating state changes within the widget hierarchy, for example when a widget gains or loses focus or "hot" (also known as hover) status.
Events are a key part of what is called "event flow", which is
basically the propagation of an event through the widget hierarchy
through the event
widget method. A container widget will
generally pass the event to its children, mediated through the
WidgetPod
container, which is where most of the event flow logic
is applied (especially the decision whether or not to propagate).
This enum is expected to grow considerably, as there are many, many different kinds of events that are relevant in a GUI.
Variants
Sent to all widgets in a given window when that window is first instantiated.
This should always be the first Event
received, although widgets will
receive LifeCycle::WidgetAdded
first.
Widgets should handle this event if they need to do some addition setup when a window is first created.
WindowSize(Size)
Called on the root widget when the window size changes.
Discussion: it's not obvious this should be propagated to user
widgets. It is propagated through the RootWidget and handled
in the WindowPod, but after that it might be considered better
to just handle it in layout
.
MouseDown(MouseEvent)
Called when a mouse button is pressed.
MouseUp(MouseEvent)
Called when a mouse button is released.
MouseMove(MouseEvent)
Called when the mouse is moved.
The MouseMove
event is propagated to the active widget, if
there is one, otherwise to hot widgets (see HotChanged
).
If a widget loses its hot status due to MouseMove
then that specific
MouseMove
event is also still sent to that widget.
The MouseMove
event is also the primary mechanism for widgets
to set a cursor, for example to an I-bar inside a text widget. A
simple tactic is for the widget to unconditionally call
set_cursor
in the MouseMove handler, as MouseMove
is only
propagated to active or hot widgets.
Wheel(MouseEvent)
Called when the mouse wheel or trackpad is scrolled.
KeyDown(KeyEvent)
Called when a key is pressed.
KeyUp(KeyEvent)
Called when a key is released.
Because of repeat, there may be a number KeyDown
events before
a corresponding KeyUp
is sent.
Paste(Clipboard)
Called when a paste command is received.
Zoom(f64)
Called when the trackpad is pinched.
The value is a delta.
Timer(TimerToken)
Called on a timer event.
Request a timer event through EventCtx::request_timer()
. That will
cause a timer event later.
Note that timer events from other widgets may be delivered as well. Use
the token returned from the request_timer()
call to filter events more
precisely.
AnimFrame(u64)
Called at the beginning of a new animation frame.
On the first frame when transitioning from idle to animating, interval
will be 0. (This logic is presently per-window but might change to
per-widget to make it more consistent). Otherwise it is in nanoseconds.
The paint
method will be called shortly after this event is finished.
As a result, you should try to avoid doing anything computationally
intensive in response to an AnimFrame
event: it might make Druid miss
the monitor's refresh, causing lag or jerky animation.
Command(Command)
An event containing a Command
to be handled by the widget.
Command
s are messages, optionally with attached data, that can
may be generated from a number of sources:
- If your application uses menus (either window or context menus)
then the
MenuItem
s in the menu will each correspond to aCommand
. When the menu item is selected, thatCommand
will be delivered to the root widget of the appropriate window. - If you are doing work in another thread (using an
ExtEventSink
) thenCommand
s are the mechanism by which you communicate back to the main thread. - Widgets and other Druid components can send custom
Command
s at runtime, via methods such asEventCtx::submit_command
.
Notification(Notification)
A Notification
from one of this widget's descendants.
While handling events, widgets can submit notifications to be delivered to their ancestors immdiately after they return.
If you handle a Notification
, you should call EventCtx::set_handled
to stop the notification from being delivered to further ancestors.
Special considerations
Notifications are slightly different from other events; they originate inside Druid, and they are delivered as part of the handling of another event. In this sense, they can sort of be thought of as an augmentation of an event; they are a way for multiple widgets to coordinate the handling of an event.
Internal(InternalEvent)
Internal druid event.
This should always be passed down to descendant WidgetPod
s.
Implementations
impl Event
[src]
pub fn transform_scroll(
&self,
offset: Vec2,
viewport: Rect,
force: bool
) -> Option<Event>
[src]
&self,
offset: Vec2,
viewport: Rect,
force: bool
) -> Option<Event>
Transform the event for the contents of a scrolling container.
the force
flag is used to ensure an event is delivered even
if the cursor is out of the viewport, such as if the contents are active
or hot.
pub fn should_propagate_to_hidden(&self) -> bool
[src]
Whether this event should be sent to widgets which are currently not visible (for example the hidden tabs in a tabs widget).
Trait Implementations
Auto Trait Implementations
impl !RefUnwindSafe for Event
[src]
impl !Send for Event
[src]
impl !Sync for Event
[src]
impl Unpin for Event
[src]
impl !UnwindSafe for Event
[src]
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> RoundFrom<T> for T
pub fn round_from(x: T) -> T
impl<T, U> RoundInto<U> for T where
U: RoundFrom<T>,
U: RoundFrom<T>,
pub fn round_into(self) -> U
impl<T> Same<T> for T
type Output = T
Should always be Self
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,