diff --git a/Libraries/LibHTML/DOM/HTMLImageElement.cpp b/Libraries/LibHTML/DOM/HTMLImageElement.cpp index a0b32f57ca..1210fe297e 100644 --- a/Libraries/LibHTML/DOM/HTMLImageElement.cpp +++ b/Libraries/LibHTML/DOM/HTMLImageElement.cpp @@ -29,6 +29,32 @@ void HTMLImageElement::load_image(const String& src) } } +int HTMLImageElement::preferred_width() const +{ + bool ok = false; + int width = attribute("width").to_int(ok); + if (ok) + return width; + + if (m_bitmap) + return m_bitmap->width(); + + return 0; +} + +int HTMLImageElement::preferred_height() const +{ + bool ok = false; + int height = attribute("height").to_int(ok); + if (ok) + return height; + + if (m_bitmap) + return m_bitmap->height(); + + return 0; +} + RefPtr HTMLImageElement::create_layout_node(const StyleResolver& resolver, const StyleProperties* parent_style) const { auto style = resolver.resolve_style(*this, parent_style); diff --git a/Libraries/LibHTML/DOM/HTMLImageElement.h b/Libraries/LibHTML/DOM/HTMLImageElement.h index 280a205bab..b79fdcb80f 100644 --- a/Libraries/LibHTML/DOM/HTMLImageElement.h +++ b/Libraries/LibHTML/DOM/HTMLImageElement.h @@ -12,6 +12,8 @@ public: String alt() const { return attribute("alt"); } String src() const { return attribute("src"); } + int preferred_width() const; + int preferred_height() const; const GraphicsBitmap* bitmap() const; diff --git a/Libraries/LibHTML/Layout/LayoutImage.cpp b/Libraries/LibHTML/Layout/LayoutImage.cpp index 92d05cb5ce..91624650e0 100644 --- a/Libraries/LibHTML/Layout/LayoutImage.cpp +++ b/Libraries/LibHTML/Layout/LayoutImage.cpp @@ -14,7 +14,10 @@ LayoutImage::~LayoutImage() void LayoutImage::layout() { - if (renders_as_alt_text()) { + if (node().preferred_width() && node().preferred_height()) { + rect().set_width(node().preferred_width()); + rect().set_height(node().preferred_height()); + } else if (renders_as_alt_text()) { auto& font = Font::default_font(); auto alt = node().alt(); if (alt.is_empty()) @@ -22,8 +25,8 @@ void LayoutImage::layout() rect().set_width(font.width(alt) + 16); rect().set_height(font.glyph_height() + 16); } else { - rect().set_width(node().bitmap()->width()); - rect().set_height(node().bitmap()->height()); + rect().set_width(16); + rect().set_height(16); } LayoutReplaced::layout();