ui.horizontal_for_text: Size and spacing made for text

This commit is contained in:
Emil Ernerfeldt 2020-12-13 18:14:18 +01:00
parent b15bd76596
commit 5880c95158
2 changed files with 27 additions and 5 deletions

View file

@ -15,11 +15,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
* Works in any text.
* Great for button icons.
* The Demo app comes with a Font Book to explore the available glyphs.
* Wrapping layouts:
* `ui.horizontal_wrapped(|ui| ...)`: Add widgets on a row but wrap at `max_size`.
* `ui.horizontal_wrapped_for_text`: Like `horizontal_wrapped`, but with spacing made for embedding text.
* `ui.horizontal_wrapped(|ui| ...)`: Add widgets on a row but wrap at `max_size`.
* `ui.horizontal_wrapped_for_text`: Like `ui.horizontal_wrapped`, but with spacing made for embedding text.
* `ui.horizontal_for_text`: Like `ui.horizontal`, but with spacing made for embedding text.
* `egui::Layout` now supports justified layouts where contents is _also_ centered, right-aligned, etc.
* `ui.allocate_ui(size, |ui| ...)`: Easily created a sized child-`Ui`.
* `ui.allocate_ui(size, |ui| ...)`: Easily created child-`Ui` of a given size.
* `SelectableLabel` (`ui.selectable_label` and `ui.selectable_value`): A text-button that can be selected.
* `ui.small_button`: A smaller button that looks good embedded in text.
* Add `Resize::id_source` and `ScrollArea::id_source` to let the user avoid Id clashes.
@ -29,7 +29,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
* Changed default font to [Ubuntu-Light](https://fonts.google.com/specimen/Ubuntu).
* Remove minimum button width
* Refactored `egui::Layout` substantially, changing its interface.
* Calling ``on_hover_text`/`on_hover_ui` multiple times will stack tooltips underneath the previous ones.
* Calling `on_hover_text`/`on_hover_ui` multiple times will stack tooltips underneath the previous ones.
* Text wrapping on labels, buttons, checkboxes and radio buttons is now based on the layout.
### Removed 🔥

View file

@ -850,6 +850,28 @@ impl Ui {
self.horizontal_with_main_wrap(false, add_contents)
}
/// Like `horizontal`, but will set up the spacing to match that of a normal label.
///
/// In particular, the space between widgets is the same width as the space character.
///
/// You can still add any widgets to the layout (not only Labels).
pub fn horizontal_for_text<R>(
&mut self,
text_style: TextStyle,
add_contents: impl FnOnce(&mut Ui) -> R,
) -> (R, Response) {
self.wrap(|ui| {
let font = &ui.fonts()[text_style];
let row_height = font.row_height();
let space_width = font.glyph_width(' ');
let style = ui.style_mut();
style.spacing.interact_size.y = row_height;
style.spacing.item_spacing.x = space_width;
style.spacing.item_spacing.y = 0.0;
ui.horizontal(add_contents).0
})
}
/// Start a ui with horizontal layout that wraps to a new row
/// when it reaches the right edge of the `max_size`.
/// After you have called this, the function registers the contents as any other widget.