diff --git a/Libraries/LibWeb/HTML/HTMLImageElement.cpp b/Libraries/LibWeb/HTML/HTMLImageElement.cpp
index 08487af6a0..1a3e3eec5b 100644
--- a/Libraries/LibWeb/HTML/HTMLImageElement.cpp
+++ b/Libraries/LibWeb/HTML/HTMLImageElement.cpp
@@ -310,46 +310,6 @@ void HTMLImageElement::adjust_computed_style(CSS::ComputedProperties& style)
style.set_property(CSS::PropertyID::Display, CSS::DisplayStyleValue::create(CSS::Display::from_short(CSS::Display::Short::None)));
}
-Optional HTMLImageElement::default_image_frame_sized(Gfx::IntSize size) const
-{
- if (auto data = m_current_request->image_data())
- return data->frame(0, size);
- return {};
-}
-
-bool HTMLImageElement::is_image_available() const
-{
- return m_current_request && m_current_request->is_available();
-}
-
-Optional HTMLImageElement::intrinsic_width() const
-{
- if (auto image_data = m_current_request->image_data())
- return image_data->intrinsic_width();
- return {};
-}
-
-Optional HTMLImageElement::intrinsic_height() const
-{
- if (auto image_data = m_current_request->image_data())
- return image_data->intrinsic_height();
- return {};
-}
-
-Optional HTMLImageElement::intrinsic_aspect_ratio() const
-{
- if (auto image_data = m_current_request->image_data())
- return image_data->intrinsic_aspect_ratio();
- return {};
-}
-
-Optional HTMLImageElement::current_image_frame_sized(Gfx::IntSize size) const
-{
- if (auto data = m_current_request->image_data())
- return data->frame(m_current_frame_index, size);
- return {};
-}
-
// https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-width
WebIDL::UnsignedLong HTMLImageElement::width() const
{
diff --git a/Libraries/LibWeb/HTML/HTMLImageElement.h b/Libraries/LibWeb/HTML/HTMLImageElement.h
index 4ec91d5151..edfa822e3f 100644
--- a/Libraries/LibWeb/HTML/HTMLImageElement.h
+++ b/Libraries/LibWeb/HTML/HTMLImageElement.h
@@ -49,8 +49,6 @@ public:
String alt() const { return get_attribute_value(HTML::AttributeNames::alt); }
- virtual Optional default_image_frame_sized(Gfx::IntSize) const override;
-
WebIDL::UnsignedLong width() const;
void set_width(WebIDL::UnsignedLong);
@@ -107,11 +105,6 @@ public:
bool allows_auto_sizes() const;
// ^Layout::ImageProvider
- virtual bool is_image_available() const override;
- virtual Optional intrinsic_width() const override;
- virtual Optional intrinsic_height() const override;
- virtual Optional intrinsic_aspect_ratio() const override;
- virtual Optional current_image_frame_sized(Gfx::IntSize) const override;
virtual GC::Ptr decoded_image_data() const override;
virtual void visit_edges(Cell::Visitor&) override;
diff --git a/Libraries/LibWeb/HTML/HTMLInputElement.cpp b/Libraries/LibWeb/HTML/HTMLInputElement.cpp
index c7277a3cbe..11c678bc1c 100644
--- a/Libraries/LibWeb/HTML/HTMLInputElement.cpp
+++ b/Libraries/LibWeb/HTML/HTMLInputElement.cpp
@@ -2314,39 +2314,6 @@ GC::Ptr HTMLInputElement::image_data() const
return nullptr;
}
-bool HTMLInputElement::is_image_available() const
-{
- return image_data() != nullptr;
-}
-
-Optional HTMLInputElement::intrinsic_width() const
-{
- if (auto image_data = this->image_data())
- return image_data->intrinsic_width();
- return {};
-}
-
-Optional HTMLInputElement::intrinsic_height() const
-{
- if (auto image_data = this->image_data())
- return image_data->intrinsic_height();
- return {};
-}
-
-Optional HTMLInputElement::intrinsic_aspect_ratio() const
-{
- if (auto image_data = this->image_data())
- return image_data->intrinsic_aspect_ratio();
- return {};
-}
-
-Optional HTMLInputElement::current_image_frame_sized(Gfx::IntSize size) const
-{
- if (auto image_data = this->image_data())
- return image_data->frame(0, size);
- return {};
-}
-
// https://html.spec.whatwg.org/multipage/interaction.html#dom-tabindex
i32 HTMLInputElement::default_tab_index_value() const
{
diff --git a/Libraries/LibWeb/HTML/HTMLInputElement.h b/Libraries/LibWeb/HTML/HTMLInputElement.h
index 4284f034da..679cb9f867 100644
--- a/Libraries/LibWeb/HTML/HTMLInputElement.h
+++ b/Libraries/LibWeb/HTML/HTMLInputElement.h
@@ -287,11 +287,6 @@ private:
virtual bool supports_dimension_attributes() const override { return type_state() == TypeAttributeState::ImageButton; }
// ^Layout::ImageProvider
- virtual bool is_image_available() const override;
- virtual Optional intrinsic_width() const override;
- virtual Optional intrinsic_height() const override;
- virtual Optional intrinsic_aspect_ratio() const override;
- virtual Optional current_image_frame_sized(Gfx::IntSize) const override;
virtual size_t current_frame_index() const override { return 0; }
virtual GC::Ptr decoded_image_data() const override { return image_data(); }
diff --git a/Libraries/LibWeb/HTML/HTMLObjectElement.cpp b/Libraries/LibWeb/HTML/HTMLObjectElement.cpp
index a56190e1e7..43b88eb3dd 100644
--- a/Libraries/LibWeb/HTML/HTMLObjectElement.cpp
+++ b/Libraries/LibWeb/HTML/HTMLObjectElement.cpp
@@ -594,37 +594,4 @@ GC::Ptr HTMLObjectElement::image_data() const
return m_resource_request->image_data();
}
-bool HTMLObjectElement::is_image_available() const
-{
- return image_data() != nullptr;
-}
-
-Optional HTMLObjectElement::intrinsic_width() const
-{
- if (auto image_data = this->image_data())
- return image_data->intrinsic_width();
- return {};
-}
-
-Optional HTMLObjectElement::intrinsic_height() const
-{
- if (auto image_data = this->image_data())
- return image_data->intrinsic_height();
- return {};
-}
-
-Optional HTMLObjectElement::intrinsic_aspect_ratio() const
-{
- if (auto image_data = this->image_data())
- return image_data->intrinsic_aspect_ratio();
- return {};
-}
-
-Optional HTMLObjectElement::current_image_frame_sized(Gfx::IntSize size) const
-{
- if (auto image_data = this->image_data())
- return image_data->frame(0, size);
- return {};
-}
-
}
diff --git a/Libraries/LibWeb/HTML/HTMLObjectElement.h b/Libraries/LibWeb/HTML/HTMLObjectElement.h
index ddd7e0a73f..786bc81856 100644
--- a/Libraries/LibWeb/HTML/HTMLObjectElement.h
+++ b/Libraries/LibWeb/HTML/HTMLObjectElement.h
@@ -83,11 +83,6 @@ private:
virtual i32 default_tab_index_value() const override;
// ^Layout::ImageProvider
- virtual bool is_image_available() const override;
- virtual Optional intrinsic_width() const override;
- virtual Optional intrinsic_height() const override;
- virtual Optional intrinsic_aspect_ratio() const override;
- virtual Optional current_image_frame_sized(Gfx::IntSize) const override;
virtual size_t current_frame_index() const override { return 0; }
virtual GC::Ptr decoded_image_data() const override { return image_data(); }
diff --git a/Libraries/LibWeb/Layout/ImageProvider.cpp b/Libraries/LibWeb/Layout/ImageProvider.cpp
index 20d39b3f59..e5c049d18e 100644
--- a/Libraries/LibWeb/Layout/ImageProvider.cpp
+++ b/Libraries/LibWeb/Layout/ImageProvider.cpp
@@ -5,6 +5,7 @@
*/
#include
+#include
#include
#include
@@ -15,6 +16,27 @@ void ImageProvider::did_update_alt_text(ImageBox& layout_node)
layout_node.dom_node_did_update_alt_text({});
}
+Optional ImageProvider::intrinsic_width() const
+{
+ if (auto const& data = decoded_image_data())
+ return data->intrinsic_width();
+ return {};
+}
+
+Optional ImageProvider::intrinsic_height() const
+{
+ if (auto const& data = decoded_image_data())
+ return data->intrinsic_height();
+ return {};
+}
+
+Optional ImageProvider::intrinsic_aspect_ratio() const
+{
+ if (auto const& data = decoded_image_data())
+ return data->intrinsic_aspect_ratio();
+ return {};
+}
+
Optional ImageProvider::intrinsic_size() const
{
auto width = intrinsic_width();
@@ -30,10 +52,18 @@ Optional ImageProvider::current_image_frame() const
return current_image_frame_sized(intrinsic_size().value_or({}).to_type());
}
+Optional ImageProvider::current_image_frame_sized(Gfx::IntSize size) const
+{
+ if (auto const& data = decoded_image_data())
+ return data->frame(current_frame_index(), size);
+ return {};
+}
+
Optional ImageProvider::default_image_frame_sized(Gfx::IntSize size) const
{
- // Defer to the current image by default.
- return current_image_frame_sized(size);
+ if (auto const& data = decoded_image_data())
+ return data->frame(0, size);
+ return {};
}
}
diff --git a/Libraries/LibWeb/Layout/ImageProvider.h b/Libraries/LibWeb/Layout/ImageProvider.h
index 7e5ea0d6cb..4a63e653ef 100644
--- a/Libraries/LibWeb/Layout/ImageProvider.h
+++ b/Libraries/LibWeb/Layout/ImageProvider.h
@@ -19,21 +19,21 @@ class ImageProvider {
public:
virtual ~ImageProvider() { }
- virtual bool is_image_available() const = 0;
+ bool is_image_available() const { return decoded_image_data() != nullptr; }
virtual size_t current_frame_index() const = 0;
virtual GC::Ptr decoded_image_data() const = 0;
- virtual Optional intrinsic_width() const = 0;
- virtual Optional intrinsic_height() const = 0;
+ Optional intrinsic_width() const;
+ Optional intrinsic_height() const;
Optional intrinsic_size() const;
- virtual Optional intrinsic_aspect_ratio() const = 0;
+ Optional intrinsic_aspect_ratio() const;
- virtual Optional current_image_frame() const;
- virtual Optional current_image_frame_sized(Gfx::IntSize) const = 0;
+ Optional current_image_frame() const;
+ Optional current_image_frame_sized(Gfx::IntSize) const;
- virtual Optional default_image_frame_sized(Gfx::IntSize) const;
+ Optional default_image_frame_sized(Gfx::IntSize) const;
virtual void layout_node_was_detached() const { }
diff --git a/Libraries/LibWeb/Layout/TreeBuilder.cpp b/Libraries/LibWeb/Layout/TreeBuilder.cpp
index d45a149e6c..d17fdb414d 100644
--- a/Libraries/LibWeb/Layout/TreeBuilder.cpp
+++ b/Libraries/LibWeb/Layout/TreeBuilder.cpp
@@ -203,43 +203,6 @@ public:
unregister_image_style_value_client();
}
- virtual bool is_image_available() const override
- {
- if (auto document = this->document())
- return m_image->is_paintable(*document);
- return false;
- }
-
- virtual Optional intrinsic_width() const override
- {
- if (auto document = this->document())
- return m_image->natural_width(*document);
- return {};
- }
-
- virtual Optional intrinsic_height() const override
- {
- if (auto document = this->document())
- return m_image->natural_height(*document);
- return {};
- }
-
- virtual Optional intrinsic_aspect_ratio() const override
- {
- if (auto document = this->document())
- return m_image->natural_aspect_ratio(*document);
- return {};
- }
-
- virtual Optional current_image_frame_sized(Gfx::IntSize size) const override
- {
- auto document = this->document();
- if (!document)
- return {};
- auto rect = DevicePixelRect { DevicePixelPoint {}, size.to_type() };
- return m_image->current_frame(*document, rect);
- }
-
virtual void layout_node_was_detached() const override
{
unregister_image_style_value_client();
diff --git a/Libraries/LibWeb/SVG/SVGImageElement.cpp b/Libraries/LibWeb/SVG/SVGImageElement.cpp
index be4b32583b..3e2776a36d 100644
--- a/Libraries/LibWeb/SVG/SVGImageElement.cpp
+++ b/Libraries/LibWeb/SVG/SVGImageElement.cpp
@@ -218,56 +218,6 @@ RefPtr SVGImageElement::create_layout_node(CSS::ComputedProperties
return make_ref_counted(document(), *this, style);
}
-bool SVGImageElement::is_image_available() const
-{
- return m_resource_request && m_resource_request->image_data();
-}
-
-Optional SVGImageElement::intrinsic_width() const
-{
- if (!m_resource_request)
- return {};
- if (auto image_data = m_resource_request->image_data())
- return image_data->intrinsic_width();
- return {};
-}
-
-Optional SVGImageElement::intrinsic_height() const
-{
- if (!m_resource_request)
- return {};
- if (auto image_data = m_resource_request->image_data())
- return image_data->intrinsic_height();
- return {};
-}
-
-Optional SVGImageElement::intrinsic_aspect_ratio() const
-{
- if (!m_resource_request)
- return {};
- if (auto image_data = m_resource_request->image_data())
- return image_data->intrinsic_aspect_ratio();
- return {};
-}
-
-Optional SVGImageElement::default_image_frame_sized(Gfx::IntSize size) const
-{
- if (!m_resource_request)
- return {};
- if (auto data = m_resource_request->image_data())
- return data->frame(0, size);
- return {};
-}
-
-Optional SVGImageElement::current_image_frame_sized(Gfx::IntSize size) const
-{
- if (!m_resource_request)
- return {};
- if (auto data = m_resource_request->image_data())
- return data->frame(m_current_frame_index, size);
- return {};
-}
-
void SVGImageElement::animate()
{
auto image_data = m_resource_request->image_data();
diff --git a/Libraries/LibWeb/SVG/SVGImageElement.h b/Libraries/LibWeb/SVG/SVGImageElement.h
index ff4882d79a..502ce500ef 100644
--- a/Libraries/LibWeb/SVG/SVGImageElement.h
+++ b/Libraries/LibWeb/SVG/SVGImageElement.h
@@ -33,14 +33,7 @@ public:
Gfx::FloatRect bounding_box() const;
- virtual Optional default_image_frame_sized(Gfx::IntSize) const override;
-
// ^Layout::ImageProvider
- virtual bool is_image_available() const override;
- virtual Optional intrinsic_width() const override;
- virtual Optional intrinsic_height() const override;
- virtual Optional intrinsic_aspect_ratio() const override;
- virtual Optional current_image_frame_sized(Gfx::IntSize) const override;
virtual size_t current_frame_index() const override { return m_current_frame_index; }
virtual GC::Ptr decoded_image_data() const override;