Skip to content

Expose egui::containers::frame::Prepared #2106

Description

@idanarye

Is your feature request related to a problem? Please describe.
Immediate mode UI is not very flexible when it comes to code flow structure. Different parts of the application can't just register their widgets - they have to add their code as part of the main loop. With Rust borrow checking this gets tricky, because you need to use a &mut Ui which has a lifetime so you can't just pass it around - not unless the application flow framework explicitly supports it.

egui already has way around this - Frame::begin. It returns a Prepared struct which stores a self owned Ui object with no strings attached.

The problem is that Prepared is not exposed. It's pub, but the module that owns it - frame - is private, and the only thing the parent module containers exposes from it is Frame.

Describe the solution you'd like
Either add frame::Prepared to the pub use block in src/egui/containers/mod.rs - or pub use the entire frame module.

Describe alternatives you've considered
I've managed to hack around this: https://github.com/idanarye/bevy-yoleck/blob/d39936ce990821eb91daeb978f30b18ea98da131/src/dynamic_source_handling.rs#L143-L154. I've created a dummy Ui and used mem::replace so switch it with the one inside the Prepared, Indiana Jones style. Then I send the Ui I took from the Prepared around the get filled - something that I can do because Ui is exposed - and finish by placing that Ui back inside the Prepared.

This is a hack, and I'd rather have a proper way to do this. Theoretically I could have just used child_ui to create a real Ui, but then I'd have to calculate max_rect myself instead of having the Frame do it for me.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions