pub enum Event {
Show 16 variants
Copy,
Cut,
Paste(String),
Text(String),
Key {
key: Key,
physical_key: Option<Key>,
pressed: bool,
repeat: bool,
modifiers: Modifiers,
},
PointerMoved(Pos2),
MouseMoved(Vec2),
PointerButton {
pos: Pos2,
button: PointerButton,
pressed: bool,
modifiers: Modifiers,
},
PointerGone,
Zoom(f32),
Ime(ImeEvent),
Touch {
device_id: TouchDeviceId,
id: TouchId,
phase: TouchPhase,
pos: Pos2,
force: Option<f32>,
},
MouseWheel {
unit: MouseWheelUnit,
delta: Vec2,
modifiers: Modifiers,
},
WindowFocused(bool),
AccessKitActionRequest(ActionRequest),
Screenshot {
viewport_id: ViewportId,
image: Arc<ColorImage>,
},
}
Expand description
An input event generated by the integration.
This only covers events that egui cares about.
Variants§
Copy
The integration detected a “copy” event (e.g. Cmd+C).
Cut
The integration detected a “cut” event (e.g. Cmd+X).
Paste(String)
The integration detected a “paste” event (e.g. Cmd+V).
Text(String)
Text input, e.g. via keyboard.
When the user presses enter/return, do not send a Text
(just Key::Enter
).
Key
A key was pressed or released.
Fields
key: Key
Most of the time, it’s the logical key, heeding the active keymap – for instance, if the user has Dvorak keyboard layout, it will be taken into account.
If it’s impossible to determine the logical key on desktop platforms (say, in case of non-Latin letters),
key
falls back to the value of the corresponding physical key. This is necessary for proper work of
standard shortcuts that only respond to Latin-based bindings (such as Ctrl
+ V
).
physical_key: Option<Key>
The physical key, corresponding to the actual position on the keyboard.
This ignores keymaps, so it is not recommended to use this. The only thing it makes sense for is things like games, where e.g. the physical location of WSAD on QWERTY should always map to movement, even if the user is using Dvorak or AZERTY.
eframe
does not (yet) implement this on web.
repeat: bool
If this is a pressed
event, is it a key-repeat?
On many platforms, holding down a key produces many repeated “pressed” events for it, so called key-repeats. Sometimes you will want to ignore such events, and this lets you do that.
egui will automatically detect such repeat events and mark them as such here.
Therefore, if you are writing an egui integration, you do not need to set this (just set it to false
).
PointerMoved(Pos2)
The mouse or touch moved to a new place.
MouseMoved(Vec2)
The mouse moved, the units are unspecified.
Represents the actual movement of the mouse, without acceleration or clamped by screen edges.
PointerMoved
and MouseMoved
can be sent at the same time.
This event is optional. If the integration can not determine unfiltered motion it should not send this event.
PointerButton
A mouse button was pressed or released (or a touch started or stopped).
Fields
What mouse button? For touches, use PointerButton::Primary
.
PointerGone
The mouse left the screen, or the last/primary touch input disappeared.
This means there is no longer a cursor on the screen for hovering etc.
On touch-up first send PointerButton{pressed: false, …}
followed by PointerLeft
.
Zoom(f32)
Zoom scale factor this frame (e.g. from a pinch gesture).
zoom = 1
: no change.zoom < 1
: pinch togetherzoom > 1
: pinch spread
Note that egui also implement zooming by holding Ctrl
and scrolling the mouse wheel,
so integration need NOT emit this Zoom
event in those cases, just Self::MouseWheel
.
As a user, check crate::InputState::smooth_scroll_delta
to see if the user did any zooming this frame.
Ime(ImeEvent)
IME Event
Touch
On touch screens, report this in addition to
Self::PointerMoved
, Self::PointerButton
, Self::PointerGone
Fields
device_id: TouchDeviceId
Hashed device identifier (if available; may be zero). Can be used to separate touches from different devices.
phase: TouchPhase
One of: start move end cancel.
MouseWheel
A raw mouse wheel event as sent by the backend.
Used for scrolling.
Fields
unit: MouseWheelUnit
The unit of delta
: points, lines, or pages.
delta: Vec2
The direction of the vector indicates how to move the content that is being viewed. So if you get positive values, the content being viewed should move to the right and down, revealing new things to the left and up.
A positive X-value indicates the content is being moved right, as when swiping right on a touch-screen or track-pad with natural scrolling.
A positive Y-value indicates the content is being moved down, as when swiping down on a touch-screen or track-pad with natural scrolling.
WindowFocused(bool)
The native window gained or lost focused (e.g. the user clicked alt-tab).
AccessKitActionRequest(ActionRequest)
An assistive technology (e.g. screen reader) requested an action.
Screenshot
The reply of a screenshot requested with crate::ViewportCommand::Screenshot
.
Trait Implementations§
source§impl<'de> Deserialize<'de> for Event
impl<'de> Deserialize<'de> for Event
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl StructuralPartialEq for Event
Auto Trait Implementations§
impl Freeze for Event
impl RefUnwindSafe for Event
impl Send for Event
impl Sync for Event
impl Unpin for Event
impl UnwindSafe for Event
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more