mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Improve how intrinsic sizes work for videos (#31746)
* feat: patch for video layout sizes added rebase from main 2024/10/05 Co-authored-by: Josh Matthews <josh@joshmatthews.net> Signed-off-by: eri <epazos@igalia.com> * feat: take width and height parameters if provided Signed-off-by: eri <epazos@igalia.com> * chore: tidy the code and update test expectations Signed-off-by: eri <epazos@igalia.com> * feat: handle removing poster Signed-off-by: eri <epazos@igalia.com> * chore: update test expectations and remove debug code Signed-off-by: eri <epazos@igalia.com> * fix: issues after rebasing to main Signed-off-by: eri <epazos@igalia.com> * feat: pass src remove test and tidy Signed-off-by: eri <epazos@igalia.com> * chore: clippy fixes Signed-off-by: eri <epazos@igalia.com> * chore: update passing test expectations Signed-off-by: eri <epazos@igalia.com> * fix object-position-svg test Signed-off-by: eri <epazos@igalia.com> * fix unintentional override of video size and resize events Signed-off-by: eri <epazos@igalia.com> * change how resize events are sent to better match the spec Signed-off-by: eri <epazos@igalia.com> * simplify poster mutation handling Co-authored-by: Oriol Brufau <obrufau@igalia.com> Signed-off-by: eri <eri@inventati.org> * improved handling of intrinsic sizes - differentiate between natural size and css size - presentational attributes - fallback ratio for video element - handle more cases where the src/poster are added/removed - aspect ratio hints Signed-off-by: eri <epazos@igalia.com> * update test expectations Signed-off-by: eri <epazos@igalia.com> * fix cleaning current frame Signed-off-by: eri <epazos@igalia.com> * update test expectations Signed-off-by: eri <epazos@igalia.com> * Apply suggestions from code review Co-authored-by: Oriol Brufau <obrufau@igalia.com> Signed-off-by: eri <eri@inventati.org> * More code review suggestions Signed-off-by: eri <epazos@igalia.com> * Prevent aspect-ratio:auto from pulling the ratio from the default object size As resolved in https://github.com/w3c/csswg-drafts/issues/7524#issuecomment-1204462924 Signed-off-by: Oriol Brufau <obrufau@igalia.com> --------- Signed-off-by: eri <epazos@igalia.com> Signed-off-by: eri <eri@inventati.org> Signed-off-by: Oriol Brufau <obrufau@igalia.com> Co-authored-by: Josh Matthews <josh@joshmatthews.net> Co-authored-by: Oriol Brufau <obrufau@igalia.com>
This commit is contained in:
parent
43d1601016
commit
01820e2a8a
25 changed files with 290 additions and 360 deletions
|
@ -26,7 +26,9 @@ use range::*;
|
|||
use script_layout_interface::wrapper_traits::{
|
||||
PseudoElementType, ThreadSafeLayoutElement, ThreadSafeLayoutNode,
|
||||
};
|
||||
use script_layout_interface::{HTMLCanvasData, HTMLCanvasDataSource, HTMLMediaData, SVGSVGData};
|
||||
use script_layout_interface::{
|
||||
HTMLCanvasData, HTMLCanvasDataSource, HTMLMediaData, MediaFrame, SVGSVGData,
|
||||
};
|
||||
use serde::ser::{Serialize, SerializeStruct, Serializer};
|
||||
use servo_url::ServoUrl;
|
||||
use style::computed_values::border_collapse::T as BorderCollapse;
|
||||
|
@ -381,7 +383,7 @@ impl CanvasFragmentInfo {
|
|||
|
||||
#[derive(Clone)]
|
||||
pub struct MediaFragmentInfo {
|
||||
pub current_frame: Option<(webrender_api::ImageKey, i32, i32)>,
|
||||
pub current_frame: Option<MediaFrame>,
|
||||
}
|
||||
|
||||
impl MediaFragmentInfo {
|
||||
|
@ -1036,13 +1038,9 @@ impl Fragment {
|
|||
Au(0)
|
||||
}
|
||||
},
|
||||
SpecificFragmentInfo::Media(ref info) => {
|
||||
if let Some((_, width, _)) = info.current_frame {
|
||||
Au::from_px(width)
|
||||
} else {
|
||||
Au(0)
|
||||
}
|
||||
},
|
||||
SpecificFragmentInfo::Media(ref info) => info
|
||||
.current_frame
|
||||
.map_or(Au(0), |frame| Au::from_px(frame.width)),
|
||||
SpecificFragmentInfo::Canvas(ref info) => info.dom_width,
|
||||
SpecificFragmentInfo::Svg(ref info) => info.dom_width,
|
||||
// Note: Currently for replaced element with no intrinsic size,
|
||||
|
@ -1066,13 +1064,9 @@ impl Fragment {
|
|||
Au(0)
|
||||
}
|
||||
},
|
||||
SpecificFragmentInfo::Media(ref info) => {
|
||||
if let Some((_, _, height)) = info.current_frame {
|
||||
Au::from_px(height)
|
||||
} else {
|
||||
Au(0)
|
||||
}
|
||||
},
|
||||
SpecificFragmentInfo::Media(ref info) => info
|
||||
.current_frame
|
||||
.map_or(Au(0), |frame| Au::from_px(frame.height)),
|
||||
SpecificFragmentInfo::Canvas(ref info) => info.dom_height,
|
||||
SpecificFragmentInfo::Svg(ref info) => info.dom_height,
|
||||
SpecificFragmentInfo::Iframe(_) => Au::from_px(DEFAULT_REPLACED_HEIGHT),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue