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

Better tooltip size management #4471

Open
emilk opened this issue May 7, 2024 · 1 comment
Open

Better tooltip size management #4471

emilk opened this issue May 7, 2024 · 1 comment
Labels
egui rerun Desired for Rerun.io

Comments

@emilk
Copy link
Owner

emilk commented May 7, 2024

Similar issues:

Tooltips sometimes flicker the first time they show up.
This is because we don't know their size before we show them, and their size affects their position.

I think we should hide the tooltips for the first frame, and use that only for sizing calculations.
Once calculated, we store the size for use the subsequent frames.
The tooltips size will be assumed to be constant during its lifetime.
Once a tooltip is hidden, we forget about its size.

This will also allow for better sizing within a tooltip: a user will be able to add "full width" widgets (such as Separator) that are only as wide as the widest element.

@abey79
Copy link
Collaborator

abey79 commented May 15, 2024

This PR is good test case because the tooltip has two sources of flicker:

  • needs to move above the cursor because there isn't enough room bellow
  • the component list takes 2 frames to be sized correctly

rerun-io/rerun#6309

tooltip-flicker.mp4

abey79 added a commit to rerun-io/rerun that referenced this issue May 22, 2024
### What

This PR adds support for `PropertyContent::exact_width(true)`, which
makes it possible to create lists which only use the needed width (as
opposed to using `ui.available_width()`. This was previous available for
`LabelContent` and used (in the future) in the streams view.

`LabelContent` exploits the fact that the content is mainly a label, the
width of which can be computed with `egui`. For `PropertyContent` it's
tricker because we delegate the second column to a closure. Instead, we
track the max width in each `list_item_context` on frame n, and request
that width in frame n+1.

The major drawback of this approach is the potential flicker on the
first frame. Since the plan is to use it for tooltip, it will greatly
help to have emilk/egui#4471

### Checklist
* [x] I have read and agree to [Contributor
Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and
the [Code of
Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md)
* [x] I've included a screenshot or gif (if applicable)
* [x] I have tested the web demo (if applicable):
* Using examples from latest `main` build:
[rerun.io/viewer](https://rerun.io/viewer/pr/6325?manifest_url=https://app.rerun.io/version/main/examples_manifest.json)
* Using full set of examples from `nightly` build:
[rerun.io/viewer](https://rerun.io/viewer/pr/6325?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json)
* [x] The PR title and labels are set such as to maximize their
usefulness for the next release's CHANGELOG
* [x] If applicable, add a new check to the [release
checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)!

- [PR Build Summary](https://build.rerun.io/pr/6325)
- [Recent benchmark results](https://build.rerun.io/graphs/crates.html)
- [Wasm size tracking](https://build.rerun.io/graphs/sizes.html)

To run all checks from `main`, comment on the PR with `@rerun-bot
full-check`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
egui rerun Desired for Rerun.io
Projects
None yet
Development

No branches or pull requests

2 participants