pub struct State {Show 14 fields
pub(crate) egui_ctx: Context,
pub(crate) viewport_id: ViewportId,
pub(crate) start_time: Instant,
pub(crate) egui_input: RawInput,
pub(crate) pointer_pos_in_points: Option<Pos2>,
pub(crate) any_pointer_button_down: bool,
pub(crate) current_cursor_icon: Option<CursorIcon>,
pub(crate) clipboard: Clipboard,
pub(crate) simulate_touch_screen: bool,
pub(crate) pointer_touch_id: Option<u64>,
pub(crate) has_sent_ime_enabled: bool,
pub accesskit: Option<Adapter>,
pub(crate) allow_ime: bool,
pub(crate) ime_rect_px: Option<Rect>,
}Expand description
Handles the integration between egui and a winit Window.
Instantiate one of these per viewport/window.
Fields§
§egui_ctx: ContextShared clone.
viewport_id: ViewportId§start_time: Instant§egui_input: RawInput§pointer_pos_in_points: Option<Pos2>§current_cursor_icon: Option<CursorIcon>§clipboard: Clipboard§simulate_touch_screen: boolIf true, mouse inputs will be treated as touches.
Useful for debugging touch support in egui.
Creates duplicate touches, if real touch inputs are coming.
pointer_touch_id: Option<u64>Is Some(…) when a touch is being translated to a pointer.
Only one touch will be interpreted as pointer at any time.
has_sent_ime_enabled: booltrack ime state
accesskit: Option<Adapter>§allow_ime: bool§ime_rect_px: Option<Rect>Implementations§
Source§impl State
impl State
Sourcepub fn new(
egui_ctx: Context,
viewport_id: ViewportId,
display_target: &dyn HasDisplayHandle,
native_pixels_per_point: Option<f32>,
theme: Option<Theme>,
max_texture_side: Option<usize>,
) -> Self
pub fn new( egui_ctx: Context, viewport_id: ViewportId, display_target: &dyn HasDisplayHandle, native_pixels_per_point: Option<f32>, theme: Option<Theme>, max_texture_side: Option<usize>, ) -> Self
Construct a new instance
pub fn init_accesskit<T: From<Event> + Send>( &mut self, event_loop: &ActiveEventLoop, window: &Window, event_loop_proxy: EventLoopProxy<T>, )
Sourcepub fn set_max_texture_side(&mut self, max_texture_side: usize)
pub fn set_max_texture_side(&mut self, max_texture_side: usize)
Call this once a graphics context has been created to update the maximum texture dimensions that egui will use.
Sourcepub fn clipboard_text(&mut self) -> Option<String>
pub fn clipboard_text(&mut self) -> Option<String>
Fetches text from the clipboard and returns it.
Sourcepub fn set_clipboard_text(&mut self, text: String)
pub fn set_clipboard_text(&mut self, text: String)
Places the text onto the clipboard.
Sourcepub fn allow_ime(&self) -> bool
pub fn allow_ime(&self) -> bool
Returns false or the last value that Window::set_ime_allowed() was called with, used for debouncing.
Sourcepub fn set_allow_ime(&mut self, allow: bool)
pub fn set_allow_ime(&mut self, allow: bool)
Set the last value that Window::set_ime_allowed() was called with.
pub fn egui_ctx(&self) -> &Context
Sourcepub fn egui_input(&self) -> &RawInput
pub fn egui_input(&self) -> &RawInput
The current input state.
This is changed by Self::on_window_event and cleared by Self::take_egui_input.
Sourcepub fn egui_input_mut(&mut self) -> &mut RawInput
pub fn egui_input_mut(&mut self) -> &mut RawInput
The current input state.
This is changed by Self::on_window_event and cleared by Self::take_egui_input.
Sourcepub fn take_egui_input(&mut self, window: &Window) -> RawInput
pub fn take_egui_input(&mut self, window: &Window) -> RawInput
Prepare for a new frame by extracting the accumulated input,
as well as setting the time and screen rectangle.
You need to set egui::RawInput::viewports yourself though.
Use update_viewport_info to update the info for each
viewport.
Sourcepub fn on_window_event(
&mut self,
window: &Window,
event: &WindowEvent,
) -> EventResponse
pub fn on_window_event( &mut self, window: &Window, event: &WindowEvent, ) -> EventResponse
Call this when there is a new event.
The result can be found in Self::egui_input and be extracted with Self::take_egui_input.
pub(crate) fn try_on_ime_processed_keyboard_input( &mut self, _event: &KeyEvent, _egui_wants_keyboard_input: bool, ) -> Option<EventResponse>
Sourcepub(crate) fn on_ime(&mut self, ime: &Ime)
pub(crate) fn on_ime(&mut self, ime: &Ime)
§NOTE
on Mac even Cmd-C is pressed during ime, a c is pushed to Preedit.
So no need to check is_mac_cmd.
§How events are emitted by winit across different setups in various situations
This is done by uncommenting the code block at the top of this method and checking console outputs.
winit version: 0.30.12.
§Setups
a-macos15-apple_shuangpin: macOS 15.7.3aarch64, IME: builtin Chinese Shuangpin - Simplified. (Demo app shows: renderer:wgpu, backend:Metal.)b-debian13_gnome48_wayland-fcitx5_shuangpin: Debian 13aarch64, Gnome 48, Wayland, IME: Fcitx5 with fcitx5-chinese-addons’s Shuangpin. (Demo app shows: renderer:wgpu, backend:Gl.)c-windows11-ms_pinyin: Windows11 23H2x86_64, IME: builtin Microsoft Pinyin. (Demo app shows: renderer:wgpu, backend:Vulkan&Dx12, others:Dx12&Gl.)
§Situation: pressed space to select the first candidate “测试”
| Setup | Events in Order |
|---|---|
| a-macos15-apple_shuangpin | Preedit("", None) -> Commit("测试") |
| b-debian13_gnome48_wayland-fcitx5_shuangpin | Preedit("", None) -> Commit("测试") -> Preedit("", Some(0, 0)) -> Preedit("", None) (duplicate until TextEdit blurred) |
| c-windows11-ms_pinyin | Preedit("测试", Some(…)) -> Preedit("", None) -> Commit("测试") -> Disabled |
§Situation: pressed backspace to delete the last character in the composition
| Setup | Events in Order |
| a-macos15-apple_shuangpin | Preedit("", None) |
| b-debian13_gnome48_wayland-fcitx5_shuangpin | Preedit("", Some(0, 0)) -> Preedit("", None) (duplicate until TextEdit blurred) |
| c-windows11-ms_pinyin | Preedit("", Some(0, 0)) -> Preedit("", None) -> Commit("") -> Disabled |
§Situation: clicked somewhere else while there is an active composition with the pre-edit text “ce”
| Setup | Events in Order |
|---|---|
| a-macos15-apple_shuangpin | nothing emitted |
| b-debian13_gnome48_wayland-fcitx5_shuangpin | Preedit("", Some(0, 0)) (duplicate) -> Preedit("", None) (duplicate until TextEdit blurred) |
| c-windows11-ms_pinyin | nothing emitted |
pub fn ime_event_enable(&mut self)
pub fn ime_event_disable(&mut self)
Sourcepub fn on_mouse_motion(&mut self, delta: (f64, f64)) -> bool
pub fn on_mouse_motion(&mut self, delta: (f64, f64)) -> bool
Returns true if the event was sent to egui.
Sourcepub fn is_pointer_in_window(&self) -> bool
pub fn is_pointer_in_window(&self) -> bool
Returns true when the pointer is currently inside the window.
Returns true if any pointer button is currently held down.
Sourcepub fn on_accesskit_action_request(&mut self, request: ActionRequest)
pub fn on_accesskit_action_request(&mut self, request: ActionRequest)
Call this when there is a new accesskit::ActionRequest.
The result can be found in Self::egui_input and be extracted with Self::take_egui_input.
pub(crate) fn on_cursor_moved( &mut self, window: &Window, pos_in_pixels: PhysicalPosition<f64>, )
pub(crate) fn on_touch(&mut self, window: &Window, touch: &Touch)
pub(crate) fn on_mouse_wheel( &mut self, window: &Window, delta: MouseScrollDelta, phase: TouchPhase, )
pub(crate) fn on_keyboard_input(&mut self, event: &KeyEvent)
Sourcepub fn handle_platform_output(
&mut self,
window: &Window,
platform_output: PlatformOutput,
)
pub fn handle_platform_output( &mut self, window: &Window, platform_output: PlatformOutput, )
Call with the output given by egui.
This will, if needed:
- update the cursor
- copy text to the clipboard
- open any clicked urls
- update the IME
pub(crate) fn set_cursor_icon( &mut self, window: &Window, cursor_icon: CursorIcon, )
Auto Trait Implementations§
impl Freeze for State
impl !RefUnwindSafe for State
impl Send for State
impl !Sync for State
impl Unpin for State
impl !UnwindSafe for State
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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