27 lines
868 B
Rust
27 lines
868 B
Rust
use crate::prelude::*;
|
|
use winit::dpi::{PhysicalPosition, PhysicalSize};
|
|
|
|
impl<T: HasDefaultUiState> FocusHost for T {
|
|
fn recent_click(&mut self) -> bool {
|
|
crate::attr::recent_click(&mut self.default_state_mut().last_click)
|
|
}
|
|
|
|
fn set_focus(&mut self, id: Option<WeakWidget<TextEdit>>) {
|
|
self.default_state_mut().focus = id;
|
|
}
|
|
|
|
fn is_focused(&self, id: WeakWidget<TextEdit>) -> bool {
|
|
self.default_state().focus == Some(id)
|
|
}
|
|
|
|
fn focus_gained(&mut self, region: Option<PixelRegion>) {
|
|
let state = self.default_state_mut();
|
|
let Some(region) = region else { return };
|
|
state.window.set_ime_allowed(true);
|
|
state.window.set_ime_cursor_area(
|
|
PhysicalPosition::<f32>::from(region.top_left.tuple()),
|
|
PhysicalSize::<f32>::from(region.size().tuple()),
|
|
);
|
|
}
|
|
}
|