Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
idanarye opened this issue Oct 3, 2022 · 0 comments · Fixed by #5087
Closed

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

idanarye opened this issue Oct 3, 2022 · 0 comments · Fixed by #5087
Labels
feature New feature or request

Comments

@idanarye
Copy link
Contributor

idanarye commented Oct 3, 2022

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.

@idanarye idanarye added the feature New feature or request label Oct 3, 2022
simgt added a commit to simgt/egui that referenced this issue Sep 7, 2024
@simgt simgt mentioned this issue Sep 7, 2024
1 task
@emilk emilk closed this as completed in 9000d16 Sep 9, 2024
hacknus pushed a commit to hacknus/egui that referenced this issue Oct 30, 2024
Remove the crate visibility of the frame module. Useful at least when
using `Frame::begin` as otherwise the returned type is opaque to library
users and prevents from creating containers that use `Frame` with a
similar interface.

Alternative is to only export `frame::Prepared` as `PreparedFrame` or
something, but I saw that other submodules of containers are already
public.

<!--
Please read the "Making a PR" section of
[`CONTRIBUTING.md`](https://github.com/emilk/egui/blob/master/CONTRIBUTING.md)
before opening a Pull Request!

* Keep your PR:s small and focused.
* The PR title is what ends up in the changelog, so make it descriptive!
* If applicable, add a screenshot or gif.
* If it is a non-trivial addition, consider adding a demo for it to
`egui_demo_lib`, or a new example.
* Do NOT open PR:s from your `master` branch, as that makes it hard for
maintainers to test and add commits to your PR.
* Remember to run `cargo fmt` and `cargo clippy`.
* Open the PR as a draft until you have self-reviewed it and run
`./scripts/check.sh`.
* When you have addressed a PR comment, mark it as resolved.

Please be patient! I will review your PR, but my time is limited!
-->

* Closes emilk#2106
* [x] I have followed the instructions in the PR template
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant