1
0
mirror of https://github.com/emilk/egui.git synced 2026-06-27 23:13:13 -04:00
Commit Graph

230 Commits

Author SHA1 Message Date
Hubert Głuchowski
6b72d2f7e2 Merge branch 'master' into cache_galley_lines 2025-01-03 01:42:32 +01:00
Emil Ernerfeldt
4784136fee Better rounding of rectangles with thin outlines (#5571)
Better positioning of rectangle outline when the stroke width is less
than one pixel
2025-01-02 23:50:40 +01:00
Emil Ernerfeldt
ee4ab08c8a Shrink size of Shadow by using i8/u8 instead of f32 (#5568)
* Part of https://github.com/emilk/egui/issues/4019
2025-01-02 16:22:44 +01:00
Emil Ernerfeldt
d58d13781d Store Margin using i8 to reduce its size (#5567)
Adds `Marginf` to fill the previous niche.

This is all in a pursuit to shrink the sizes of often-used structs, to
improve performance (less cache misses, less memcpy:s, etc).

* On the path towards https://github.com/emilk/egui/issues/4019
2025-01-02 16:05:52 +01:00
Emil Ernerfeldt
aeea70d9e7 Add epaint::Brush for controlling RectShape texturing (#5565)
Also wraps `Shape::Mesh` in an `Arc`.

No new features, but decreases size of `Shape` from 72 bytes to 64.
2025-01-02 15:34:28 +01:00
Emil Ernerfeldt
cf7150c6a3 Refactor: put each shape into its own file (#5564)
Much easier to navigate the code
2025-01-02 14:55:49 +01:00
Emil Ernerfeldt
249f8bcb93 Use u8 in Rounding, and introduce Roundingf (#5563)
* Part of https://github.com/emilk/egui/issues/4019

As part of the work on adding a custom `Border` to everything, I want to
make sure that the size of `RectShape`, `Frame` and the future `Border`
is kept small (for performance reasons).

This PR changes the storage of the corner radius of rectangles from four
`f32` (one for each corner) into four `u8`. This mean the corner radius
can only be an integer in the range 0-255 (in ui points). This should be
enough for most people.

If you want to manipulate rounding using `f32`, there is a new
`Roundingf` to fill that niche.
2025-01-02 14:29:50 +01:00
Emil Ernerfeldt
77c9fd85bd cleanup 2025-01-02 02:29:19 +01:00
Emil Ernerfeldt
9fa294f21f Split out long function 2025-01-02 02:20:29 +01:00
Emil Ernerfeldt
ba2ae9d7ea Merge branch 'master' into cache_galley_lines 2025-01-02 02:09:31 +01:00
lucasmerlin
86ea3f8a5c Fix cargo test --all-features breaking rendering due to unity vertexes (#5542)
* Closes #5297 
* [x] I have followed the instructions in the PR template

It's not great but I wasn't able to come up with a better solution.
2024-12-30 12:39:17 +01:00
Emil Ernerfeldt
bf6ed3adfc Add Context::copy_image (#5533)
* Closes https://github.com/emilk/egui/issues/5424

This adds support for copying images to the system clipboard on native
and on web using `Context::copy_image`.
2024-12-29 18:03:32 +01:00
Emil Ernerfeldt
d2f75e974c Merge branch 'master' into cache_galley_lines 2024-12-28 12:55:05 +01:00
Emil Ernerfeldt
d20f93e9bf Make all lines and rectangles crisp (#5518)
* Merge this first: https://github.com/emilk/egui/pull/5517

This aligns all rectangles and (horizontal or vertical) line segments to
the physical pixel grid in the `epaint::Tessellator`, making these
shapes appear crisp everywhere.

* Closes https://github.com/emilk/egui/issues/5164
* Closes https://github.com/emilk/egui/issues/3667

This undoes a lot of the explicit, egui-side aligning added in:
* https://github.com/emilk/egui/pull/4943

The new approach has several benefits over the old one:

* It is done automatically by epaint, so it is applied to everything (no
longer opt-in)
* It is applied after any layer transforms (so it always works)
* It makes line segments crisper on high-DPI screens
* All filled rectangles now has sides that end on pixel boundaries
2024-12-26 21:02:27 +01:00
Emil Ernerfeldt
dfcc679d5a Round widget coordinates to even multiple of 1/32 (#5517)
* Closes https://github.com/emilk/egui/pull/5197
* Closes https://github.com/emilk/egui/issues/5163

This should help prevent rounding errors in layout code.

@lucasmerlin you may wanna test this with `egui_flex`
2024-12-26 20:54:24 +01:00
Hubert Głuchowski
ec9a40858c Merge branch 'master' into cache_galley_lines 2024-12-19 23:21:09 +01:00
Emil Ernerfeldt
320377e3ca Release 0.30 - egui_kittest and modals (#5487) 2024-12-16 17:45:35 +01:00
Emil Ernerfeldt
045ed41efc Fix zero-width strokes still affecting the feathering color of boxes (#5485) 2024-12-16 16:54:18 +01:00
Emil Ernerfeldt
e8029178b6 Reduce aliasing when painting thin box outlines (#5484)
* Part of https://github.com/emilk/egui/issues/5164
2024-12-16 16:28:15 +01:00
Emil Ernerfeldt
450c6242e4 Improve error message in ColorImage::region 2024-12-16 15:14:50 +01:00
Ted de Munnik
3af907919b Use profiling crate to support more profiler backends (#5150)
Hey! I am not sure if this is something that's been considered before
and decided against (I couldn't find any PR's or issues).

This change removes the internal profiling macros in library crates and
the `puffin` feature and replaces it with similar functions in the
[profiling](https://github.com/aclysma/profiling) crate. This crate
provides a layer of abstraction over various profiler instrumentation
crates and allows library users to pick their favorite (supported)
profiler.

An additional benefit for puffin users is that dependencies of egui are
included in the instrumentation output too (mainly wgpu which uses the
profiling crate), so more details might be available when profiling.

A breaking change is that instead of using the `puffin` feature on egui,
users that want to profile the crate with puffin instead have to enable
the `profile-with-puffin` feature on the profiling crate. Similarly they
could instead choose to use `profile-with-tracy` etc.

I tried to add a 'tracy' feature to egui_demo_app in order to showcase ,
however the /scripts/check.sh currently breaks on mutually exclusive
features (which this introduces), so I decided against including it for
the initial PR. I'm happy to iterate more on this if there is interest
in taking this PR though.

Screenshot showing the additional info for wgpu now available when using
puffin

![image](https://github.com/user-attachments/assets/49fc0e7e-8f88-40cb-a69e-74ca2e3f90f3)
2024-12-16 09:15:54 +01:00
Emil Ernerfeldt
53a926a428 Update MSRV to 1.80 (#5457)
Because some dependencies now require it, see:
* https://github.com/emilk/egui/pull/5456
2024-12-10 16:09:03 +01:00
Hubert Głuchowski
c094ee8a15 Merge branch 'emilk:master' into cache_galley_lines 2024-12-07 18:44:48 +01:00
Hubert Głuchowski
17a5f1f75e Fix incorrect behavior with LayoutJob::max_rows 2024-12-05 19:15:23 +01:00
Hubert Głuchowski
40f237d43c Add comment and check for newline before multiline layout 2024-12-05 18:45:36 +01:00
Hubert Głuchowski
25da82279f Fix text horizontal alignment 2024-12-05 18:27:38 +01:00
Hubert Głuchowski
c6592ec898 Fix nits 2024-12-04 19:30:13 +01:00
Emil Ernerfeldt
328422dc62 Update MSRV to Rust 1.79 (#5421)
Mostly to fix `cargo-machete` CI
2024-12-01 18:58:35 +01:00
Fishhh
139f28640d Replace a hack with a proper implementation 2024-11-30 19:29:40 +01:00
Fishhh
110a9c39e3 Move some PlacedRow methods back to Row 2024-11-30 18:27:13 +01:00
Fishhh
bbe566256e Fix Row::ends_with_newline docs, explain skipping of last galley row 2024-11-30 18:17:38 +01:00
Fishhh
fd8413c62a Simplify layout_multiline loop loop into a while loop 2024-11-30 18:12:24 +01:00
Fishhh
1be24ba470 Respect LayoutJob::round_output_size_to_nearest_ui_point 2024-11-30 17:51:07 +01:00
Fishhh
66c83c31ce Move ends_with_newline back into Row 2024-11-30 17:51:07 +01:00
Fishhh
6147ff3668 Round PlacedRow positions to pixels during multiline layout 2024-11-30 16:59:38 +01:00
Fishhh
6d6bc3befb Respect first_row_min_height during multiline Galley layout 2024-11-30 16:47:18 +01:00
Fishhh
abbc561ae1 Correctly handle empty lines 2024-11-30 15:59:50 +01:00
Hubert Głuchowski
bc86bec1cb Properly handle row repositioning 2024-11-29 15:57:47 +01:00
Hubert Głuchowski
f028154da8 Move cached-multiline-layout code into a helper function 2024-11-29 13:02:49 +01:00
Hubert Głuchowski
3de1723659 Don't add leading space to more than one split layout section 2024-11-29 11:55:15 +01:00
Hubert Głuchowski
4e3f162801 Fix lints 2024-11-29 11:50:24 +01:00
Hubert Głuchowski
db32a1ed44 Make Galleys share Rows and store their offsets 2024-11-28 18:54:54 +01:00
Hubert Głuchowski
150c0f662b Cache individual lines of text in GalleyCache 2024-11-28 18:53:45 +01:00
Hubert Głuchowski
622b848c00 Fix typo 2024-11-28 16:47:05 +01:00
GiGaGon
1787952a83 Create gray -> grey doc aliases (#5362)
As someone who uses "grey" instead of "gray", it is annoying that my
autocomplete can never find any of the "gray" color related things, so
this adds doc aliases for that.

* [x] I have followed the instructions in the PR template
2024-11-11 13:21:58 +01:00
Emil Ernerfeldt
fc743d63b4 Add link to helpful article in font alpha TODO 2024-11-06 13:33:43 +01:00
lucasmerlin
5d6a58b917 Fix some typos (#5339)
The spell check pipeline in #5313 suddenly failed, this fixes these
typos and some more found via my IDEs spell checker tool
2024-11-04 09:51:34 +01:00
StarStarJ
3f5cd74de7 Put font data into Arc to reduce memory consumption (#5276)
egui never accesses the `FontDefinitions`' member fields mutably, except
in `fonts_tweak_ui` where it cloned the `FontDefinitions` object anyway.

This patch reduces system memory consumption for shared font
definitions.
And also removes some overhead from copying (e.g. for the per
`pixel_per_points` font atlas)

Also it allows to keep a copy of the font definitions outside of egui.

In my App that uses international fonts:
Before:

![image](https://github.com/user-attachments/assets/f8dfb4f4-a21c-447c-8cf9-83025ad6e960)

New:

![image](https://github.com/user-attachments/assets/9f297fbd-e620-4b7e-a32a-65073ee805ed)


Note: If `Arc` is not wanted, then it could ofc be abstracted away.

I know this is quite a breaking change API wise, but would like to hear
your opinion.
2024-11-01 13:30:02 +01:00
rustbasic
288c74e332 Expand max font atlas size from 8k to 16k (#5257)
When using fonts with an average of 50,000 characters,
'epaint texture atlas overflowed!' may be printed and cause problems.
It is necessary to expand the max value related to texture.

* Closes #5256

---------

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2024-10-29 10:42:28 +01:00
frederik-uni
04ab5e7574 Context::add_font (#5228)
make it easier to add fonts. 

For example if I want to add a custom FontFamily or if the user wants to
add a Chinese fallback
* [x] I have followed the instructions in the PR template

---------

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
2024-10-23 14:29:44 +02:00