Przeglądaj źródła

LibWeb: Add `AbstractImageStyleValue::natural_aspect_ratio()`

MacDue 1 rok temu
rodzic
commit
d2c96e213f

+ 9 - 0
Userland/Libraries/LibWeb/CSS/StyleValues/AbstractImageStyleValue.h

@@ -23,6 +23,15 @@ public:
     virtual Optional<CSSPixels> natural_width() const { return {}; }
     virtual Optional<CSSPixels> natural_height() const { return {}; }
 
+    virtual Optional<CSSPixelFraction> 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 {};
 

+ 7 - 0
Userland/Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.cpp

@@ -124,6 +124,13 @@ Optional<CSSPixels> ImageStyleValue::natural_height() const
     return {};
 }
 
+Optional<CSSPixelFraction> 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<int>()); b != nullptr) {

+ 1 - 0
Userland/Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h

@@ -42,6 +42,7 @@ public:
 
     Optional<CSSPixels> natural_width() const override;
     Optional<CSSPixels> natural_height() const override;
+    Optional<CSSPixelFraction> 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;