aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout_2020
diff options
context:
space:
mode:
authorOriol Brufau <obrufau@igalia.com>2024-10-31 18:05:17 +0100
committerGitHub <noreply@github.com>2024-10-31 17:05:17 +0000
commit0d7fa7544779842aa19bac88f380168e85668956 (patch)
tree5ef1ce7b9fc8cb26a12d86483519f0101a1705f5 /components/layout_2020
parentf5fd560ef8cc1ae9c67641808956cefbacfa3169 (diff)
downloadservo-0d7fa7544779842aa19bac88f380168e85668956.tar.gz
servo-0d7fa7544779842aa19bac88f380168e85668956.zip
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>
Diffstat (limited to 'components/layout_2020')
-rw-r--r--components/layout_2020/replaced.rs37
1 files changed, 22 insertions, 15 deletions
diff --git a/components/layout_2020/replaced.rs b/components/layout_2020/replaced.rs
index 9feaae3e804..83973900473 100644
--- a/components/layout_2020/replaced.rs
+++ b/components/layout_2020/replaced.rs
@@ -15,7 +15,7 @@ use pixels::Image;
use serde::Serialize;
use servo_arc::Arc as ServoArc;
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::servo::url::ComputedUrl;
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);
- 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(
@@ -276,13 +276,18 @@ impl ReplacedContent {
.into(),
depends_on_block_constraints: true,
},
- _ => InlineContentSizesResult {
- sizes: self
- .flow_relative_intrinsic_size(containing_block_for_children.style)
- .inline
- .unwrap_or_else(Au::zero)
- .into(),
- depends_on_block_constraints: false,
+ _ => {
+ let writing_mode = containing_block_for_children.style.writing_mode;
+ InlineContentSizesResult {
+ sizes: self
+ .flow_relative_intrinsic_size(writing_mode)
+ .inline
+ .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))
}
+ 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-height>
///
@@ -482,13 +491,11 @@ impl ReplacedContent {
min_box_size: LogicalVec2<Au>,
max_box_size: LogicalVec2<Option<Au>>,
) -> LogicalVec2<Au> {
- let mode = style.writing_mode;
- let intrinsic_size = self.flow_relative_intrinsic_size(style);
+ let writing_mode = style.writing_mode;
+ 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 default_object_size =
- || LogicalVec2::from_physical_size(&Self::default_object_size(), mode);
-
let get_tentative_size = |LogicalVec2 { inline, block }| -> LogicalVec2<Au> {
match (inline, block) {
(AuOrAuto::LengthPercentage(inline), AuOrAuto::LengthPercentage(block)) => {