chrome: greatly improve soft-keyboard visibility & layout handling
Some checks failed
CI / Rustfmt + Clippy (push) Has been cancelled
CI / Check (android) (push) Has been cancelled
CI / Test (Linux) (push) Has been cancelled
CI / Test (macOS) (push) Has been cancelled
CI / Test (Windows) (push) Has been cancelled
CI / rpm/deb (aarch64) (push) Has been cancelled
CI / rpm/deb (x86_64) (push) Has been cancelled
CI / macOS dmg (aarch64) (push) Has been cancelled
CI / macOS dmg (x86_64) (push) Has been cancelled
CI / Windows Installer (aarch64) (push) Has been cancelled
CI / Windows Installer (x86_64) (push) Has been cancelled
CI / Upload Artifacts to Server (push) Has been cancelled
Some checks failed
CI / Rustfmt + Clippy (push) Has been cancelled
CI / Check (android) (push) Has been cancelled
CI / Test (Linux) (push) Has been cancelled
CI / Test (macOS) (push) Has been cancelled
CI / Test (Windows) (push) Has been cancelled
CI / rpm/deb (aarch64) (push) Has been cancelled
CI / rpm/deb (x86_64) (push) Has been cancelled
CI / macOS dmg (aarch64) (push) Has been cancelled
CI / macOS dmg (x86_64) (push) Has been cancelled
CI / Windows Installer (aarch64) (push) Has been cancelled
CI / Windows Installer (x86_64) (push) Has been cancelled
CI / Upload Artifacts to Server (push) Has been cancelled
This reworks how we detect and respond to the on-screen keyboard so inputs don’t get buried and the UI doesn’t “jump”. - Add SoftKeyboardAnim + AnimState FSM for smooth IME open/close animation - Centralize logic in keyboard_visibility() with clear edge states - Animate keyboard height via animate_value_with_time instead of layer transforms - Add ChromeOptions::KeyboardVisibility flag when focused input would be occluded - Add SidebarOptions::Compact to collapse sidebar while typing - Hide mobile toolbar when keyboard is open (columns app) - Use .stick_to_bottom(true) in reply + profile editors; remove old spacer hack - Virtual keyboard toggle moved to F1 in Debug builds - Introduce SoftKeyboardContext::platform(ctx) helper - Cleanup dead/commented code and wire up soft_kb_anim_state in Chrome Result: inputs stay visible, open/close is smooth, and UI adjusts gracefully when typing. Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
@@ -40,6 +40,14 @@ pub enum SoftKeyboardContext {
|
||||
Platform { ppp: f32 },
|
||||
}
|
||||
|
||||
impl SoftKeyboardContext {
|
||||
pub fn platform(context: &egui::Context) -> Self {
|
||||
Self::Platform {
|
||||
ppp: context.pixels_per_point(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> AppContext<'a> {
|
||||
pub fn soft_keyboard_rect(&self, screen_rect: Rect, ctx: SoftKeyboardContext) -> Option<Rect> {
|
||||
match ctx {
|
||||
@@ -53,8 +61,13 @@ impl<'a> AppContext<'a> {
|
||||
#[cfg(target_os = "android")]
|
||||
{
|
||||
use android_activity::InsetType;
|
||||
|
||||
// not sure why I need this, it seems to be consistently off by some amount of
|
||||
// pixels ?
|
||||
let fudge = 0.0;
|
||||
|
||||
let inset = self.android.get_window_insets(InsetType::Ime);
|
||||
let height = inset.bottom as f32 / ppp;
|
||||
let height = (inset.bottom as f32 / ppp) - fudge;
|
||||
skb_rect_from_screen_rect(screen_rect, height)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user