TEXT SELECTION
This commit is contained in:
@@ -9,8 +9,48 @@ pub fn error(ui: &mut Ui, msg: &str) -> WidgetId {
|
||||
.any()
|
||||
}
|
||||
|
||||
pub fn focus(id: WidgetId<TextEdit>, client: &mut Client, data: CursorData) {
|
||||
client.ui.text(&id).select(data.cursor, data.size);
|
||||
pub struct Selector;
|
||||
|
||||
impl<W: 'static> WidgetAttr<W> for Selector {
|
||||
type Input = WidgetId<TextEdit>;
|
||||
|
||||
fn run(ui: &mut Ui, container: &WidgetId<W>, id: Self::Input) {
|
||||
let container = container.clone();
|
||||
ui.register_event(
|
||||
&container.clone(),
|
||||
CursorSense::click_or_drag(),
|
||||
move |client: &mut Client, mut data| {
|
||||
let id_pos = client.ui.window_region(&id).unwrap().top_left;
|
||||
let container_pos = client.ui.window_region(&container).unwrap().top_left;
|
||||
data.cursor += container_pos - id_pos;
|
||||
select(id.clone(), client, data);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Selectable;
|
||||
|
||||
impl WidgetAttr<TextEdit> for Selectable {
|
||||
type Input = ();
|
||||
|
||||
fn run(ui: &mut Ui, id: &WidgetId<TextEdit>, _: Self::Input) {
|
||||
let id = id.clone();
|
||||
ui.register_event(
|
||||
&id.clone(),
|
||||
CursorSense::click_or_drag(),
|
||||
move |client: &mut Client, data| {
|
||||
select(id.clone(), client, data);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn select(id: WidgetId<TextEdit>, client: &mut Client, data: CursorData) {
|
||||
client
|
||||
.ui
|
||||
.text(&id)
|
||||
.select(data.cursor, data.size, data.sense.is_dragging());
|
||||
if let Some(region) = client.ui.window_region(&id) {
|
||||
client.handle.window.set_ime_allowed(true);
|
||||
client.handle.window.set_ime_cursor_area(
|
||||
@@ -21,13 +61,6 @@ pub fn focus(id: WidgetId<TextEdit>, client: &mut Client, data: CursorData) {
|
||||
client.focus = Some(id);
|
||||
}
|
||||
|
||||
pub fn focus_other(id: WidgetId<TextEdit>) -> impl Fn(&mut Client, CursorData) {
|
||||
move |client: &mut Client, data: CursorData| {
|
||||
focus(id.clone(), client, data);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn hint(msg: impl Into<String>) -> TextBuilder {
|
||||
text(msg).size(20).color(Color::GRAY)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user