Serenity Operating System
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/DOM/Element.h>
10#include <LibWeb/Layout/Box.h>
11
12namespace Web::Layout {
13
14class ReplacedBox : public Box {
15 JS_CELL(ReplacedBox, Box);
16
17public:
18 ReplacedBox(DOM::Document&, DOM::Element&, NonnullRefPtr<CSS::StyleProperties>);
19 virtual ~ReplacedBox() override;
20
21 const DOM::Element& dom_node() const { return verify_cast<DOM::Element>(*Node::dom_node()); }
22 DOM::Element& dom_node() { return verify_cast<DOM::Element>(*Node::dom_node()); }
23
24 virtual Optional<CSSPixels> intrinsic_width() const final { return m_intrinsic_width; }
25 virtual Optional<CSSPixels> intrinsic_height() const final { return m_intrinsic_height; }
26 virtual Optional<float> intrinsic_aspect_ratio() const final { return m_intrinsic_aspect_ratio; }
27
28 void set_intrinsic_width(Optional<CSSPixels> width) { m_intrinsic_width = width; }
29 void set_intrinsic_height(Optional<CSSPixels> height) { m_intrinsic_height = height; }
30 void set_intrinsic_aspect_ratio(Optional<float> ratio) { m_intrinsic_aspect_ratio = ratio; }
31
32 virtual void prepare_for_replaced_layout() { }
33
34 virtual bool can_have_children() const override { return false; }
35
36private:
37 virtual bool is_replaced_box() const final { return true; }
38
39 Optional<CSSPixels> m_intrinsic_width;
40 Optional<CSSPixels> m_intrinsic_height;
41 Optional<float> m_intrinsic_aspect_ratio;
42};
43
44template<>
45inline bool Node::fast_is<ReplacedBox>() const { return is_replaced_box(); }
46
47}