#[derive(Debug, Clone)]
pub enum InputMethodEvent {
Activate {
serial: u32,
},
Deactivate,
SurroundingText {
text: String,
cursor: u32,
anchor: u32,
},
TextChangeCause(ChangeCause),
ContentType {
hint: ContentHint,
purpose: ContentPurpose,
},
Done,
PopupSurfaceCreated {
x: i32,
y: i32,
width: i32,
height: i32,
},
Unavailable,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum ChangeCause {
InputMethod,
#[default]
Other,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct ContentHint {
pub completion: bool,
pub spellcheck: bool,
pub auto_capitalization: bool,
pub lowercase: bool,
pub uppercase: bool,
pub titlecase: bool,
pub hidden_text: bool,
pub sensitive_data: bool,
pub latin: bool,
pub multiline: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum ContentPurpose {
#[default]
Normal,
Alpha,
Digits,
Number,
Phone,
Url,
Email,
Name,
Password,
Pin,
Date,
Time,
Datetime,
Terminal,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum PreeditStyle {
#[default]
Default,
None,
Active,
Inactive,
Highlight,
Underline,
Selection,
Incorrect,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct CursorRect {
pub x: i32,
pub y: i32,
pub width: i32,
pub height: i32,
}
#[derive(Debug, Default, Clone)]
pub struct InputMethodState {
pub active: bool,
pub serial: u32,
pub surrounding_text: Option<String>,
pub cursor: u32,
pub anchor: u32,
pub content_hint: ContentHint,
pub content_purpose: ContentPurpose,
pub change_cause: ChangeCause,
pub preedit_text: Option<String>,
pub preedit_cursor: i32,
pub commit_text: Option<String>,
pub delete_before: u32,
pub delete_after: u32,
}
impl InputMethodState {
pub fn new() -> Self {
Self::default()
}
pub fn reset(&mut self) {
self.active = false;
self.surrounding_text = None;
self.cursor = 0;
self.anchor = 0;
self.preedit_text = None;
self.preedit_cursor = 0;
self.commit_text = None;
self.delete_before = 0;
self.delete_after = 0;
}
pub fn clear_pending(&mut self) {
self.preedit_text = None;
self.preedit_cursor = 0;
self.commit_text = None;
self.delete_before = 0;
self.delete_after = 0;
}
}