Struct egui::InputState [−][src]
pub struct InputState { pub raw: RawInput, pub pointer: PointerState, pub scroll_delta: Vec2, pub screen_rect: Rect, pub pixels_per_point: f32, pub time: f64, pub unstable_dt: f32, pub predicted_dt: f32, pub modifiers: Modifiers, pub keys_down: HashSet<Key>, pub events: Vec<Event>, // some fields omitted }
Input state that egui updates each frame.
Fields
raw: RawInput
The raw input we got this frame from the backend.
pointer: PointerState
State of the mouse or simple touch gestures which can be mapped to mouse operations.
scroll_delta: Vec2
How many pixels the user scrolled.
screen_rect: Rect
Position and size of the egui area.
pixels_per_point: f32
Also known as device pixel ratio, > 1 for high resolution screens.
time: f64
Time in seconds. Relative to whatever. Used for animation.
unstable_dt: f32
Time since last frame, in seconds.
This can be very unstable in reactive mode (when we don’t paint each frame)
so it can be smart to use e.g. unstable_dt.min(1.0 / 30.0)
.
predicted_dt: f32
Used for animations to get instant feedback (avoid frame delay). Should be set to the expected time between frames when painting at vsync speeds.
modifiers: Modifiers
Which modifier keys are down at the start of the frame?
keys_down: HashSet<Key>
events: Vec<Event>
In-order events received this frame
Implementations
impl InputState
[src]
impl InputState
[src]#[must_use]pub fn begin_frame(self, new: RawInput) -> InputState
[src]
pub fn screen_rect(&self) -> Rect
[src]
pub fn zoom_delta(&self) -> f32
[src]
pub fn zoom_delta(&self) -> f32
[src]Zoom scale factor this frame (e.g. from ctrl-scroll or pinch gesture).
zoom = 1
: no changezoom < 1
: pinch togetherzoom > 1
: pinch spread
pub fn zoom_delta_2d(&self) -> Vec2
[src]
pub fn zoom_delta_2d(&self) -> Vec2
[src]2D non-proportional zoom scale factor this frame (e.g. from ctrl-scroll or pinch gesture).
For multitouch devices the user can do a horizontal or vertical pinch gesture.
In these cases a non-proportional zoom factor is a available.
In other cases, this reverts to Vec2::splat(self.zoom_delta())
.
For horizontal pinches, this will return [z, 1]
,
for vertical pinches this will return [1, z]
,
and otherwise this will return [z, z]
,
where z
is the zoom factor:
zoom = 1
: no changezoom < 1
: pinch togetherzoom > 1
: pinch spread
pub fn wants_repaint(&self) -> bool
[src]
pub fn key_pressed(&self, desired_key: Key) -> bool
[src]
pub fn key_pressed(&self, desired_key: Key) -> bool
[src]Was the given key pressed this frame?
pub fn num_presses(&self, desired_key: Key) -> usize
[src]
pub fn num_presses(&self, desired_key: Key) -> usize
[src]How many times were the given key pressed this frame?
pub fn key_released(&self, desired_key: Key) -> bool
[src]
pub fn key_released(&self, desired_key: Key) -> bool
[src]Was the given key released this frame?
pub fn pixels_per_point(&self) -> f32
[src]
pub fn pixels_per_point(&self) -> f32
[src]Also known as device pixel ratio, > 1 for high resolution screens.
pub fn physical_pixel_size(&self) -> f32
[src]
pub fn physical_pixel_size(&self) -> f32
[src]Size of a physical pixel in logical gui coordinates (points).
pub fn aim_radius(&self) -> f32
[src]
pub fn aim_radius(&self) -> f32
[src]How imprecise do we expect the mouse/touch input to be? Returns imprecision in points.
pub fn multi_touch(&self) -> Option<MultiTouchInfo>
[src]
pub fn multi_touch(&self) -> Option<MultiTouchInfo>
[src]Returns details about the currently ongoing multi-touch gesture, if any. Note that this
method returns None
for single-touch gestures (click, drag, …).
let mut zoom = 1.0; // no zoom let mut rotation = 0.0; // no rotation if let Some(multi_touch) = ui.input().multi_touch() { zoom *= multi_touch.zoom_delta; rotation += multi_touch.rotation_delta; } let transform = zoom * Rot2::from_angle(rotation);
By far not all touch devices are supported, and the details depend on the egui
integration backend you are using. egui_web
supports multi touch for most mobile
devices, but not for a Trackpad
on MacOS
, for example. The backend has to be able to
capture native touch events, but many browsers seem to pass such events only for touch
screens, but not touch pads.
Refer to MultiTouchInfo
for details about the touch information available.
Consider using zoom_delta()
instead of MultiTouchInfo::zoom_delta
as the former
delivers a synthetic zoom factor based on ctrl-scroll events, as a fallback.
impl InputState
[src]
impl InputState
[src]Trait Implementations
impl Clone for InputState
[src]
impl Clone for InputState
[src]fn clone(&self) -> InputState
[src]
fn clone(&self) -> InputState
[src]Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)
1.0.0[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]Performs copy-assignment from source
. Read more
impl Debug for InputState
[src]
impl Debug for InputState
[src]Auto Trait Implementations
impl RefUnwindSafe for InputState
impl Send for InputState
impl Sync for InputState
impl Unpin for InputState
impl UnwindSafe for InputState
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]pub fn borrow_mut(&mut self) -> &mut T
[src]
pub fn borrow_mut(&mut self) -> &mut T
[src]Mutably borrows from an owned value. Read more
impl<T> ToOwned for T where
T: Clone,
[src]
impl<T> ToOwned for T where
T: Clone,
[src]type Owned = T
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn to_owned(&self) -> T
[src]Creates owned data from borrowed data, usually by cloning. Read more
pub fn clone_into(&self, target: &mut T)
[src]
pub fn clone_into(&self, target: &mut T)
[src]🔬 This is a nightly-only experimental API. (toowned_clone_into
)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more