ui: soft input callback to separate function

This commit is contained in:
ardocrat 2024-05-18 22:50:08 +03:00
parent 42146f0d68
commit e7f808e5bc

View file

@ -17,7 +17,7 @@ use std::sync::Arc;
use parking_lot::RwLock; use parking_lot::RwLock;
use lazy_static::lazy_static; use lazy_static::lazy_static;
use egui::{Align, Button, CursorIcon, Layout, lerp, PointerState, Rect, Response, Rgba, RichText, Sense, Spinner, TextBuffer, TextStyle, Widget}; use egui::{Align, Button, CursorIcon, Id, Layout, lerp, PointerState, Rect, Response, Rgba, RichText, Sense, Spinner, TextBuffer, TextStyle, Ui, Widget};
use egui::epaint::{Color32, FontId, RectShape, Rounding, Stroke}; use egui::epaint::{Color32, FontId, RectShape, Rounding, Stroke};
use egui::epaint::text::TextWrapping; use egui::epaint::text::TextWrapping;
use egui::os::OperatingSystem; use egui::os::OperatingSystem;
@ -402,13 +402,23 @@ impl View {
text_edit_resp.request_focus(); text_edit_resp.request_focus();
cb.show_keyboard(); cb.show_keyboard();
} }
// Apply text from input on Android as temporary fix for egui. // Apply text from input on Android as temporary fix for egui.
if text_edit_resp.has_focus() {
Self::on_soft_input(ui, options.id, value);
}
});
});
}
/// Apply soft keyboard input data to provided String.
pub fn on_soft_input(ui: &mut Ui, id: Id, value: &mut String) {
let os = OperatingSystem::from_target_os(); let os = OperatingSystem::from_target_os();
if os == OperatingSystem::Android && text_edit_resp.has_focus() { if os == OperatingSystem::Android {
let mut w_input = LAST_SOFT_KEYBOARD_INPUT.write(); let mut w_input = LAST_SOFT_KEYBOARD_INPUT.write();
if !w_input.is_empty() { if !w_input.is_empty() {
let mut state = TextEditState::load(ui.ctx(), options.id).unwrap(); let mut state = TextEditState::load(ui.ctx(), id).unwrap();
match state.cursor.char_range() { match state.cursor.char_range() {
None => {} None => {}
Some(range) => { Some(range) => {
@ -427,7 +437,7 @@ impl View {
r.secondary.index = r.primary.index; r.secondary.index = r.primary.index;
} }
state.cursor.set_char_range(Some(r)); state.cursor.set_char_range(Some(r));
TextEditState::store(state, ui.ctx(), options.id); TextEditState::store(state, ui.ctx(), id);
} }
} }
} }
@ -435,8 +445,6 @@ impl View {
*w_input = "".to_string(); *w_input = "".to_string();
ui.ctx().request_repaint(); ui.ctx().request_repaint();
} }
});
});
} }
/// Calculate item background/button rounding based on item index. /// Calculate item background/button rounding based on item index.