This commit is contained in:
Jason Lee 2025-08-21 16:40:30 +08:00
parent 53e03dcc1d
commit a41e1f2a79
2 changed files with 14 additions and 8 deletions

View file

@ -1,4 +1,4 @@
use crate::{DevicePixels, Result, SharedString, Size, size}; use crate::{DevicePixels, Pixels, Result, SharedString, Size, size};
use smallvec::SmallVec; use smallvec::SmallVec;
use image::{Delay, Frame}; use image::{Delay, Frame};
@ -80,6 +80,12 @@ impl RenderImage {
size(width.into(), height.into()) size(width.into(), height.into())
} }
/// Get the size of this image, in pixels for display, adjusted for the scale factor.
pub(crate) fn render_size(&self, frame_index: usize) -> Size<Pixels> {
self.size(frame_index)
.map(|v| (v.0 as f32 / self.scale_factor).into())
}
/// Get the delay of this frame from the previous /// Get the delay of this frame from the previous
pub fn delay(&self, frame_index: usize) -> Delay { pub fn delay(&self, frame_index: usize) -> Delay {
self.data[frame_index].delay() self.data[frame_index].delay()

View file

@ -332,9 +332,7 @@ impl Element for Img {
state.started_loading = None; state.started_loading = None;
} }
let image_size = data let image_size = data.render_size(frame_index);
.size(frame_index)
.map(|n| n.0 as f32 / data.scale_factor);
style.aspect_ratio = Some(image_size.width / image_size.height); style.aspect_ratio = Some(image_size.width / image_size.height);
if let Length::Auto = style.size.width { if let Length::Auto = style.size.width {
@ -342,9 +340,10 @@ impl Element for Img {
Length::Definite(DefiniteLength::Absolute( Length::Definite(DefiniteLength::Absolute(
AbsoluteLength::Pixels(height), AbsoluteLength::Pixels(height),
)) => Length::Definite( )) => Length::Definite(
px(image_size.width * height.0 / image_size.height).into(), px(image_size.width.0 * height.0 / image_size.height.0)
.into(),
), ),
_ => Length::Definite(px(image_size.width).into()), _ => Length::Definite(image_size.width.into()),
}; };
} }
@ -353,9 +352,10 @@ impl Element for Img {
Length::Definite(DefiniteLength::Absolute( Length::Definite(DefiniteLength::Absolute(
AbsoluteLength::Pixels(width), AbsoluteLength::Pixels(width),
)) => Length::Definite( )) => Length::Definite(
px(image_size.height * width.0 / image_size.width).into(), px(image_size.height.0 * width.0 / image_size.width.0)
.into(),
), ),
_ => Length::Definite(px(image_size.height).into()), _ => Length::Definite(image_size.height.into()),
}; };
} }