mirror of
https://github.com/emilk/egui.git
synced 2026-08-30 05:10:03 -04:00
Introduce UiStack (#4588)
* Closes #4534 This PR: - Introduces `Ui::stack()`, which returns the `UiStack` structure providing information on the current `Ui` hierarchy. - **BREAKING**: `Ui::new()` now takes a `UiStackInfo` argument, which is used to populate some of this `Ui`'s `UiStack`'s fields. - **BREAKING**: `Ui::child_ui()` and `Ui::child_ui_with_id_source()` now take an `Option<UiStackInfo>` argument, which is used to populate some of the children `Ui`'s `UiStack`'s fields. - New `Area::kind()` builder function, to set the `UiStackKind` value of the `Area`'s `Ui`. - Adds a (minimalistic) demo to egui demo (in the "Misc Demos" window). - Adds a more thorough `test_ui_stack` test/playground demo. TODO: - [x] benchmarks - [x] add example to demo Future work: - Add `UiStackKind` and related support for more container (e.g. `CollapsingHeader`, etc.) - Add a tag/property system that would allow adding arbitrary data to a stack node. This data could then be queried by nested `Ui`s. Probably needed for #3284. - Add support to track columnar layouts. --------- Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
This commit is contained in:
@@ -140,6 +140,7 @@ impl<'a> Widget for DatePickerButton<'a> {
|
||||
inner: saved,
|
||||
response: area_response,
|
||||
} = Area::new(ui.make_persistent_id(self.id_source))
|
||||
.kind(egui::UiKind::Picker)
|
||||
.order(Order::Foreground)
|
||||
.fixed_pos(pos)
|
||||
.show(ui.ctx(), |ui| {
|
||||
|
||||
@@ -195,9 +195,12 @@ impl<'l> StripLayout<'l> {
|
||||
child_ui_id_source: egui::Id,
|
||||
add_cell_contents: impl FnOnce(&mut Ui),
|
||||
) -> Ui {
|
||||
let mut child_ui =
|
||||
self.ui
|
||||
.child_ui_with_id_source(rect, self.cell_layout, child_ui_id_source);
|
||||
let mut child_ui = self.ui.child_ui_with_id_source(
|
||||
rect,
|
||||
self.cell_layout,
|
||||
child_ui_id_source,
|
||||
Some(egui::UiStackInfo::new(egui::UiKind::TableCell)),
|
||||
);
|
||||
|
||||
if flags.clip {
|
||||
let margin = egui::Vec2::splat(self.ui.visuals().clip_rect_margin);
|
||||
|
||||
Reference in New Issue
Block a user