[slider] fix vertical alignment of text

This commit is contained in:
Emil Ernerfeldt 2020-08-29 17:58:25 +02:00
parent 1d350ad15b
commit f7122abc5d
2 changed files with 18 additions and 11 deletions

View file

@ -608,29 +608,32 @@ impl Ui {
/// Start a ui with horizontal layout /// Start a ui with horizontal layout
pub fn horizontal<R>(&mut self, add_contents: impl FnOnce(&mut Ui) -> R) -> (R, Rect) { pub fn horizontal<R>(&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. /// Start a ui with horizontal layout where elements are centered on the Y axis.
pub fn horizontal_centered<R>(&mut self, add_contents: impl FnOnce(&mut Ui) -> R) -> (R, Rect) { pub fn horizontal_centered<R>(&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 /// Start a ui with vertical layout
pub fn vertical<R>(&mut self, add_contents: impl FnOnce(&mut Ui) -> R) -> (R, Rect) { pub fn vertical<R>(&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<R>( pub fn inner_layout<R>(
&mut self, &mut self,
layout: Layout, layout: Layout,
initial_size: Vec2,
add_contents: impl FnOnce(&mut Self) -> R, add_contents: impl FnOnce(&mut Self) -> R,
) -> (R, Rect) { ) -> (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 child_rect = Rect::from_min_size(self.cursor, initial_size);
let mut child_ui = self.child_ui(child_rect); let mut child_ui = self.child_ui(child_rect);
child_ui.set_layout(layout); // HACK: need a separate call right now child_ui.set_layout(layout); // HACK: need a separate call right now

View file

@ -271,9 +271,13 @@ impl<'a> Widget for Slider<'a> {
// Place the text in line with the slider on the left: // Place the text in line with the slider on the left:
let text_ui = &mut columns[1]; let text_ui = &mut columns[1];
text_ui.set_desired_height(slider_interact.rect.height()); text_ui.set_desired_height(slider_interact.rect.height());
text_ui.horizontal_centered(|ui| { text_ui.inner_layout(
Layout::horizontal(Align::Center),
text_ui.available().size(),
|ui| {
self.text_ui(ui, x_range); self.text_ui(ui, x_range);
}); },
);
slider_interact slider_interact
}) })