From 1ef53be2f38526779ae121ebdefe10d95e13958c Mon Sep 17 00:00:00 2001 From: Conrad Pankoff Date: Sun, 6 Oct 2019 23:03:51 +1100 Subject: [PATCH] LibHTML: Load image resource when src attribute is set --- Libraries/LibHTML/DOM/HTMLImageElement.cpp | 27 ++++++++++++++-------- Libraries/LibHTML/DOM/HTMLImageElement.h | 4 ++++ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/Libraries/LibHTML/DOM/HTMLImageElement.cpp b/Libraries/LibHTML/DOM/HTMLImageElement.cpp index 6fda6dee7fb..a0b32f57ca5 100644 --- a/Libraries/LibHTML/DOM/HTMLImageElement.cpp +++ b/Libraries/LibHTML/DOM/HTMLImageElement.cpp @@ -12,6 +12,23 @@ HTMLImageElement::~HTMLImageElement() { } +void HTMLImageElement::parse_attribute(const String& name, const String& value) +{ + if (name == "src") + load_image(value); +} + +void HTMLImageElement::load_image(const String& src) +{ + URL src_url = document().complete_url(src); + if (src_url.protocol() == "file") { + m_bitmap = GraphicsBitmap::load_from_file(src_url.path()); + } else { + // FIXME: Implement! This whole thing should be at a different layer though.. + ASSERT_NOT_REACHED(); + } +} + RefPtr HTMLImageElement::create_layout_node(const StyleResolver& resolver, const StyleProperties* parent_style) const { auto style = resolver.resolve_style(*this, parent_style); @@ -26,15 +43,5 @@ RefPtr HTMLImageElement::create_layout_node(const StyleResolver& res const GraphicsBitmap* HTMLImageElement::bitmap() const { - if (!m_bitmap) { - URL src_url = document().complete_url(this->src()); - if (src_url.protocol() == "file") { - m_bitmap = GraphicsBitmap::load_from_file(src_url.path()); - } else { - // FIXME: Implement! This whole thing should be at a different layer though.. - ASSERT_NOT_REACHED(); - } - } - return m_bitmap; } diff --git a/Libraries/LibHTML/DOM/HTMLImageElement.h b/Libraries/LibHTML/DOM/HTMLImageElement.h index 33d5587b812..280a205babf 100644 --- a/Libraries/LibHTML/DOM/HTMLImageElement.h +++ b/Libraries/LibHTML/DOM/HTMLImageElement.h @@ -8,12 +8,16 @@ public: HTMLImageElement(Document&, const String& tag_name); virtual ~HTMLImageElement() override; + virtual void parse_attribute(const String& name, const String& value) override; + String alt() const { return attribute("alt"); } String src() const { return attribute("src"); } const GraphicsBitmap* bitmap() const; private: + void load_image(const String& src); + virtual RefPtr create_layout_node(const StyleResolver&, const StyleProperties* parent_style) const override; mutable RefPtr m_bitmap;