Make `on_disabled_hover_ui` respect `tooltip_delay` (#4012)
* Closes <https://github.com/emilk/egui/issues/3997>
This commit is contained in:
parent
15370bbea0
commit
1bc70b20b1
|
|
@ -438,7 +438,7 @@ impl Response {
|
||||||
/// If you call this multiple times the tooltips will stack underneath the previous ones.
|
/// If you call this multiple times the tooltips will stack underneath the previous ones.
|
||||||
#[doc(alias = "tooltip")]
|
#[doc(alias = "tooltip")]
|
||||||
pub fn on_hover_ui(self, add_contents: impl FnOnce(&mut Ui)) -> Self {
|
pub fn on_hover_ui(self, add_contents: impl FnOnce(&mut Ui)) -> Self {
|
||||||
if self.should_show_hover_ui() {
|
if self.enabled && self.should_show_hover_ui() {
|
||||||
crate::containers::show_tooltip_for(
|
crate::containers::show_tooltip_for(
|
||||||
&self.ctx,
|
&self.ctx,
|
||||||
self.id.with("__tooltip"),
|
self.id.with("__tooltip"),
|
||||||
|
|
@ -451,7 +451,7 @@ impl Response {
|
||||||
|
|
||||||
/// Show this UI when hovering if the widget is disabled.
|
/// Show this UI when hovering if the widget is disabled.
|
||||||
pub fn on_disabled_hover_ui(self, add_contents: impl FnOnce(&mut Ui)) -> Self {
|
pub fn on_disabled_hover_ui(self, add_contents: impl FnOnce(&mut Ui)) -> Self {
|
||||||
if !self.enabled && self.ctx.rect_contains_pointer(self.layer_id, self.rect) {
|
if !self.enabled && self.should_show_hover_ui() {
|
||||||
crate::containers::show_tooltip_for(
|
crate::containers::show_tooltip_for(
|
||||||
&self.ctx,
|
&self.ctx,
|
||||||
self.id.with("__tooltip"),
|
self.id.with("__tooltip"),
|
||||||
|
|
@ -464,7 +464,7 @@ impl Response {
|
||||||
|
|
||||||
/// Like `on_hover_ui`, but show the ui next to cursor.
|
/// Like `on_hover_ui`, but show the ui next to cursor.
|
||||||
pub fn on_hover_ui_at_pointer(self, add_contents: impl FnOnce(&mut Ui)) -> Self {
|
pub fn on_hover_ui_at_pointer(self, add_contents: impl FnOnce(&mut Ui)) -> Self {
|
||||||
if self.should_show_hover_ui() {
|
if self.enabled && self.should_show_hover_ui() {
|
||||||
crate::containers::show_tooltip_at_pointer(
|
crate::containers::show_tooltip_at_pointer(
|
||||||
&self.ctx,
|
&self.ctx,
|
||||||
self.id.with("__tooltip"),
|
self.id.with("__tooltip"),
|
||||||
|
|
@ -484,7 +484,11 @@ impl Response {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if !self.hovered || !self.ctx.input(|i| i.pointer.has_pointer()) {
|
if self.enabled {
|
||||||
|
if !self.hovered || !self.ctx.input(|i| i.pointer.has_pointer()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if !self.ctx.rect_contains_pointer(self.layer_id, self.rect) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -505,8 +509,9 @@ impl Response {
|
||||||
|
|
||||||
if 0.0 < time_til_tooltip {
|
if 0.0 < time_til_tooltip {
|
||||||
// Wait until the mouse has been still for a while
|
// Wait until the mouse has been still for a while
|
||||||
self.ctx
|
if let Ok(duration) = std::time::Duration::try_from_secs_f32(time_til_tooltip) {
|
||||||
.request_repaint_after(std::time::Duration::from_secs_f32(time_til_tooltip));
|
self.ctx.request_repaint_after(duration);
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,7 @@ fn label_ui(ui: &mut egui::Ui) {
|
||||||
#[cfg_attr(feature = "serde", serde(default))]
|
#[cfg_attr(feature = "serde", serde(default))]
|
||||||
pub struct Widgets {
|
pub struct Widgets {
|
||||||
angle: f32,
|
angle: f32,
|
||||||
|
enabled: bool,
|
||||||
password: String,
|
password: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -240,6 +241,7 @@ impl Default for Widgets {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
angle: std::f32::consts::TAU / 3.0,
|
angle: std::f32::consts::TAU / 3.0,
|
||||||
|
enabled: true,
|
||||||
password: "hunter2".to_owned(),
|
password: "hunter2".to_owned(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -247,7 +249,11 @@ impl Default for Widgets {
|
||||||
|
|
||||||
impl Widgets {
|
impl Widgets {
|
||||||
pub fn ui(&mut self, ui: &mut Ui) {
|
pub fn ui(&mut self, ui: &mut Ui) {
|
||||||
let Self { angle, password } = self;
|
let Self {
|
||||||
|
angle,
|
||||||
|
enabled,
|
||||||
|
password,
|
||||||
|
} = self;
|
||||||
ui.vertical_centered(|ui| {
|
ui.vertical_centered(|ui| {
|
||||||
ui.add(crate::egui_github_link_file_line!());
|
ui.add(crate::egui_github_link_file_line!());
|
||||||
});
|
});
|
||||||
|
|
@ -260,8 +266,20 @@ impl Widgets {
|
||||||
});
|
});
|
||||||
let _ = ui.button("A button you can never press");
|
let _ = ui.button("A button you can never press");
|
||||||
};
|
};
|
||||||
ui.label("Tooltips can be more than just simple text.")
|
let disabled_tooltip_ui = |ui: &mut Ui| {
|
||||||
.on_hover_ui(tooltip_ui);
|
ui.heading("Different tooltip when widget is disabled");
|
||||||
|
ui.horizontal(|ui| {
|
||||||
|
ui.label("This tooltip was created with");
|
||||||
|
ui.monospace(".on_disabled_hover_ui(…)");
|
||||||
|
});
|
||||||
|
};
|
||||||
|
ui.checkbox(enabled, "Enabled");
|
||||||
|
ui.add_enabled(
|
||||||
|
*enabled,
|
||||||
|
egui::Label::new("Tooltips can be more than just simple text."),
|
||||||
|
)
|
||||||
|
.on_hover_ui(tooltip_ui)
|
||||||
|
.on_disabled_hover_ui(disabled_tooltip_ui);
|
||||||
|
|
||||||
ui.separator();
|
ui.separator();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue