You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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.
The text was updated successfully, but these errors were encountered:
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!
-->
* Closesemilk#2106
* [x] I have followed the instructions in the PR template
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 aPrepared
struct which stores a self ownedUi
object with no strings attached.The problem is that
Prepared
is not exposed. It'spub
, but the module that owns it -frame
- is private, and the only thing the parent modulecontainers
exposes from it isFrame
.Describe the solution you'd like
Either add
frame::Prepared
to thepub use
block insrc/egui/containers/mod.rs
- orpub use
the entireframe
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 usedmem::replace
so switch it with the one inside thePrepared
, Indiana Jones style. Then I send theUi
I took from thePrepared
around the get filled - something that I can do becauseUi
is exposed - and finish by placing thatUi
back inside thePrepared
.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 realUi
, but then I'd have to calculatemax_rect
myself instead of having theFrame
do it for me.The text was updated successfully, but these errors were encountered: