Struct rerun::external::eframe::egui::InputState

pub struct InputState {
Show 21 fields pub raw: RawInput, pub pointer: PointerState, touch_states: BTreeMap<TouchDeviceId, TouchState>, last_scroll_time: f64, unprocessed_scroll_delta: Vec2, unprocessed_scroll_delta_for_zoom: f32, pub raw_scroll_delta: Vec2, pub smooth_scroll_delta: Vec2, zoom_factor_delta: f32, pub screen_rect: Rect, pub pixels_per_point: f32, pub max_texture_side: usize, pub time: f64, pub unstable_dt: f32, pub predicted_dt: f32, pub stable_dt: f32, pub focused: bool, pub modifiers: Modifiers, pub keys_down: HashSet<Key>, pub events: Vec<Event>, input_options: InputOptions,
}
Expand description

Input state that egui updates each frame.

You can access this with crate::Context::input.

You can check if egui is using the inputs using crate::Context::wants_pointer_input and crate::Context::wants_keyboard_input.

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.

§touch_states: BTreeMap<TouchDeviceId, TouchState>§last_scroll_time: f64§unprocessed_scroll_delta: Vec2§unprocessed_scroll_delta_for_zoom: f32§raw_scroll_delta: Vec2

You probably want to use Self::smooth_scroll_delta instead.

The raw input of how many points the user scrolled.

The delta dictates how the content should move.

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.

When using a notched scroll-wheel this will spike very large for one frame, then drop to zero. For a smoother experience, use Self::smooth_scroll_delta.

§smooth_scroll_delta: Vec2

How many points the user scrolled, smoothed over a few frames.

The delta dictates how the content should move.

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.

crate::ScrollArea will both read and write to this field, so that at the end of the frame this will be zero if a scroll-area consumed the delta.

§zoom_factor_delta: f32§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.

§max_texture_side: usize

Maximum size of one side of a texture.

This depends on the backend.

§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). For animations it is therefore better to use Self::stable_dt.

§predicted_dt: f32

Estimated time until next frame (provided we repaint right away).

Used for animations to get instant feedback (avoid frame delay). Should be set to the expected time between frames when painting at vsync speeds.

On most integrations this has a fixed value of 1.0 / 60.0, so it is not a very accurate estimate.

§stable_dt: f32

Time since last frame (in seconds), but gracefully handles the first frame after sleeping in reactive mode.

In reactive mode (available in e.g. eframe), egui only updates when there is new input or something is animating. This can lead to large gaps of time (sleep), leading to large Self::unstable_dt.

If egui requested a repaint the previous frame, then egui will use stable_dt = unstable_dt;, but if egui did not not request a repaint last frame, then egui will assume unstable_dt is too large, and will use stable_dt = predicted_dt;.

This means that for the first frame after a sleep, stable_dt will be a prediction of the delta-time until the next frame, and in all other situations this will be an accurate measurement of time passed since the previous frame.

Note that a frame can still stall for various reasons, so stable_dt can still be unusually large in some situations.

When animating something, it is recommended that you use something like stable_dt.min(0.1) - this will give you smooth animations when the framerate is good (even in reactive mode), but will avoid large jumps when framerate is bad, and will effectively slow down the animation when FPS drops below 10.

§focused: bool

The native window has the keyboard focus (i.e. is receiving key presses).

False when the user alt-tab away from the application, for instance.

§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

§input_options: InputOptions

Implementations§

§

impl InputState

pub fn begin_pass( self, new: RawInput, requested_immediate_repaint_prev_frame: bool, pixels_per_point: f32, options: &Options ) -> InputState

pub fn viewport(&self) -> &ViewportInfo

Info about the active viewport

pub fn screen_rect(&self) -> Rect

pub fn zoom_delta(&self) -> f32

Zoom scale factor this frame (e.g. from ctrl-scroll or pinch gesture).

  • zoom = 1: no change
  • zoom < 1: pinch together
  • zoom > 1: pinch spread

pub fn zoom_delta_2d(&self) -> Vec2

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 change
  • zoom < 1: pinch together
  • zoom > 1: pinch spread

pub fn time_since_last_scroll(&self) -> f32

How long has it been (in seconds) since the use last scrolled?

pub fn wants_repaint_after(&self) -> Option<Duration>

The crate::Context will call this at the end of each frame to see if we need a repaint.

Returns how long to wait for a repaint.

pub fn count_and_consume_key( &mut self, modifiers: Modifiers, logical_key: Key ) -> usize

Count presses of a key. If non-zero, the presses are consumed, so that this will only return non-zero once.

Includes key-repeat events.

This uses Modifiers::matches_logically to match modifiers, meaning extra Shift and Alt modifiers are ignored. Therefore, you should match most specific shortcuts first, i.e. check for Cmd-Shift-S (“Save as…”) before Cmd-S (“Save”), so that a user pressing Cmd-Shift-S won’t trigger the wrong command!

pub fn consume_key(&mut self, modifiers: Modifiers, logical_key: Key) -> bool

Check for a key press. If found, true is returned and the key pressed is consumed, so that this will only return true once.

Includes key-repeat events.

This uses Modifiers::matches_logically to match modifiers, meaning extra Shift and Alt modifiers are ignored. Therefore, you should match most specific shortcuts first, i.e. check for Cmd-Shift-S (“Save as…”) before Cmd-S (“Save”), so that a user pressing Cmd-Shift-S won’t trigger the wrong command!

pub fn consume_shortcut(&mut self, shortcut: &KeyboardShortcut) -> bool

Check if the given shortcut has been pressed.

If so, true is returned and the key pressed is consumed, so that this will only return true once.

This uses Modifiers::matches_logically to match modifiers, meaning extra Shift and Alt modifiers are ignored. Therefore, you should match most specific shortcuts first, i.e. check for Cmd-Shift-S (“Save as…”) before Cmd-S (“Save”), so that a user pressing Cmd-Shift-S won’t trigger the wrong command!

pub fn key_pressed(&self, desired_key: Key) -> bool

Was the given key pressed this frame?

Includes key-repeat events.

pub fn num_presses(&self, desired_key: Key) -> usize

How many times was the given key pressed this frame?

Includes key-repeat events.

pub fn key_down(&self, desired_key: Key) -> bool

Is the given key currently held down?

pub fn key_released(&self, desired_key: Key) -> bool

Was the given key released this frame?

pub fn pixels_per_point(&self) -> f32

Also known as device pixel ratio, > 1 for high resolution screens.

pub fn physical_pixel_size(&self) -> f32

Size of a physical pixel in logical gui coordinates (points).

pub fn aim_radius(&self) -> f32

How imprecise do we expect the mouse/touch input to be? Returns imprecision in points.

pub fn multi_touch(&self) -> Option<MultiTouchInfo>

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
let multi_touch = ui.input(|i| i.multi_touch());
if let Some(multi_touch) = 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. eframe 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.

pub fn any_touches(&self) -> bool

True if there currently are any fingers touching egui.

pub fn has_touch_screen(&self) -> bool

True if we have ever received a touch event.

pub fn accesskit_action_requests( &self, id: Id, action: Action ) -> impl Iterator<Item = &ActionRequest>

pub fn has_accesskit_action_request(&self, id: Id, action: Action) -> bool

pub fn num_accesskit_action_requests(&self, id: Id, action: Action) -> usize

pub fn filtered_events(&self, filter: &EventFilter) -> Vec<Event>

Get all events that matches the given filter.

§

impl InputState

pub fn ui(&self, ui: &mut Ui)

Trait Implementations§

§

impl Clone for InputState

§

fn clone(&self) -> InputState

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for InputState

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl Default for InputState

§

fn default() -> InputState

Returns the “default value” for a type. Read more
§

impl<'de> Deserialize<'de> for InputState

§

fn deserialize<__D>( __deserializer: __D ) -> Result<InputState, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
§

impl Serialize for InputState

§

fn serialize<__S>( &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Az for T

source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

source§

fn cast_from(src: Src) -> Dst

Casts the value.
source§

impl<T> CheckedAs for T

source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for T
where T: Clone,

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FromRef<T> for T
where T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
source§

impl<T> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
source§

impl<Src, Dst> LosslessTryInto<Dst> for Src
where Dst: LosslessTryFrom<Src>,

source§

fn lossless_try_into(self) -> Option<Dst>

Performs the conversion.
source§

impl<Src, Dst> LossyInto<Dst> for Src
where Dst: LossyFrom<Src>,

source§

fn lossy_into(self) -> Dst

Performs the conversion.
§

impl<T> NoneValue for T
where T: Default,

§

type NoneType = T

§

fn null_value() -> T

The none-equivalent value.
source§

impl<T> OverflowingAs for T

source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> SaturatingAs for T

source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
§

impl<T> To for T
where T: ?Sized,

§

fn to<T>(self) -> T
where Self: Into<T>,

Converts to T by calling Into<T>::into.
§

fn try_to<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Tries to convert to T by calling TryInto<T>::try_into.
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> UnwrappedAs for T

source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
source§

impl<T> WrappingAs for T

source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.
§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

§

impl<T> SerializableAny for T
where T: 'static + Any + Clone + Serialize + for<'a> Deserialize<'a> + Send + Sync,

§

impl<T> Ungil for T
where T: Send,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T

§

impl<T> WasmNotSync for T
where T: Sync,