Skip to content

Commit 88d42b8

Browse files
author
jkukatzki
committed
optional max width for popups to prevent new hash like column calculation from infinitely expanding popup windows
1 parent b8cfac0 commit 88d42b8

5 files changed

Lines changed: 28 additions & 7 deletions

File tree

crates/bevy_animation_graph_editor/src/ui/generic_widgets/data_value.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,13 @@ impl<'a> egui::Widget for DataValueWidget<'a> {
8181
response |= ui.add(EntityPathWidget::new_salted(entity_path, "entity path"));
8282
}
8383
DataValue::BoneMask(bone_mask) => {
84-
response |= PopupWidget::new_salted("bone mask popup").ui(ui, |ui| {
85-
ui.add(BoneMaskWidget::new(bone_mask).with_skeleton(self.skeleton))
86-
});
84+
response |= PopupWidget::new_salted("bone mask popup")
85+
.with_max_width(500.)
86+
.ui(ui, |ui| {
87+
ui.add(
88+
BoneMaskWidget::new(bone_mask).with_skeleton(self.skeleton),
89+
)
90+
});
8791
}
8892
DataValue::Pose(_) => {
8993
response |= ui.label("Pose value editing not supported");

crates/bevy_animation_graph_editor/src/ui/generic_widgets/entity_path.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ impl<'a> egui::Widget for EntityPathWidget<'a> {
4747
});
4848

4949
let response = ui.add(
50-
egui::TextEdit::singleline(&mut buffer.value).min_size(egui::Vec2::new(350., 0.)),
50+
egui::TextEdit::singleline(&mut buffer.value)
51+
.desired_width(ui.available_width()),
5152
);
5253

5354
let top_k = self

crates/bevy_animation_graph_editor/src/ui/generic_widgets/popup.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,47 @@ use egui::containers::menu::MenuConfig;
33
pub struct PopupWidget {
44
pub id_hash: egui::Id,
55
pub button_label: String,
6+
pub max_width: Option<f32>,
67
}
78

89
impl PopupWidget {
910
pub fn new_salted(salt: impl std::hash::Hash) -> Self {
1011
Self {
1112
id_hash: egui::Id::new(salt),
1213
button_label: "edit".into(),
14+
max_width: None,
1315
}
1416
}
1517

18+
pub fn with_max_width(mut self, max_width: f32) -> Self {
19+
self.max_width = Some(max_width);
20+
self
21+
}
22+
1623
pub fn ui(
1724
self,
1825
ui: &mut egui::Ui,
1926
inner: impl FnOnce(&mut egui::Ui) -> egui::Response,
2027
) -> egui::Response {
28+
let max_width = self.max_width;
29+
let wrapped_inner = move |ui: &mut egui::Ui| -> egui::Response {
30+
if let Some(w) = max_width {
31+
ui.set_max_width(w);
32+
}
33+
inner(ui)
34+
};
2135
ui.push_id(self.id_hash, |ui| {
2236
ui.horizontal(|ui| {
2337
let config =
2438
MenuConfig::new().close_behavior(egui::PopupCloseBehavior::CloseOnClickOutside);
2539
let (mut button_response, inner) = if egui::containers::menu::is_in_menu(ui) {
2640
egui::containers::menu::SubMenuButton::new(&self.button_label)
2741
.config(config)
28-
.ui(ui, inner)
42+
.ui(ui, wrapped_inner)
2943
} else {
3044
egui::containers::menu::MenuButton::new(&self.button_label)
3145
.config(config)
32-
.ui(ui, inner)
46+
.ui(ui, wrapped_inner)
3347
};
3448

3549
if inner.is_some_and(|i| i.inner.changed()) {

crates/bevy_animation_graph_editor/src/ui/generic_widgets/ragdoll_config.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ impl<'a> egui::Widget for RagdollConfigWidget<'a> {
4343
let mut response = ui.button("Edit");
4444
let popup_response = egui::Popup::from_toggle_button_response(&response)
4545
.close_behavior(egui::PopupCloseBehavior::IgnoreClicks)
46+
.width(500.)
4647
.show(|ui| {
4748
let mut response = ui.heading("Defaults");
4849
ui.horizontal(|ui| {

crates/bevy_animation_graph_editor/src/ui/generic_widgets/uuid.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ impl<'a> egui::Widget for UuidWidget<'a> {
4646
});
4747

4848
let mut response = ui.add(
49-
egui::TextEdit::singleline(&mut data.buffer).min_size(egui::Vec2::new(250., 0.)),
49+
egui::TextEdit::singleline(&mut data.buffer)
50+
.desired_width(ui.available_width()),
5051
);
5152

5253
// Mark non-changed; we only consider the response changed if the uuid string is valid

0 commit comments

Comments
 (0)