1
0
mirror of https://github.com/emilk/egui.git synced 2026-06-26 22:53:14 -04:00
Commit Graph

3161 Commits

Author SHA1 Message Date
Emil Ernerfeldt
87b294534e Add emath::OrderedFloat (moved from epaint::util::OrderedFloat) (#4389)
It makes much more sense in `emath`
2024-04-21 20:36:32 +02:00
YgorSouza
46b241eb94 Add xtask crate (#4293)
Replaces only the cargo_deny.sh script for now. Can be expanded over
time to replace the other shell and python scripts, so only Rust is
needed to work with the repository.

Closes <https://github.com/emilk/egui/issues/2887>
Closes <https://github.com/emilk/egui/issues/4373>

---------

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2024-04-21 19:26:16 +02:00
valadaptive
d68c8d70aa Add a way to specify Undoer settings and construct Undoers more easily (#4357)
<!--
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 add commits to your PR.
* Remember to run `cargo fmt` and `cargo cranky`.
* 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 https://github.com/emilk/egui/issues/4356

- Add `Undoer::new()`
- This is necessary to construct an `Undoer` whose `State` parameter
doesn't implement `Default`.
- Add `Undoer::with_settings(...)`
- This is necessary to actually pass settings into the `Undoer`. Without
this, API consumers could construct their own `Settings` but not
actually do anything with it.

I've refrained from adding any kind of builder API for `Settings`
because there are only three options and I don't want to duplicate or
move all the documentation onto the builder methods.
2024-04-21 12:23:59 +02:00
rustbasic
d2c4269240 Fix : take rounding into account when using Slider::trailing_fill (#4308)
Handles `rounding` when doing trailing_fill on the rail of `Slider`.

We can see this by setting the rounding to around 8.0

```
        ui.visuals_mut().widgets.inactive.rounding = Rounding::same(8.0);
```



Before : There is a little bit of blue painted on the left end.


![20240404-2](https://github.com/emilk/egui/assets/127506429/aa70104c-0733-41c6-8e78-c3e69eb45204)

After : Fix


![20240404-3](https://github.com/emilk/egui/assets/127506429/c2452fcb-48fd-4b2a-9f1a-02a3bf763ed1)
2024-04-21 11:49:14 +02:00
Alexander Parlett
690c3ba883 Use parent Uis style for popups (#4325)
* Closes <https://github.com/emilk/egui/issues/4324>

---------

Co-authored-by: Alex Parlett <alexparlett@Alexs-MacBook-Air.local>
2024-04-21 11:44:44 +02:00
Varphone Wong
5f9c17c855 egui: Change Ui::allocate_painter to inherit properties from Ui (#4343)
The painter, allocated by `Ui::allocate_painter`, doesn't inherit
properties from the `Ui` object, leading to improper widget rendering in
`egui`.

Specifically, if the `Ui` object is disabled, the corresponding painter
should also be disabled.
2024-04-21 11:36:18 +02:00
dataphract
fe454573db Fix hex_color! macro by re-exporting color_hex crate from ecolor (#4372)
The `hex_color!` macro currently makes an unqualified reference to the
`color_hex` crate, which users may not have in their `Cargo.toml`. This
PR re-exports `color_hex` from the root of `ecolor` and changes the
macro to use the re-exported path.

<!--
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 add commits to your PR.
* Remember to run `cargo fmt` and `cargo cranky`.
* 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 https://github.com/emilk/egui/issues/2644
2024-04-21 11:07:55 +02:00
Narcha
26c97a19a4 Expose ClosestElem and PlotConfig (#4380)
These two items are needed to implement the `PlotItem` trait (which is
already public) when using `PlotGeometry::Rects`.
Specifically, they are used in the return type of
`PlotItem::find_closest` and as arguments to `PlotItem::on_hover`, which
need to be implemented when using `PlotGeometry::Rects`.
2024-04-21 11:05:53 +02:00
Emil Ernerfeldt
89d7f9f9d3 Update cargo-deny and some dependencies (#4386)
* Closes https://github.com/emilk/egui/issues/4382
2024-04-21 11:05:44 +02:00
Juan Campa
c630a8de89 Fix incorrect line breaks (#4377)
<!--
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 add commits to your PR.
* Remember to run `cargo fmt` and `cargo cranky`.
* 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!
-->

While breaking a paragraph, it was possible to lose line break
candidates that could've been used on the next line, causing egui to
unnecessarily overrun `wrap.max_width`.

This PR fixes it so that we don't forget about those candidates.


Before:
Note that the window can't resize to the requested width because the
text is not wrapping.


https://github.com/emilk/egui/assets/1410520/6430a334-2995-4b40-bc34-8f01923f9f95

After:


https://github.com/emilk/egui/assets/1410520/225fa4cd-cbbb-4a7e-9580-7f1814c05ee7

---------

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2024-04-21 10:58:40 +02:00
Emil Ernerfeldt
79fbd17b33 Add link to layouting tracking issue 2024-04-18 16:08:23 +02:00
Juan Campa
78d95f430b Consider layer transform when positioning text agent (#4319)
When positioning the text agent, the layer transform was not being
considered. This not only caused issues with IME input positioning but
also layout shifts if the text agent was off-screen.

Before

![Screenshot 2024-04-04 at 13 33
11@2x](https://github.com/emilk/egui/assets/1410520/5d88a358-67bd-478c-95c9-d76f84d57c39)

After

![Screenshot 2024-04-04 at 13 31
52@2x](https://github.com/emilk/egui/assets/1410520/55f068c7-56fe-4ba4-8455-7d0f613e8a52)
2024-04-05 07:31:33 +02:00
Gustav Sörnäs
2342788973 Fix wrong replacement function in deprecation notice of drag_released* (#4314)
Quick thing I noticed while updating a crate to egui 0.27.
2024-04-03 10:02:29 +02:00
Emil Ernerfeldt
15b0ef3259 Release 0.27.2 - Fix blurry web rendering 2024-04-02 18:18:43 +02:00
lucasmerlin
de9e0adf17 Allow disabling animations on a ScrollArea (#4309)
<!--
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 add commits to your PR.
* Remember to run `cargo fmt` and `cargo cranky`.
* 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!
-->

Adds a flag to ScrollArea that disables animations for the scroll_to_*
functions
2024-04-02 17:53:54 +02:00
Emil Ernerfeldt
36ebce163a egui_plots: Fix the same plot tick label being painted multiple times (#4307)
Usually this isn't visible (the same label being painted on top of
itself), but it will be visible if the user has a custom formatter (e.g.
`y_axis_formatter`) that choses a different format based on
`GridMark:step_size` (e.g. using fewer decimals for thicker ticks).
2024-04-02 15:37:44 +02:00
Alexander Parlett
4bc7e66245 Support order on windows (#4301)
Adds support for the ordering of windows passing through to the
underlying area.

Needed for a specific usecase of adding debug tools using windows with
the bevy integration.
2024-04-02 10:33:14 +02:00
Emil Ernerfeldt
058f4753b0 Fix typos and false positives found by new version of 'typos' 2024-04-02 09:55:13 +02:00
Emil Ernerfeldt
0a40b16bd4 Fix blurry rendering in some browsers (#4299)
* Closes https://github.com/emilk/egui/issues/4241

I would love some more testers of this.

I'm not sure if we really need the round-to-even code, but I'm hesitant
to out-right revert https://github.com/emilk/egui/pull/151 when I cannot
reproduce its problem. Keeping it seems quite safe though.

---
# Testing
Checkout the branch and run:

* `./scripts/start_server.sh`
* `./scripts/build_demo_web.sh` and then open
`http://localhost:8888/index.html#Rendering`
* `./scripts/build_demo_web.sh --wgpu` and then open
`http://localhost:8888/index.html#Rendering`

Check the "Rendering test" that the squares in the pixel alignment test
are perfectly sharp, like this:

<img width="576" alt="Screenshot 2024-04-01 at 13 27 20"
src="https://github.com/emilk/egui/assets/1148717/fb6c4824-9e25-4304-bc0c-3c50fbd44a52">

If it looks something like this, something is WRONG:
<img width="488" alt="Screenshot 2024-04-01 at 13 29 07"
src="https://github.com/emilk/egui/assets/1148717/04bd93ff-2108-40c5-95f6-76e3bcb9cd7f">


Please try it on different zoom levels in different browsers, and if
possible on different monitors with different native dpi scaling. Report
back the results!


### Mac
I have tested on a high-DPI Mac:
* Chromium (Brave):  Can reproduce problem on `master`, and it's now
fixed
* Firefox:   Can reproduce problem on `master`, and it's now fixed
* Safari:  Can't get it to work; giving up for now
2024-04-01 15:22:47 +02:00
Emil Ernerfeldt
48ecf01e11 Rename "Color test" to "Rendering test", and restructure it slightly (#4298)
Put the pixel-alignment test first, and hide the color test under a
collapsing header.

<img width="743" alt="Screenshot 2024-04-01 at 13 01 43"
src="https://github.com/emilk/egui/assets/1148717/8e7108ab-63c8-470f-9c21-83181287969b">
2024-04-01 13:08:52 +02:00
Emil Ernerfeldt
e99bd00dec Only avoid glow context switching on Windows (#4296)
…since it is reportedly broken on Windows

* Early-out added in https://github.com/emilk/egui/pull/4284
* Re-opens https://github.com/emilk/egui/issues/4173 😭 
* Closes https://github.com/emilk/egui/issues/4289
* Closes https://github.com/emilk/egui/pull/4290
2024-04-01 12:14:44 +02:00
Emil Ernerfeldt
3ee4890b94 Remove warning in release build 2024-03-31 20:41:44 +02:00
Emil Ernerfeldt
a97134d66c Improve Debug format of Sense, WidgetInfo and Id 2024-03-31 20:33:02 +02:00
Emil Ernerfeldt
95b62ce144 Show WidgetInfo for each widget if debug.show_interactive_widgets
This was useful during debugging
2024-03-31 20:32:05 +02:00
Emil Ernerfeldt
aa2f87e0ff Allow zoom/pan a plot as long as it contains the mouse cursor (#4292)
This is a fix meant mostly for Rerun, where we sometiems paint a
vertical time-line over the plot (which is interactive). Before this PR
you couldn't zoom or pan the plot while hovering that line, which was
really annoying.
2024-03-31 20:20:46 +02:00
Emil Ernerfeldt
bb06befef1 Consider all non-interactie widgets under the mouse pointer hovered (#4291)
At least all those above any interactive widget.

* Closes https://github.com/emilk/egui/issues/4286

I feel there is still more thinking to be done about what is considered
`hovered` and how it relates to `contains_pointer`, but this PR at least
fixes tooltips for uninteractive widgets
2024-03-31 20:06:25 +02:00
rustbasic
21835c3176 Fix ViewportCommand::InnerSize not resizing viewport on Wayland (#4211) 2024-03-30 20:09:28 +01:00
Emil Ernerfeldt
5a0a1e96e0 Remove a bunch of unwrap() (#4285)
The fewer unwraps, the fewer panics
2024-03-30 19:33:19 +01:00
Emil Ernerfeldt
2ee9d30d6e Make it easier to tweak text colors in settings 2024-03-30 19:12:54 +01:00
Emil Ernerfeldt
ab720ce900 Change Frame::multiply_with_opacity to multiply in gamma space (#4283)
This produces a more perceptually even change when used in animations,
like when fading out a closed window
2024-03-30 18:39:05 +01:00
Emil Ernerfeldt
e03ea2e17d eframe: Early-out from context switching the glow backend (#4284)
* Closes https://github.com/emilk/egui/issues/4173
2024-03-30 18:38:59 +01:00
Emil Ernerfeldt
549b243228 Rename fn scroll2 to fn scroll (#4282) 2024-03-30 18:00:43 +01:00
Emil Ernerfeldt
1354c3e19a Make the code example demo narrow enough to fit on mobile (#4281)
I think it is a good example, and so I want to open it by default, but
for that it needs to work on mobile.

Hopefully this doesn't make it too cryptic

<img width="415" alt="image"
src="https://github.com/emilk/egui/assets/1148717/83d881fa-675e-4659-bd21-14abcb79fe46">
2024-03-30 17:51:44 +01:00
刘皓
33221bd4dd Fix continuous repaint on Wayland when TextEdit is focused or IME output is not None (#4269)
* Closes #4254

Changes egui-winit so that it calls `window.set_ime_cursor_area` when
the IME rect changes or the user interacts with the application instead
of calling it every time the app is rendered. This works around a winit
bug that causes the app to continuously repaint under certain
circumstances on Wayland.

Tested on Wayland and on X11 using the text edit in the egui_demo_app -
no changes in IME functionality as far as I can tell. Untested on
non-Linux platforms.

---------

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2024-03-30 17:14:58 +01:00
Emil Ernerfeldt
3b147c066b Implement blinking text cursor in TextEdit (#4279)
On by default. Can be set with `style.text_cursor.blink`.

* Closes https://github.com/emilk/egui/pull/4121
2024-03-30 16:22:28 +01:00
Emil Ernerfeldt
d3c6895443 eframe: Correctly identify if browser tab has focus (#4280)
`input.focus` was often wrong on web
2024-03-30 16:22:16 +01:00
Emil Ernerfeldt
7277322983 Break out Checkbox, RadioButton and ImageButton to their own files (#4278)
Just a refactor
2024-03-30 14:28:12 +01:00
Emil Ernerfeldt
a9a756e8f3 Overload operators for Rect + Margin, Rect - Margin etc (#4277)
It's more ergonomic
2024-03-30 14:03:41 +01:00
Emil Ernerfeldt
32888e0f83 Make TextEdit and atomic widget (#4276)
This means only one space allocation, which should allow putting it in
more types of layouts (right-to-left, centered, adjusted, …).

It also just makes the code simpler
2024-03-30 13:33:51 +01:00
Emil Ernerfeldt
fbb4a040ac Change the resize cursor when you reach the resize limit (#4275)
For panels and `DragValue`: if you cannot resize more in one direction,
reflect that in the choice of mouse cursor


![resize-cursor-2](https://github.com/emilk/egui/assets/1148717/f95176d3-eab9-48cf-b7bd-3182312551d9)
2024-03-30 10:54:32 +01:00
Emil Ernerfeldt
8da0e8cc77 Fix: Response::clicked_elsewhere takes clip rect into account (#4274)
`clicked_elsewhere` now checks against the clipped `interact_rect` of
the widget instead of the full `rect`.

In practice this shouldn't change much since the function is mostly used
for windows and areas, which aren't clipped.
2024-03-30 10:35:55 +01:00
Emil Ernerfeldt
a7c5eb47a8 Fix bug in determining wether to remove focus from a widget (#4272)
* Closes https://github.com/emilk/egui/issues/4206
2024-03-30 10:22:58 +01:00
Emil Ernerfeldt
810135c5eb Fix incorrect Response::interact_rect for Area/Window (#4273)
It was wrong for any `Area` or `Window` that was being moved or whose
position was constrained
2024-03-30 10:15:54 +01:00
Emil Ernerfeldt
a541e021aa Add RectShape::blur_width to implement shadows (#4267)
This is mostly a refactor, but has some performance benefits:
* We (re)use the same tessellator as for everything else, leading to
less allocations
* We cull shapes before rendering them

Adding `RectShape::blur_width` means it can also be used for other
effects, such as glow.
2024-03-29 20:29:42 +01:00
Emil Ernerfeldt
73dbfd689b Don't wrap the text in the Frame demo 2024-03-29 15:58:37 +01:00
Emil Ernerfeldt
0a428f0887 Improve docs of ui.collapsing
See https://github.com/emilk/egui/issues/4265
2024-03-29 15:58:22 +01:00
Emil Ernerfeldt
dfbe118ea4 Release 0.27.1 (#4264)
## egui changelog
### 🐛 Fixed
* Fix visual glitch on the right side of highly rounded rectangles
[#4244](https://github.com/emilk/egui/pull/4244)
* Prevent visual glitch when shadow blur width is very high
[#4245](https://github.com/emilk/egui/pull/4245)
* Fix `InputState::any_touches` and add `InputState::has_touch_screen`
[#4247](https://github.com/emilk/egui/pull/4247)
* Fix `Context::repaint_causes` returning no causes
[#4248](https://github.com/emilk/egui/pull/4248)
* Fix touch-and-hold to open context menu
[#4249](https://github.com/emilk/egui/pull/4249)
* Hide shortcut text on zoom buttons if `zoom_with_keyboard` is false
[#4262](https://github.com/emilk/egui/pull/4262)

### 🔧 Changed
* Don't apply a clip rect to the contents of an `Area` or `Window`
[#4258](https://github.com/emilk/egui/pull/4258)


## eframe changelog
* Web: repaint if the `#hash` in the URL changes
[#4261](https://github.com/emilk/egui/pull/4261)
* Add web support for `zoom_factor`
[#4260](https://github.com/emilk/egui/pull/4260) (thanks
[@justusdieckmann](https://github.com/justusdieckmann)!)

---------

Co-authored-by: Justus Dieckmann <45795270+justusdieckmann@users.noreply.github.com>
2024-03-29 13:12:26 +01:00
Emil Ernerfeldt
946bc888db Hide shortcut text on zoom buttons if zoom_with_keyboard is false (#4262) 2024-03-29 12:15:03 +01:00
Justus Dieckmann
7cc98bd38e Add web support for zoom_factor (#4260)
Before, when setting the `zoom_factor`, the website was already
enlarged, but the zoom was ignored when calculating the logical window
size and mouse position, causing an offset between the actual cursor and
selected elements. That is addressed here

---------

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2024-03-29 11:55:49 +01:00
Emil Ernerfeldt
60da4b4f65 Web: repaint if the #hash in the URL changes (#4261)
Fixes a problem in egui.rs where the back-button would not work to
switch between the top-level tabs
2024-03-29 10:59:24 +01:00