Report cursor size to InputMethod

Co-authored-by: dcz-self <dcz-self@users.noreply.github.com>
This commit is contained in:
dcz 2025-05-01 13:03:54 +00:00 committed by Héctor Ramón Jiménez
parent e163333161
commit d22da7d261
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
5 changed files with 31 additions and 20 deletions

View file

@ -172,7 +172,7 @@ where
pub renderer: P::Renderer,
pub redraw_at: Option<Instant>,
preedit: Option<Preedit<P::Renderer>>,
ime_state: Option<(Point, input_method::Purpose)>,
ime_state: Option<(Rectangle, input_method::Purpose)>,
}
impl<P, C> Window<P, C>
@ -215,11 +215,11 @@ where
self.disable_ime();
}
InputMethod::Enabled {
position,
cursor,
purpose,
preedit,
} => {
self.enable_ime(position, purpose);
self.enable_ime(cursor, purpose);
if let Some(preedit) = preedit {
if preedit.content.is_empty() {
@ -229,7 +229,7 @@ where
self.preedit.take().unwrap_or_else(Preedit::new);
overlay.update(
position,
cursor.position(),
&preedit,
self.state.background_color(),
&self.renderer,
@ -274,19 +274,23 @@ where
}
}
fn enable_ime(&mut self, position: Point, purpose: input_method::Purpose) {
fn enable_ime(
&mut self,
cursor: Rectangle,
purpose: input_method::Purpose,
) {
if self.ime_state.is_none() {
self.raw.set_ime_allowed(true);
}
if self.ime_state != Some((position, purpose)) {
if self.ime_state != Some((cursor, purpose)) {
self.raw.set_ime_cursor_area(
LogicalPosition::new(position.x, position.y),
LogicalSize::new(10, 10), // TODO?
LogicalPosition::new(cursor.x, cursor.y),
LogicalSize::new(cursor.width, cursor.height),
);
self.raw.set_ime_purpose(conversion::ime_purpose(purpose));
self.ime_state = Some((position, purpose));
self.ime_state = Some((cursor, purpose));
}
}