Serenity Operating System
at master 51 lines 1.3 kB view raw
1/* 2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <LibWeb/HTML/BrowsingContext.h> 10#include <LibWeb/HTML/HTMLImageElement.h> 11#include <LibWeb/Layout/ReplacedBox.h> 12 13namespace Web::Layout { 14 15class ImageBox final 16 : public ReplacedBox 17 , public HTML::BrowsingContext::ViewportClient { 18 JS_CELL(ImageBox, ReplacedBox); 19 20public: 21 ImageBox(DOM::Document&, DOM::Element&, NonnullRefPtr<CSS::StyleProperties>, ImageLoader const&); 22 virtual ~ImageBox() override; 23 24 virtual void prepare_for_replaced_layout() override; 25 26 const DOM::Element& dom_node() const { return static_cast<const DOM::Element&>(ReplacedBox::dom_node()); } 27 28 bool renders_as_alt_text() const; 29 30 virtual JS::GCPtr<Painting::Paintable> create_paintable() const override; 31 32 auto const& image_loader() const { return m_image_loader; } 33 34 void dom_node_did_update_alt_text(Badge<HTML::HTMLImageElement>); 35 36private: 37 // ^BrowsingContext::ViewportClient 38 virtual void browsing_context_did_set_viewport_rect(CSSPixelRect const&) final; 39 40 // ^JS::Cell 41 virtual void finalize() override; 42 43 int preferred_width() const; 44 int preferred_height() const; 45 46 ImageLoader const& m_image_loader; 47 48 Optional<CSSPixels> m_cached_alt_text_width; 49}; 50 51}