Comments (3)
This is because the TextEdit gains focus as soon as the mouse pressed down on it, but the frame after the mouse button is still down, and now TextEdit treats it as a drag-to-select sort of situation.
Not sure how to proceed here
from egui.
I guess a workaround would then be a mini state machine to trigger select on the frame after gain_focus
...
from egui.
This work-around sort-of-works. Nothing is selected so long as the mouse is down and the selection becomes correct on mouse release.
Some/all of these request repaint might be superfluous as mouse state change would trigger the draw anyways.
use eframe::egui;
fn main() -> Result<(), eframe::Error> {
env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`).
let options = eframe::NativeOptions {
viewport: egui::ViewportBuilder::default().with_inner_size([320.0, 240.0]),
..Default::default()
};
eframe::run_native(
"My egui App",
options,
Box::new(|cc| {
// This gives us image support:
egui_extras::install_image_loaders(&cc.egui_ctx);
Box::<MyApp>::default()
}),
)
}
struct MyApp {
name: String,
focus_gained: bool,
}
impl Default for MyApp {
fn default() -> Self {
Self {
name: "Arthur".to_owned(),
focus_gained: false,
}
}
}
impl eframe::App for MyApp {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
egui::CentralPanel::default().show(ctx, |ui| {
ui.heading("My egui Application");
ui.horizontal(|ui| {
ui.label("Your name: ");
let mut output = egui::TextEdit::singleline(&mut self.name).show(ui);
if output.response.gained_focus() {
self.focus_gained = true;
ctx.request_repaint();
}
if self.focus_gained {
// wait for the mouse to be released before selecting all
if ui.input(|i| !i.pointer.any_down()) {
self.focus_gained = false;
output.response.request_focus();
let min = egui::text::CCursor::new(0);
let max = egui::text::CCursor::new(self.name.len());
let new_range = egui::text::CCursorRange::two(min, max);
output.state.cursor.set_char_range(Some(new_range));
output.state.store(ui.ctx(), output.response.id);
} else {
ctx.request_repaint();
}
}
});
});
}
}
from egui.
Related Issues (20)
- Introduce a new Operation<T> enum for widgets with from_get_set HOT 2
- When making a Pull Request, it takes too much time to 12 `cargo-deny` items. HOT 1
- Context menu on the TextEdit widget
- egui access_kit API docs HOT 1
- Close Window or Frame HOT 2
- Smooth scrolling introduced latency
- Android WASM google keyboard backspace not working with suggestions
- web_demo: Table: Does not fill entire height
- Firefox panic with parking_lot (Parking not supported on this platform) HOT 5
- Scrollbars and other draggable elements get stuck mouse leaves browser window HOT 2
- [Web Rendering Bug]: Unexpected Height Event Setter Behavior on Mouse Move when Integrating Yew with Egui HOT 4
- After the #4337 update, the 'egui_demo_app' screen does not appear.
- eframe demo panic on startup
- Feature to get target refresh rate HOT 4
- Not detecting mouse release after alt-tab on windows
- egui_glow's winit feature should be enabled on wasm
- Context Menus demo crashes on negative width or height HOT 2
- Add ability to disable hover tooltip on TextWrapping HOT 2
- Chinese can be entered in the first position of text_editor, but not in other positions HOT 20
- egui_plot formatter, spacer etc. should not need to be 'static
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from egui.