Use default object size as fallback for intrinsic size of replaced element (#34084)

Instead of falling back to zero.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
This commit is contained in:
Oriol Brufau 2024-10-31 18:05:17 +01:00 committed by GitHub
parent f5fd560ef8
commit 0d7fa75447
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 22 additions and 18 deletions

View file

@ -15,7 +15,7 @@ use pixels::Image;
use serde::Serialize; use serde::Serialize;
use servo_arc::Arc as ServoArc; use servo_arc::Arc as ServoArc;
use style::computed_values::object_fit::T as ObjectFit; use style::computed_values::object_fit::T as ObjectFit;
use style::logical_geometry::Direction; use style::logical_geometry::{Direction, WritingMode};
use style::properties::ComputedValues; use style::properties::ComputedValues;
use style::servo::url::ComputedUrl; use style::servo::url::ComputedUrl;
use style::values::computed::image::Image as ComputedImage; use style::values::computed::image::Image as ComputedImage;
@ -241,9 +241,9 @@ impl ReplacedContent {
} }
} }
fn flow_relative_intrinsic_size(&self, style: &ComputedValues) -> LogicalVec2<Option<Au>> { fn flow_relative_intrinsic_size(&self, writing_mode: WritingMode) -> LogicalVec2<Option<Au>> {
let intrinsic_size = PhysicalSize::new(self.natural_size.width, self.natural_size.height); let intrinsic_size = PhysicalSize::new(self.natural_size.width, self.natural_size.height);
LogicalVec2::from_physical_size(&intrinsic_size, style.writing_mode) LogicalVec2::from_physical_size(&intrinsic_size, writing_mode)
} }
fn inline_size_over_block_size_intrinsic_ratio( fn inline_size_over_block_size_intrinsic_ratio(
@ -276,13 +276,18 @@ impl ReplacedContent {
.into(), .into(),
depends_on_block_constraints: true, depends_on_block_constraints: true,
}, },
_ => InlineContentSizesResult { _ => {
sizes: self let writing_mode = containing_block_for_children.style.writing_mode;
.flow_relative_intrinsic_size(containing_block_for_children.style) InlineContentSizesResult {
.inline sizes: self
.unwrap_or_else(Au::zero) .flow_relative_intrinsic_size(writing_mode)
.into(), .inline
depends_on_block_constraints: false, .unwrap_or_else(|| {
Self::flow_relative_default_object_size(writing_mode).inline
})
.into(),
depends_on_block_constraints: false,
}
}, },
} }
} }
@ -469,6 +474,10 @@ impl ReplacedContent {
PhysicalSize::new(Au::from_px(300), Au::from_px(150)) PhysicalSize::new(Au::from_px(300), Au::from_px(150))
} }
pub(crate) fn flow_relative_default_object_size(writing_mode: WritingMode) -> LogicalVec2<Au> {
LogicalVec2::from_physical_size(&Self::default_object_size(), writing_mode)
}
/// <https://drafts.csswg.org/css2/visudet.html#inline-replaced-width> /// <https://drafts.csswg.org/css2/visudet.html#inline-replaced-width>
/// <https://drafts.csswg.org/css2/visudet.html#inline-replaced-height> /// <https://drafts.csswg.org/css2/visudet.html#inline-replaced-height>
/// ///
@ -482,13 +491,11 @@ impl ReplacedContent {
min_box_size: LogicalVec2<Au>, min_box_size: LogicalVec2<Au>,
max_box_size: LogicalVec2<Option<Au>>, max_box_size: LogicalVec2<Option<Au>>,
) -> LogicalVec2<Au> { ) -> LogicalVec2<Au> {
let mode = style.writing_mode; let writing_mode = style.writing_mode;
let intrinsic_size = self.flow_relative_intrinsic_size(style); let intrinsic_size = self.flow_relative_intrinsic_size(writing_mode);
let default_object_size = || Self::flow_relative_default_object_size(writing_mode);
let intrinsic_ratio = self.preferred_aspect_ratio(&containing_block.into(), style); let intrinsic_ratio = self.preferred_aspect_ratio(&containing_block.into(), style);
let default_object_size =
|| LogicalVec2::from_physical_size(&Self::default_object_size(), mode);
let get_tentative_size = |LogicalVec2 { inline, block }| -> LogicalVec2<Au> { let get_tentative_size = |LogicalVec2 { inline, block }| -> LogicalVec2<Au> {
match (inline, block) { match (inline, block) {
(AuOrAuto::LengthPercentage(inline), AuOrAuto::LengthPercentage(block)) => { (AuOrAuto::LengthPercentage(inline), AuOrAuto::LengthPercentage(block)) => {

View file

@ -1,7 +1,4 @@
[intrinsic-size-fallback-video.html] [intrinsic-size-fallback-video.html]
[.wrapper 1]
expected: FAIL
[.wrapper 3] [.wrapper 3]
expected: FAIL expected: FAIL