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

4022 Commits

Author SHA1 Message Date
valadaptive
623c4c6d3c Disable subpixel binning for CJK glyphs 2025-09-08 05:38:15 -04:00
valadaptive
61351d170e Apply documentation changes 2025-09-08 05:30:32 -04:00
valadaptive
abe9a2d91d Apply review suggestion about GlyphCacheKey 2025-09-08 05:27:42 -04:00
valadaptive
d659df6655 Subpixel glyph positioning 2025-09-08 05:22:29 -04:00
valadaptive
03a4f2c181 Stop accumulating rounding error on purpose 2025-09-08 04:43:07 -04:00
valadaptive
dcb6420a41 Update inaccurate comment 2025-09-07 21:40:57 -04:00
valadaptive
91d3384a6c Remove busted glyph-centering code
Not sure *what* I replaced this with, but it's unnecessary now
2025-09-07 21:38:10 -04:00
valadaptive
4325c8f3c8 Optimize glyph allocation cache lookups 2025-09-07 21:36:04 -04:00
valadaptive
38fbae0541 Cache GlyphIds for allocation instead of full info 2025-09-07 21:36:04 -04:00
valadaptive
95458f4b52 Stop using ab_glyph scaling entirely 2025-09-07 21:36:04 -04:00
valadaptive
f560b6a9ff Cache scaled font metrics 2025-09-07 21:36:04 -04:00
valadaptive
3a6cb2e273 Refactor replace_last_glyph_with_overflow_character
Muuuuuch nicer.
2025-09-07 21:36:04 -04:00
valadaptive
1ccd809b61 Fix glyph cache key 2025-09-07 21:36:03 -04:00
Emil Ernerfeldt
58cbca1016 Change argument order 2025-09-07 21:36:03 -04:00
Emil Ernerfeldt
e372ffe99a Update to latest ab_glyph 2025-09-07 21:36:03 -04:00
Emil Ernerfeldt
6f53261f4a Refactor GlyphInfo 2025-09-07 21:36:03 -04:00
Emil Ernerfeldt
686f0709db Fix benchmark compilation 2025-09-07 21:36:03 -04:00
Emil Ernerfeldt
9d8dba48c1 Update test output 2025-09-07 21:36:03 -04:00
Emil Ernerfeldt
0d628e6db3 Change parameter order and fix bug in test 2025-09-07 21:34:16 -04:00
Emil Ernerfeldt
3385ad5bcb Pre-hash contents of FontFaceKey 2025-09-07 21:34:16 -04:00
Emil Ernerfeldt
560346d007 add docstring 2025-09-07 21:34:16 -04:00
valadaptive
1ddd143e45 Fix panic if no fonts loaded 2025-09-07 21:34:16 -04:00
valadaptive
e5a22395a6 Fix docs 2025-09-07 21:34:16 -04:00
valadaptive
52ce61a305 Please the linter 2025-09-07 21:34:16 -04:00
valadaptive
9a774097a1 Rename font_impls field to fonts_by_name 2025-09-07 21:34:15 -04:00
valadaptive
a113907005 Include pixels_per_point in galley cache key 2025-09-07 21:34:15 -04:00
valadaptive
9aaee3354d Let Fonts handle multiple pixels_per_point 2025-09-07 21:34:15 -04:00
valadaptive
837fc7fef7 Remove more Arc<Mutex<...>> from font code
By making `Font` a view type and indexing by font ID, we can avoid
wrapping `FontImpl` and `TextureAtlas` in an `Arc<Mutex<...>>`.
2025-09-07 21:34:15 -04:00
valadaptive
02d45d70bc Make Font+FontImpl resolution and size independent 2025-09-07 21:34:15 -04:00
valadaptive
955e678577 Remove FontTweak::baseline_offset_factor
Even testing this out *with* font fallback, which seems to be its
intended purpose, this does exactly the same thing as y_offset_factor.
It's likely that some subsequent change (perhaps
https://github.com/emilk/egui/pull/2724) removed the code path that
made it function differently.
2025-09-07 21:34:15 -04:00
valadaptive
bbf9ac4d4b Stop wrapping FontsImpl in an Arc<Mutex<_>>
We never need to clone it, and none of its methods took `self` as
mutable, meaning it wasn't making use of the semantic difference between
the two.

This API is about to get reworked, and simplifying it is a first step.
2025-09-07 21:34:15 -04:00
Emil Ernerfeldt
aedd43c88f kittest: Add UPDATE_SNAPSHOTS=force (#7508)
This adds a new mode, `UPDATE_SNAPSHOTS=force`, which will lower the
threshold to zero, overwriting every image that is not _exactly_ the
same.

Most comparisons has a threshold because different GPUs render slightly
differently. However, setting that threshold accurately can be hard.

Sometimes a test will pass locally, but fail on CI. In those cases you
want to force an update of the failing test. You can use
`UPDATE_SNAPSHOTS=force` for that.

And sometimes a small change _should_ update all images, but the change
is so tiny that it falls under the threshold. Still, you want to make a
point of showing that these images have changes. You can use
`UPDATE_SNAPSHOTS=force` for that.
2025-09-05 16:45:36 +02:00
Emil Ernerfeldt
eceb0b11c9 Document how to push git lfs files to 3rd party PRs (#7507) 2025-09-05 10:47:23 +02:00
Stelios Kourlis
5fd452310b Deprecated ImageButton and removed WidgetType::ImageButton (#7483)
<!--
Please read the "Making a PR" section of
[`CONTRIBUTING.md`](https://github.com/emilk/egui/blob/main/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 <https://github.com/emilk/egui/issues/7466>
* [x] I have followed the instructions in the PR template
* I have ran `./scripts/check.sh` and it has no fails
* I have run `cargo fmt` and `cargo clippy`

Added the deprecated tag to ImageButton struct
Removed the `WidgetType::ImageButton` variant. ImageButton will use
`WidgetType::Button` for its WidgetInfo

*This is my first PR ever, please let me know if I did something wrong
so I can change it*

---------

Co-authored-by: Nicolas <bircni@icloud.com>
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
Co-authored-by: Lucas Meurer <hi@lucasmerlin.me>
2025-09-04 15:03:10 +02:00
YgorSouza
669cdc1fff Remove line breaks when pasting into single line TextEdit (#7441)
The line breaks are now replaced by spaces, matching the usual behavior
of text fields in HTML.

* Closes <https://github.com/emilk/egui/issues/7389>
* [x] I have followed the instructions in the PR template

Co-authored-by: Lucas Meurer <hi@lucasmerlin.me>
2025-09-04 13:53:02 +02:00
Andrew Farkas
1c460b6dc0 Skip zero-length layout job sections (#7430)
Fixes #7378 

Includes a regression test that previously failed and now succeeds.

* [x] I have followed the instructions in the PR template

---------

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
Co-authored-by: Lucas Meurer <hi@lucasmerlin.me>
2025-09-04 13:17:59 +02:00
Aleksandr Strizhevskiy
763e2df9f9 Fix: prevent calendar popup from closing on dropdown change (#7409)
Currently, DatePickerButton will close without saving whenever a user
clicks a dropdown from year/month/date. The issue is caused because the
system mistakenly interprets the user as clicking off of the calendar.
This is unexpected and creates an unpleasant experience for the user.
This change now allows the user to use the dropdowns as expected; it
will close on save or cancel. The calendar still closes when user clicks
off of it, as before. The changes here are made in:
crates/egui_extras/src/datepicker/button.rs

I will admit that I am not an experienced Rust developer. The changes
were made with the help of ChatGPT 4.0.
I have tested the changes locally, as I am using the date picker in my
project.


* Closes <https://github.com/emilk/egui/issues/THE_RELEVANT_ISSUE>
* [x] I have followed the instructions in the PR template

---------

Co-authored-by: Lucas Meurer <hi@lucasmerlin.me>
2025-09-04 13:13:28 +02:00
darkwater
3a2094e80e Add Memory::move_focus (#7476)
<!--
Please read the "Making a PR" section of
[`CONTRIBUTING.md`](https://github.com/emilk/egui/blob/main/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!
-->

* [X] I have followed the instructions in the PR template

This allows us to programatically move focus around. Another way would
be to inject arrow key inputs, but that requires the backend to
implement a way to do that, and could have unintended side-effects.

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2025-09-04 13:02:18 +02:00
Lucas Meurer
80d61a7c53 Remove the deadlock_detection feature (#7497)
* related #7494 

Removes the `deadlock_detection` feature, since we now have a more
primitive panic-after-30s deadlock detection which works well enough and
even detects kinds of deadlocks that the `deadlock_detection` feature
never supported.
2025-09-04 12:57:09 +02:00
Lucas Meurer
d66fa63e20 Add reasonable timeouts to all workflows (#7499)
Turns out the default timeout for github actions is 6 hours (!). This PR
sets some reasonable default for all workflows, the ones invoking cargo
in some way are limited to 60 minutes and the remaining ones to
10-15mins.
2025-09-04 12:37:24 +02:00
Lucas Meurer
fa4bee3bf7 Fix deadlock in ImageLoader, FileLoader, EhttpLoader (#7494)
* Recently CI runs started to hang randomly:
https://github.com/emilk/egui/actions/runs/17427449210/job/49477714447?pr=7359

This fixes the deadlock and adds the basic deadlock detection we also
added to Mutexes in #7468.

Also, interestingly, the more sophisticated deadlock detection (behind
the deadlock_detection feature) didn't catch this for some reason. I
wonder why it exists in the first place, when parking_lot also has built
in deadlock detection? It also seems to make tests slower, widget_tests
usually needs ~30s, with the deadlock detection removed its only ~12s.
2025-09-04 10:31:26 +02:00
Lucas Meurer
d3cd6d44cf Add Ui::place, to place widgets without changing the cursor (#7359)
* Closes <https://github.com/emilk/egui/issues/7353>

Currently `ui.put` moves the cursor after the placed widget. In my
opinion that is a bit unexpected and counterproductive in most cases
where `ui.put` makes sense.

The following example breakes with the current behavior and looks right
with my change:
```rs
            ui.horizontal(|ui| {
                let custom_button_id = Id::new("custom_button");
                let response = Button::new((
                    Atom::custom(custom_button_id, Vec2::splat(18.0)),
                    "Look at my mini button!",
                ))
                .atom_ui(ui);
                if let Some(rect) = response.rect(custom_button_id) {
                    ui.put(rect, Button::new("🔎").frame_when_inactive(false));
                }

                let custom_button_id = Id::new("custom_button");
                let response = Button::new((
                    Atom::custom(custom_button_id, Vec2::splat(18.0)),
                    "Look at my mini button!",
                ))
                .atom_ui(ui);
                if let Some(rect) = response.rect(custom_button_id) {
                    ui.put(rect, Button::new("🔎").frame_when_inactive(false));
                }
            });

            ui.add_space(10.0);

            let response = ui.button("Notifications");

            ui.put(
                Rect::from_center_size(response.rect.right_top(), Vec2::splat(12.0)),
                |ui: &mut Ui| {
                    Frame::new()
                        .fill(Color32::RED)
                        .corner_radius(10.0)
                        .show(ui, |ui| {
                            ui.label(RichText::new("11").size(8.0).color(Color32::WHITE));
                        }).response
                },
            );

            ui.button("Some other button");
```

<img width="253" height="86" alt="Screenshot 2025-07-14 at 10 58 30"
src="https://github.com/user-attachments/assets/fca56e60-e3c0-4b59-8e2d-0a39aefea9f9"
/>


<img width="361" height="107" alt="Screenshot 2025-07-14 at 10 58 51"
src="https://github.com/user-attachments/assets/85e2fbf9-9174-41e0-adaa-60c721b16bf6"
/>

I had a look at reruns source code and there are no uses of `ui.put`
that would break with this change (very little usages in general).

## Alternatives
Instead of a breaking change we could of course instead introduce a new
metheod (e.g. `Ui::place`?).
2025-09-04 10:07:35 +02:00
Emil Ernerfeldt
4947b191e4 Make more dependencies workspace dependencies (#7495) 2025-09-04 09:54:59 +02:00
Oscar Gustafsson
b9414bd4cc Selectively update dependencies to reduce total number (#7488)
<!--
Please read the "Making a PR" section of
[`CONTRIBUTING.md`](https://github.com/emilk/egui/blob/main/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!
-->

* [x] I have followed the instructions in the PR template

Update some of the core dependencies and run cargo update for selected
dependencies to remove total number and older versions.
2025-09-04 09:42:46 +02:00
Dot32
01ee9c72d5 Fix typo in the description of the id method in ui.rs (#7457)
<!--
Please read the "Making a PR" section of
[`CONTRIBUTING.md`](https://github.com/emilk/egui/blob/main/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!
-->

* [x] I have followed the instructions in the PR template

The description of the id method in the Ui struct incorrectly wrote
"where" instead of "were".

<img width="668" height="201" alt="Screenshot 2025-08-15 at 7 03 27 pm"
src="https://github.com/user-attachments/assets/df35cdab-b3ad-44d4-a565-cd9a4d883f21"
/>

This PR fixes that typo.
2025-09-04 09:18:53 +02:00
Lucas Meurer
ab8dcee7e7 Fix egui_demo_app missing wgpu backends (#7492)
* This was broken in https://github.com/emilk/egui/pull/7344
2025-09-03 12:55:02 +02:00
n4n5
0a81372cfd Add theme selection for code editor (#7375)
Change the theme selection of the code editor

Before
- was showing the window theme selector

After
- is showing the code editor theme selector


<img width="327" height="262" alt="image"
src="https://github.com/user-attachments/assets/50776218-26cc-4f11-9b91-6f902c022394"
/>


* [x] I have followed the instructions in the PR template

---------

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2025-08-24 16:41:10 +02:00
Sergey Ukolov
2957fd56a5 Fix: use unique id for resize columns in Table (#7414)
Currently the IDs for resize columns in Table are based on the ID of
parent. When placing multiple tables within the same parent the ID clash
for resize columns occurs despite the
[TableBuilder::id_salt](https://docs.rs/egui_extras/0.32.0/egui_extras/struct.TableBuilder.html#method.id_salt)
is being used.
2025-08-24 16:40:44 +02:00
Emil Ernerfeldt
0fad7d8503 Enable more clippy lints (#7474) 2025-08-24 16:27:28 +02:00
Emil Ernerfeldt
608de4a264 Update bytemuck (#7475) 2025-08-24 16:27:21 +02:00