diff --git a/egui/src/ui.rs b/egui/src/ui.rs index 846eaaa8..c37aa6ad 100644 --- a/egui/src/ui.rs +++ b/egui/src/ui.rs @@ -608,29 +608,32 @@ impl Ui { /// Start a ui with horizontal layout pub fn horizontal(&mut self, add_contents: impl FnOnce(&mut Ui) -> R) -> (R, Rect) { - self.inner_layout(Layout::horizontal(Align::Min), add_contents) + let initial_size = vec2(self.available().width(), 0.0); + self.inner_layout(Layout::horizontal(Align::Min), initial_size, add_contents) } /// Start a ui with horizontal layout where elements are centered on the Y axis. pub fn horizontal_centered(&mut self, add_contents: impl FnOnce(&mut Ui) -> R) -> (R, Rect) { - self.inner_layout(Layout::horizontal(Align::Center), add_contents) + let initial_size = vec2(self.available().width(), 0.0); + self.inner_layout( + Layout::horizontal(Align::Center), + initial_size, + add_contents, + ) } /// Start a ui with vertical layout pub fn vertical(&mut self, add_contents: impl FnOnce(&mut Ui) -> R) -> (R, Rect) { - self.inner_layout(Layout::vertical(Align::Min), add_contents) + let initial_size = vec2(0.0, self.available().height()); + self.inner_layout(Layout::vertical(Align::Min), initial_size, add_contents) } pub fn inner_layout( &mut self, layout: Layout, + initial_size: Vec2, add_contents: impl FnOnce(&mut Self) -> R, ) -> (R, Rect) { - let initial_size = if layout.dir() == Direction::Horizontal { - vec2(self.available().width(), 0.0) - } else { - vec2(0.0, self.available().height()) - }; let child_rect = Rect::from_min_size(self.cursor, initial_size); let mut child_ui = self.child_ui(child_rect); child_ui.set_layout(layout); // HACK: need a separate call right now diff --git a/egui/src/widgets/slider.rs b/egui/src/widgets/slider.rs index 8b6d9b05..23f1a27c 100644 --- a/egui/src/widgets/slider.rs +++ b/egui/src/widgets/slider.rs @@ -271,9 +271,13 @@ impl<'a> Widget for Slider<'a> { // Place the text in line with the slider on the left: let text_ui = &mut columns[1]; text_ui.set_desired_height(slider_interact.rect.height()); - text_ui.horizontal_centered(|ui| { - self.text_ui(ui, x_range); - }); + text_ui.inner_layout( + Layout::horizontal(Align::Center), + text_ui.available().size(), + |ui| { + self.text_ui(ui, x_range); + }, + ); slider_interact })