mirror of
https://github.com/emilk/egui.git
synced 2026-09-02 06:40:06 -04:00
Final polish for new image loading (#3328)
* 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>
This commit is contained in:
@@ -13,7 +13,7 @@ pub struct ImageViewer {
|
||||
chosen_fit: ChosenFit,
|
||||
fit: ImageFit,
|
||||
maintain_aspect_ratio: bool,
|
||||
max_size: Option<Vec2>,
|
||||
max_size: Vec2,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq)]
|
||||
@@ -43,7 +43,7 @@ impl Default for ImageViewer {
|
||||
chosen_fit: ChosenFit::Fraction,
|
||||
fit: ImageFit::Fraction(Vec2::splat(1.0)),
|
||||
maintain_aspect_ratio: true,
|
||||
max_size: None,
|
||||
max_size: Vec2::splat(2048.0),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -160,10 +160,10 @@ impl eframe::App for ImageViewer {
|
||||
ui.add(Slider::new(&mut fract.y, 0.0..=1.0).text("height"));
|
||||
}
|
||||
ChosenFit::OriginalSize => {
|
||||
if !matches!(self.fit, ImageFit::Original(_)) {
|
||||
self.fit = ImageFit::Original(Some(1.0));
|
||||
if !matches!(self.fit, ImageFit::Original { .. }) {
|
||||
self.fit = ImageFit::Original { scale: 1.0 };
|
||||
}
|
||||
let ImageFit::Original(Some(scale)) = &mut self.fit else {
|
||||
let ImageFit::Original{scale} = &mut self.fit else {
|
||||
unreachable!()
|
||||
};
|
||||
ui.add(Slider::new(scale, 0.1..=4.0).text("scale"));
|
||||
@@ -173,21 +173,8 @@ impl eframe::App for ImageViewer {
|
||||
// max size
|
||||
ui.add_space(5.0);
|
||||
ui.label("The calculated size will not exceed the maximum size");
|
||||
let had_max_size = self.max_size.is_some();
|
||||
let mut has_max_size = had_max_size;
|
||||
ui.checkbox(&mut has_max_size, "Max size");
|
||||
match (had_max_size, has_max_size) {
|
||||
(true, false) => self.max_size = None,
|
||||
(false, true) => {
|
||||
self.max_size = Some(ui.available_size());
|
||||
}
|
||||
(true, true) | (false, false) => {}
|
||||
}
|
||||
|
||||
if let Some(max_size) = self.max_size.as_mut() {
|
||||
ui.add(Slider::new(&mut max_size.x, 0.0..=2048.0).text("width"));
|
||||
ui.add(Slider::new(&mut max_size.y, 0.0..=2048.0).text("height"));
|
||||
}
|
||||
ui.add(Slider::new(&mut self.max_size.x, 0.0..=2048.0).text("width"));
|
||||
ui.add(Slider::new(&mut self.max_size.y, 0.0..=2048.0).text("height"));
|
||||
|
||||
// aspect ratio
|
||||
ui.add_space(5.0);
|
||||
@@ -209,7 +196,7 @@ impl eframe::App for ImageViewer {
|
||||
});
|
||||
image = image.rotate(angle, origin);
|
||||
match self.fit {
|
||||
ImageFit::Original(scale) => image = image.fit_to_original_size(scale),
|
||||
ImageFit::Original { scale } => image = image.fit_to_original_size(scale),
|
||||
ImageFit::Fraction(fract) => image = image.fit_to_fraction(fract),
|
||||
ImageFit::Exact(size) => image = image.fit_to_exact_size(size),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user