mirror of
https://github.com/emilk/egui.git
synced 2026-06-27 15:13:12 -04:00
# What's New * eframe: Added `App::raw_input_hook` allows for the manipulation or filtering of raw input events A filter applied to raw input before [`Self::update`] This allows for the manipulation or filtering of input events before they are processed by egui. This can be used to exclude specific keyboard shortcuts, mouse events, etc. Additionally, it can be used to add custom keyboard or mouse events generated by a virtual keyboard. * examples: Added an example to demonstrates how to implement a custom virtual keyboard. [eframe-custom-keypad.webm](https://github.com/emilk/egui/assets/1274171/a9dc8e34-2c35-4172-b7ef-41010b794fb8)
69 lines
1.9 KiB
Rust
69 lines
1.9 KiB
Rust
// #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release
|
|
use eframe::egui;
|
|
|
|
mod keypad;
|
|
use keypad::Keypad;
|
|
|
|
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([640.0, 480.0]),
|
|
..Default::default()
|
|
};
|
|
eframe::run_native(
|
|
"Custom Keypad App",
|
|
options,
|
|
Box::new(|cc| {
|
|
// Use the dark theme
|
|
cc.egui_ctx.set_visuals(egui::Visuals::dark());
|
|
// This gives us image support:
|
|
egui_extras::install_image_loaders(&cc.egui_ctx);
|
|
|
|
Box::<MyApp>::default()
|
|
}),
|
|
)
|
|
}
|
|
|
|
struct MyApp {
|
|
name: String,
|
|
age: u32,
|
|
keypad: Keypad,
|
|
}
|
|
|
|
impl MyApp {}
|
|
|
|
impl Default for MyApp {
|
|
fn default() -> Self {
|
|
Self {
|
|
name: "Arthur".to_owned(),
|
|
age: 42,
|
|
keypad: Keypad::new(),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl eframe::App for MyApp {
|
|
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
|
|
egui::Window::new("Custom Keypad")
|
|
.default_pos([100.0, 100.0])
|
|
.title_bar(true)
|
|
.show(ctx, |ui| {
|
|
ui.horizontal(|ui| {
|
|
ui.label("Your name: ");
|
|
ui.text_edit_singleline(&mut self.name);
|
|
});
|
|
ui.add(egui::Slider::new(&mut self.age, 0..=120).text("age"));
|
|
if ui.button("Increment").clicked() {
|
|
self.age += 1;
|
|
}
|
|
ui.label(format!("Hello '{}', age {}", self.name, self.age));
|
|
});
|
|
|
|
self.keypad.show(ctx);
|
|
}
|
|
|
|
fn raw_input_hook(&mut self, ctx: &egui::Context, raw_input: &mut egui::RawInput) {
|
|
self.keypad.bump_events(ctx, raw_input);
|
|
}
|
|
}
|