Thanks to `impl From<bool> for Vec2b` one can now shorten some builder
calls, like:
Previous:
```rust
egui::ScrollArea::vertical()
.auto_shrink([false; 2])
```
New:
```rust
egui::ScrollArea::vertical()
.auto_shrink(false)
```
* Update images in README.md
* Add ferris image to hello_world example
* Clean up and improve README.md, with top-level link to Rerun
* Move sections around
* Imoprove docs for callback shapes
* Improve docs for loader traits
* Use snake_case for feature `all_loaders`
* Make loaders publix
* Slightly better error message on image load failure
* Improve image loading error messages
* Use `bytes://` schema for included bytes loader
* Try user loaders first
* Move `image_loading_spinners` to `Visuals`
* Unify and simplify code
* Make the main text of `Button` optional
This largely makes ImageButton obsolete
* Fix docstrings
* Better docs
* typos
* Use the more explicit `egui_extras::install_image_loaders`
* Simplify `Image::paint_at` function
* add egui logo to widget gallery
* improve "no image loaders" error message
* rework static URIs to accept `Cow<'static>`
* remove `RetainedImage` from `http_app` in `egui_demo_app`
* hide `RetainedImage` from docs
* use `ui.image`/`Image` over `RawImage`
* remove last remanant of `RawImage`
* remove unused doc link
* add style option to disable image spinners
* use `Into<Image>` instead of `Into<ImageSource>` to allow configuring the underlying image
* propagate `image_options` through `ImageButton`
* calculate image size properly in `Button`
* properly calculate size in `ImageButton`
* Update crates/egui/src/widgets/image.rs
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* improve no image loaders error message
* add `size()` helper to `TexturePoll`
* try get size from poll in `Button`
* add `paint_at` to `Spinner`
* use `Spinner::paint_at` and hover on image button response
* `show_spinner` -> `show_loading_spinner`
* avoid `allocate_ui` in `Image` when painting spinner
* make icon smaller + remove old texture
* add `load_and_calculate_size` + expose `paint_image_at`
* update `egui_plot` to paint image in the right place
* Add helpers for painting an ImageSource directly
* Use max_size=INF as default
* Use new API in WidgetGallery
* Make egui_demo_app work by default
* Remove Option from scale
* Refactor ImageSize
* Fix docstring
* Small refactor
---------
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* Add puffin profile scopes to the startup and running of eframe
* puffin_profiler example: start puffin right away
* cargo format let-else statements
* More profile scopes
* Add some `#[inline]`
* Standardize puffin profile scope definitions
* standardize again
* Silence warning when puffin is disabled
* rework loading around `Arc<Loaders>`
* use `Bytes` instead of splitting api
* remove unwraps in `texture_handle`
* make `FileLoader` optional under `file` feature
* hide http load error stack trace from UI
* implement image fit
* support more image sources
* center spinner if we know size ahead of time
* allocate final size for spinner
* improve image format guessing
* remove `ui.image`, `Image`, add `RawImage`
* deprecate `RetainedImage`
* `image2` -> `image`
* add viewer example
* update `examples/image` + remove `svg` and `download_image` exapmles
* fix lints and tests
* fix doc link
* add image controls to `images` example
* add more `From` str-like types
* add api to forget all images
* fix max size
* do not scale original size unless necessary
* fix doc link
* add more docs for `Image` and `RawImage`
* make paint_at `pub`
* update `ImageButton` to use new `Image` API
* fix double rendering
* `SizeHint::Original` -> `Scale` + remove `Option` wrapper
* Update crates/egui/src/load.rs
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* remove special `None` value for `forget`
* Update crates/egui/src/load.rs
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* add more examples to `ui.image` + add `include_image` macro
* Update crates/egui/src/ui.rs
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* update `menu_image_button` to use `ImageSource`
* `OrderedFloat::get` -> `into_inner`
* derive `Eq` on `SizedTexture`
* add `id` to loaders + `is_installed` check
* move `images` to demo + simplify `images` example
* log trace when installing loaders
* fix lint
* fix doc link
* add more documentation
* more `egui_extras::loaders` docs
* Update examples/images/src/main.rs
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* update `images` example screenshots + readme
* remove unused `rfd` from `images` example
* Update crates/egui_extras/src/loaders/ehttp_loader.rs
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* add `must_use` on `Image` and `RawImage`
* document `loaders::install` multiple call safety
* Update crates/egui_extras/Cargo.toml
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* reshuffle `is_loader_installed`
* make `include_image` produce `ImageSource` + update docs
* update `include_image` docs
* remove `None` mentions from loader `forget`
* inline `From` texture id + size for `SizedTexture`
* add warning about statically known path
* change image load error + use in image button
* add `.size()` to `Image`
* Update crates/egui_demo_app/Cargo.toml
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* add explanations to image viewer ui
---------
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* add types from proposal
* add load methods on `egui::Context`
* implement loaders from proposal in `egui_extras`
* impl `From<Vec2>` for `SizeHint`
* re-export `SizeHint` from `egui` root
* rework `svg` example to use new managed `Image`
* split loaders into separate files + add logging
* add `log_trace`
* clean up `RetainedImage` from `svg` example
* refactor ehttp loader response to bytes mapping
* remove spammy trace
* load images even without extension
* fix lints
* remove unused imports
* use `Image2` in `download_image`
* use `visuals.error_fg_color` in `Image2` error state
* update lockfile
* use `Arc<ColorImage>` in `ImageData` + add `forget` API
* add `ui.image2`
* add byte size query api
* use iterators to sum loader byte sizes
* add static image loading
* use static image in `svg` example
* small refactor of `Image2::ui` texture loading code
* add `ImageFit` to size images properly
* remove println calls
* add bad image load to `download_image` example
* add loader file extension support tests
* fix lint errors in `loaders`
* remove unused `poll-promise` dependency
* add some docs to `Image2`
* add some docs to `egui_extras::loaders::install`
* explain `loaders::install` in examples
* fix lint
* upgrade `ehttp` to `0.3` for some crates
* Remove some unused dependencies
* Remove unnecessary context clone
* Turn on the `log` create feature of egui_extras in all examples
* rename `forget` and document it
* derive `Debug` on `SizeHint`
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* round when converting SizeHint from vec2
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* add `load` module docs
* docstring `add_loader` methods
* expose + document `load_include_bytes`
* cache texture handles in `DefaultTextureLoader`
* add `image2` doctest + further document `Image2`
* use `Default` for default `Image2` options
* update `image2` doc comment
* mention immediate-mode safety
* more fit calculation into inherent impl
* add hover text on spinner
* add `all-loaders` feature
* clarify `egui_extras::loaders::install` behavior
* explain how to enable image formats
* properly format `uri`
* use `thread::Builder` instead of `spawn`
* use eq op instead of `matches`
* inline `From<Arc<ColorImage>>` for `ImageData`
* allow non-`'static` bytes + `forget` in `DefaultTextureLoader`
* sort features
* change `ehttp` feature to `http`
* update `Image2` docs
* refactor loader cache type
---------
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* implement save_plot
* fix for check.sh
* clippy
* add save_plot to Cargo.lock
* adapted for PR #2676 (removes unsafe code)
* add some comments
* implemented the comments from emilk
* update comments in code
* rustfmt
* remove picked_path
* add more comments
* removed unused import
* use `inner.response.rect` as the plot position
* remove plot_location from MyApp members
* sort entries
* Update examples/save_plot/src/main.rs
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* use env_logger instead of tracing subscriber
* use env_logger instead of tracing subscriber and combine if let
---------
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* add method for requesting attention to the main window
* use another enum member for user attention type instead of nested `Option`s
(also, document the enum members now that they don't mirror `winit`)
* update the docstring
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* add an example app for testing window attention requests
* Apply suggestions from code review
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* remove `chrono` dependency and improve the attention example's readability
---------
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* Replace tracing crate with log
It's just so much simpler to use
* Add `bacon wasm` job
* eframe: add a WebLogger for piping log events to the web console
* Clear color values are not explicitely sent to the rendering backend as-is.
Previously, converting from Color32 to Rgba caused an srgb->linear conversion. This conversion is incorrect if the backbuffer doesn't perform automatic conversion from linear->srgb (lack of this conversion is generally what egui assumes!).
* fill in pr numbers in changelog
* Epi comment fix
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* Color32 comment fix
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* move changelog line
* rename fix
* use backticks in doc
---------
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* Revert "fix all clippy lints and remove them from allow list in cranky (#2419)"
This reverts commit 930ef2db38.
* Explain the cranky lints better
* Add Color32::gamma_multiply
* Remove unused pub use
* Remove non-existing crate category
* Improve color test with more lines
* Improve the look of thin lines, making them look weaker
Before they looked were too strong for the thickness.
* Use asserts for shader compilations
* Update changelogs
* eframe::run_native: return errors instead of crashing
* Detect and handle glutin errors
* egui_demo_app: silence wgpu log spam
* Add trace logs for why eframe is shutting down
* Fix: only save App state once on Mac
* Handle Winit failure
* Log where we load app state from
* Don't panic on zero-sized window
* Clamp loaded window size to not be too tiny to see
* Simplify code: more shared code in window_builder
* Improve code readability
* Fix wasm32 build
* fix android
* Update changelog
* squash before rebase
* Update AccessKit, introducing support for editable spinners on Windows and an important fix for navigation order on macOS
* Restore support for increment and decrement actions in DragValue
* Avoid VoiceOver race condition bug
* fix clippy lint
* Tell AccessKit that the default action for a text edit (equivalent to a click) is to set the focus. This matters to some platform adapters.
* Refactor InputState functions for AccessKit actions
* Support the AccessKit SetValue for DragValue; this is the only way for a Windows AT to programmatically adjust the value
* Same for Slider
* Properly associate the slider label with both the slider and the drag value
* Lazily activate egui's AccessKit support
* fix clippy lint
* Update AccessKit
* More documentation, particularly around lazy activation
* Tweak one of the doc comments
* See if I can get AccessKit exempted from the 'missing backticks' lint
* Make PlatformOutput::accesskit_update an Option
* Refactor lazy activation
* Refactor node mutation (again)
* Eliminate the need for an explicit is_accesskit_active method, at least for now
* Fix doc comment
* More refactoring of tree construction; don't depend on Arc::get_mut
* Override a clippy lint; I seem to have no other choice
* Final planned refactor: a more flexible approach to hierarchy
* Last AccessKit update for this PR; includes an important macOS DPI fix
* Move and document the optional accesskit dependency
* Fix comment typo
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* reformat
* More elegant code for conditionally creating a node
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* Set step to 1.0 for all integer sliders
* Add doc example for Response::labelled_by
* Clarify a TODO comment I left for myself
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* Fix key press event
* Add example with key presses
* Changelog line for key_press fix
* PR review improvements
* Add PR link in changelog
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
* Using tracing-subscriber in hello_world example
* Add Key::Plus/Minus/Equals
* Warn if failing to guess OS from User-Agent
* Remove jitter when using Context::set_pixels_per_point
* Demo app: zoom in/out using ⌘+ and ⌘-
* Demo app: make backend panel GUI scale slider better
* Optimize debug builds a bit
* typo
* Update changelog
* Add helper module `egui::gui_zoom` for zooming an app
* Better names, and update changelog
* Combine Plus and Equals keys
* Last fix
* Fix docs
* Use total_cmp for clamping DragValue
* Added test for clamping
* Increase MSRV in all crates
* Increased rust version for github actions and lib.rs
* Inversed ranges are now working properply with clamp_to_range
* Added more tests
Closes https://github.com/emilk/egui/issues/2068
Before this PR, the default font, Ubuntu-Light, was ~11% smaller
than it should have been, and the default monospace font, Hack,
was ~14% smaller. This means that setting the font size `12` in egui
would yield smaller text than using that font size in any other app.
Ooops!
The change is that this PR now takes into account the ttf properties
`units_per_em` and `height_unscaled`.
If your egui application has specified you own font sizes or text styles
you will see the text in your application grow
larger, unless you go in and compensate by dividing all font sizes by
~1.21 for Ubuntu-Light/Proportional and ~1.16 for Hack/Monospace,
and with something else if you are using a custom font!
This effects any use of `FontId`, `RichText::size`, etc.
This PR changes the default `Style::text_styles` to compensate,
so the default egui style should look the same before and after this PR.
Since https://github.com/emilk/egui/pull/1919 we can continue
the application after closing the native window. It therefore makes
more sense to call `frame.close()` to close the native window,
instead of `frame.quit()`.
* Use correct FBO to output
* custom_3d_three-d web
* Update .gitignore
* Do not free the FBO
* Use three-d 0.13
* ThreeDApp
* Only construct model and camera once
* Clean-up and docs
* Web build instructions
* Remove unused dependencies
* Update Cargo.lock
* Fix build
* More fixes
* omg
The `custom_3d_three-d` example does not enable a depth buffer since it is only rendering a triangle. However, if it is used as a starting point for other projects, it is highly likely that a depth buffer is actually needed, therefore I propose to enable it by default.
Also see [this](https://github.com/asny/three-d/issues/268) issue for full context.
* Re-implement PaintCallbacks With Support for WGPU
This makes breaking changes to the PaintCallback system, but makes it
flexible enough to support both the WGPU and glow backends with custom
rendering.
Also adds a WGPU equivalent to the glow demo for custom painting.
Based on https://github.com/hasenbanck/egui_wgpu_backend
`egui-wgpu` is now an official backend for `eframe` (opt-in).
Use the `wgpu` feature flag on `eframe` and the `NativeOptions::renderer` settings to pick it.
Co-authored-by: Nils Hasenbanck <nils@hasenbanck.de>
Co-authored-by: Sven Niederberger <niederberger@embotech.com>
Co-authored-by: Sven Niederberger <73159570+s-nie@users.noreply.github.com>
* Move examples out of eframe/examples into examples/
Give each example a `Cargo.toml` and `src/main.rs`.
This makes it easier for people to use as templates.
* Update README.md with more deps needed on vanilla Ubuntu
* Install libgtk-3-dev on CI, hoping that will fix something