From d2c96e213fe4a63cc9b6fe7500b7559cbf204468 Mon Sep 17 00:00:00 2001 From: MacDue Date: Wed, 27 Dec 2023 23:51:00 +0100 Subject: [PATCH] LibWeb: Add `AbstractImageStyleValue::natural_aspect_ratio()` --- .../LibWeb/CSS/StyleValues/AbstractImageStyleValue.h | 9 +++++++++ .../Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.cpp | 7 +++++++ .../Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h | 1 + 3 files changed, 17 insertions(+) diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.h index 5b94355090..43abb002c4 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.h +++ b/Userland/Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.h @@ -23,6 +23,15 @@ public: virtual Optional natural_width() const { return {}; } virtual Optional natural_height() const { return {}; } + virtual Optional natural_aspect_ratio() const + { + auto width = natural_width(); + auto height = natural_height(); + if (width.has_value() && height.has_value()) + return *width / *height; + return {}; + } + virtual void load_any_resources(DOM::Document&) {}; virtual void resolve_for_size(Layout::NodeWithStyleAndBoxModelMetrics const&, CSSPixelSize) const {}; diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.cpp index cd18bb7e7f..3b4368b696 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.cpp @@ -124,6 +124,13 @@ Optional ImageStyleValue::natural_height() const return {}; } +Optional ImageStyleValue::natural_aspect_ratio() const +{ + if (auto image_data = this->image_data()) + return image_data->intrinsic_aspect_ratio(); + return {}; +} + void ImageStyleValue::paint(PaintContext& context, DevicePixelRect const& dest_rect, CSS::ImageRendering image_rendering) const { if (auto const* b = bitmap(m_current_frame_index, dest_rect.size().to_type()); b != nullptr) { diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h index 97398eaa93..0e4eac86f0 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h +++ b/Userland/Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h @@ -42,6 +42,7 @@ public: Optional natural_width() const override; Optional natural_height() const override; + Optional natural_aspect_ratio() const override; virtual bool is_paintable() const override; void paint(PaintContext& context, DevicePixelRect const& dest_rect, CSS::ImageRendering image_rendering) const override;