From 84e721660310ef4f3e5aa5039db852bb006da0d3 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Thu, 8 Jun 2023 15:56:28 +0100 Subject: [PATCH] LibWeb: Move "natural size" concept into Layout::Box Having this here instead of in ReplacedBox means we can access it when figuring out what the "preferred aspect ratio" is. There's some inconsistency between specs about what this is called, but they're moving towards referring to this as "natural width/height/ aspect-ratio", so let's copy that terminology. --- Userland/Libraries/LibWeb/Layout/Box.h | 21 +++++--- .../Libraries/LibWeb/Layout/ButtonBox.cpp | 4 +- .../Libraries/LibWeb/Layout/CanvasBox.cpp | 4 +- Userland/Libraries/LibWeb/Layout/CheckBox.cpp | 4 +- .../LibWeb/Layout/FlexFormattingContext.cpp | 16 +++--- .../LibWeb/Layout/FormattingContext.cpp | 52 +++++++++---------- Userland/Libraries/LibWeb/Layout/FrameBox.cpp | 4 +- Userland/Libraries/LibWeb/Layout/ImageBox.cpp | 12 ++--- Userland/Libraries/LibWeb/Layout/Progress.cpp | 2 +- .../Libraries/LibWeb/Layout/RadioButton.cpp | 6 +-- .../Libraries/LibWeb/Layout/ReplacedBox.h | 10 +--- .../Libraries/LibWeb/Layout/SVGSVGBox.cpp | 6 +-- Userland/Libraries/LibWeb/Layout/VideoBox.cpp | 8 +-- 13 files changed, 75 insertions(+), 74 deletions(-) diff --git a/Userland/Libraries/LibWeb/Layout/Box.h b/Userland/Libraries/LibWeb/Layout/Box.h index a996209aaa..76eb956303 100644 --- a/Userland/Libraries/LibWeb/Layout/Box.h +++ b/Userland/Libraries/LibWeb/Layout/Box.h @@ -28,13 +28,18 @@ public: bool is_body() const; - virtual Optional intrinsic_width() const { return {}; } - virtual Optional intrinsic_height() const { return {}; } - virtual Optional intrinsic_aspect_ratio() const { return {}; } + // https://www.w3.org/TR/css-images-3/#natural-dimensions + Optional natural_width() const { return m_natural_width; } + Optional natural_height() const { return m_natural_height; } + Optional natural_aspect_ratio() const { return m_natural_aspect_ratio; } - bool has_intrinsic_width() const { return intrinsic_width().has_value(); } - bool has_intrinsic_height() const { return intrinsic_height().has_value(); } - bool has_intrinsic_aspect_ratio() const { return intrinsic_aspect_ratio().has_value(); } + bool has_natural_width() const { return natural_width().has_value(); } + bool has_natural_height() const { return natural_height().has_value(); } + bool has_natural_aspect_ratio() const { return natural_aspect_ratio().has_value(); } + + void set_natural_width(Optional width) { m_natural_width = width; } + void set_natural_height(Optional height) { m_natural_height = height; } + void set_natural_aspect_ratio(Optional ratio) { m_natural_aspect_ratio = ratio; } virtual ~Box() override; @@ -56,6 +61,10 @@ private: virtual bool is_box() const final { return true; } CSSPixelPoint m_scroll_offset; + + Optional m_natural_width; + Optional m_natural_height; + Optional m_natural_aspect_ratio; }; template<> diff --git a/Userland/Libraries/LibWeb/Layout/ButtonBox.cpp b/Userland/Libraries/LibWeb/Layout/ButtonBox.cpp index 881fd6647f..0bdf09a67f 100644 --- a/Userland/Libraries/LibWeb/Layout/ButtonBox.cpp +++ b/Userland/Libraries/LibWeb/Layout/ButtonBox.cpp @@ -25,8 +25,8 @@ void ButtonBox::prepare_for_replaced_layout() // value attribute. This is not the case with