115 lines
4.3 KiB
Rust
115 lines
4.3 KiB
Rust
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release
|
|
#![allow(rustdoc::missing_crate_level_docs)] // it's a test
|
|
|
|
use eframe::egui;
|
|
|
|
fn main() -> eframe::Result {
|
|
env_logger::init(); // Use `RUST_LOG=debug` to see logs.
|
|
|
|
let options = eframe::NativeOptions::default();
|
|
eframe::run_simple_native("My egui App", options, move |ctx, _frame| {
|
|
// A bottom panel to force the tooltips to consider if the fit below or under the widget:
|
|
egui::TopBottomPanel::bottom("bottom").show(ctx, |ui| {
|
|
ui.horizontal(|ui| {
|
|
ui.vertical(|ui| {
|
|
ui.label("Single tooltips:");
|
|
for i in 0..3 {
|
|
ui.label(format!("Hover label {i} for a tooltip"))
|
|
.on_hover_text("There is some text here");
|
|
}
|
|
});
|
|
ui.vertical(|ui| {
|
|
ui.label("Double tooltips:");
|
|
for i in 0..3 {
|
|
ui.label(format!("Hover label {i} for two tooltips"))
|
|
.on_hover_text("First tooltip")
|
|
.on_hover_text("Second tooltip");
|
|
}
|
|
});
|
|
});
|
|
ui.with_layout(egui::Layout::right_to_left(egui::Align::BOTTOM), |ui| {
|
|
ui.label("Hover for tooltip")
|
|
.on_hover_text("This is a rather long tooltip that needs careful positioning.");
|
|
});
|
|
});
|
|
|
|
egui::CentralPanel::default().show(ctx, |ui| {
|
|
ui.horizontal(|ui| {
|
|
if ui.button("Reset egui memory").clicked() {
|
|
ctx.memory_mut(|mem| *mem = Default::default());
|
|
}
|
|
|
|
ui.with_layout(egui::Layout::right_to_left(egui::Align::BOTTOM), |ui| {
|
|
ui.label("Hover for tooltip").on_hover_text(
|
|
"This is a rather long tooltip that needs careful positioning.",
|
|
);
|
|
ui.label("Hover for interactive tooltip").on_hover_ui(|ui| {
|
|
ui.label("This tooltip has a button:");
|
|
let _ = ui.button("Clicking me does nothing");
|
|
});
|
|
});
|
|
});
|
|
|
|
let has_tooltip = ui
|
|
.label("This label has a tooltip at the mouse cursor")
|
|
.on_hover_text_at_pointer("Told you!")
|
|
.is_tooltip_open();
|
|
|
|
let response = ui.label("This label gets a tooltip when the previous label is hovered");
|
|
if has_tooltip {
|
|
response.show_tooltip_text("The ever-present tooltip!");
|
|
}
|
|
|
|
ui.separator();
|
|
|
|
ui.label("The menu should be as wide as the widest button");
|
|
ui.menu_button("Click for menu", |ui| {
|
|
let _ = ui.button("Narrow").clicked();
|
|
let _ = ui.button("Very wide text").clicked();
|
|
let _ = ui.button("Narrow").clicked();
|
|
});
|
|
|
|
ui.label("Hover for tooltip").on_hover_ui(|ui| {
|
|
ui.label("A separator:");
|
|
ui.separator();
|
|
});
|
|
|
|
ui.separator();
|
|
|
|
let alternatives = [
|
|
"Short",
|
|
"Min",
|
|
"Very very long text that will extend",
|
|
"Short",
|
|
];
|
|
let mut selected = 1;
|
|
|
|
egui::ComboBox::from_label("ComboBox").show_index(
|
|
ui,
|
|
&mut selected,
|
|
alternatives.len(),
|
|
|i| alternatives[i],
|
|
);
|
|
|
|
egui::ComboBox::from_id_salt("combo")
|
|
.selected_text("ComboBox")
|
|
.width(100.0)
|
|
.show_ui(ui, |ui| {
|
|
ui.ctx()
|
|
.debug_painter()
|
|
.debug_rect(ui.max_rect(), egui::Color32::RED, "");
|
|
|
|
ui.label("Hello");
|
|
ui.label("World");
|
|
ui.label("Hellooooooooooooooooooooooooo");
|
|
});
|
|
|
|
ui.separator();
|
|
|
|
let time = ui.input(|i| i.time);
|
|
ui.label("Hover for a tooltip with changing content")
|
|
.on_hover_text(format!("A number: {}", time % 10.0));
|
|
});
|
|
})
|
|
}
|