mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-07 21:59:54 +00:00
LibWeb: Add ImageProvider virtual to access the DecodedImageData
...and also the current frame index, in case of animations.
This commit is contained in:
parent
5b88b76b84
commit
cebd4cc10d
Notes:
github-actions[bot]
2025-11-05 08:13:10 +00:00
Author: https://github.com/awesomekling
Commit: cebd4cc10d
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6699
Reviewed-by: https://github.com/kalenikaliaksandr
8 changed files with 33 additions and 2 deletions
|
|
@ -1281,4 +1281,11 @@ bool HTMLImageElement::allows_auto_sizes() const
|
|||
|| sizes->starts_with_bytes("auto,"sv, AK::CaseSensitivity::CaseInsensitive));
|
||||
}
|
||||
|
||||
GC::Ptr<DecodedImageData> HTMLImageElement::decoded_image_data() const
|
||||
{
|
||||
if (!m_current_request)
|
||||
return nullptr;
|
||||
return m_current_request->image_data();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ public:
|
|||
ImageRequest& current_request() { return *m_current_request; }
|
||||
ImageRequest const& current_request() const { return *m_current_request; }
|
||||
|
||||
size_t current_frame_index() const { return m_current_frame_index; }
|
||||
virtual size_t current_frame_index() const override { return m_current_frame_index; }
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/images.html#upgrade-the-pending-request-to-the-current-request
|
||||
void upgrade_pending_request_to_current_request();
|
||||
|
|
@ -108,6 +108,7 @@ public:
|
|||
virtual RefPtr<Gfx::ImmutableBitmap> current_image_bitmap_sized(Gfx::IntSize) const override;
|
||||
virtual void set_visible_in_viewport(bool) override;
|
||||
virtual GC::Ptr<DOM::Element const> to_html_element() const override { return *this; }
|
||||
virtual GC::Ptr<DecodedImageData> decoded_image_data() const override;
|
||||
|
||||
virtual void visit_edges(Cell::Visitor&) override;
|
||||
|
||||
|
|
|
|||
|
|
@ -285,6 +285,8 @@ private:
|
|||
virtual RefPtr<Gfx::ImmutableBitmap> current_image_bitmap_sized(Gfx::IntSize) const override;
|
||||
virtual void set_visible_in_viewport(bool) override;
|
||||
virtual GC::Ptr<DOM::Element const> to_html_element() const override { return *this; }
|
||||
virtual size_t current_frame_index() const override { return 0; }
|
||||
virtual GC::Ptr<HTML::DecodedImageData> decoded_image_data() const override { return image_data(); }
|
||||
|
||||
virtual void initialize(JS::Realm&) override;
|
||||
virtual void visit_edges(Cell::Visitor&) override;
|
||||
|
|
|
|||
|
|
@ -84,6 +84,8 @@ private:
|
|||
virtual RefPtr<Gfx::ImmutableBitmap> current_image_bitmap_sized(Gfx::IntSize) const override;
|
||||
virtual void set_visible_in_viewport(bool) override;
|
||||
virtual GC::Ptr<DOM::Element const> to_html_element() const override { return *this; }
|
||||
virtual size_t current_frame_index() const override { return 0; }
|
||||
virtual GC::Ptr<DecodedImageData> decoded_image_data() const override { return image_data(); }
|
||||
|
||||
GC::Ptr<DecodedImageData> image_data() const;
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,10 @@ public:
|
|||
|
||||
virtual bool is_image_available() const = 0;
|
||||
|
||||
virtual size_t current_frame_index() const = 0;
|
||||
|
||||
virtual GC::Ptr<HTML::DecodedImageData> decoded_image_data() const = 0;
|
||||
|
||||
virtual Optional<CSSPixels> intrinsic_width() const = 0;
|
||||
virtual Optional<CSSPixels> intrinsic_height() const = 0;
|
||||
Optional<CSSPixelSize> intrinsic_size() const;
|
||||
|
|
|
|||
|
|
@ -230,6 +230,12 @@ public:
|
|||
m_layout_node = layout_node;
|
||||
}
|
||||
|
||||
virtual size_t current_frame_index() const override { return 0; }
|
||||
virtual GC::Ptr<HTML::DecodedImageData> decoded_image_data() const override
|
||||
{
|
||||
return m_image->image_data();
|
||||
}
|
||||
|
||||
private:
|
||||
GeneratedContentImageProvider(NonnullRefPtr<CSS::ImageStyleValue> image)
|
||||
: Client(image)
|
||||
|
|
|
|||
|
|
@ -282,4 +282,11 @@ void SVGImageElement::animate()
|
|||
paintable()->set_needs_display();
|
||||
}
|
||||
|
||||
GC::Ptr<HTML::DecodedImageData> SVGImageElement::decoded_image_data() const
|
||||
{
|
||||
if (!m_resource_request)
|
||||
return nullptr;
|
||||
return m_resource_request->image_data();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
namespace Web::SVG {
|
||||
|
||||
class SVGImageElement
|
||||
class SVGImageElement final
|
||||
: public SVGGraphicsElement
|
||||
, public SVGURIReferenceMixin<SupportsXLinkHref::Yes>
|
||||
, public Layout::ImageProvider {
|
||||
|
|
@ -39,6 +39,8 @@ public:
|
|||
virtual RefPtr<Gfx::ImmutableBitmap> current_image_bitmap_sized(Gfx::IntSize) const override;
|
||||
virtual void set_visible_in_viewport(bool) override { }
|
||||
virtual GC::Ptr<DOM::Element const> to_html_element() const override { return *this; }
|
||||
virtual size_t current_frame_index() const override { return m_current_frame_index; }
|
||||
virtual GC::Ptr<HTML::DecodedImageData> decoded_image_data() const override;
|
||||
|
||||
protected:
|
||||
SVGImageElement(DOM::Document&, DOM::QualifiedName);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue