1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-21 17:15:07 +00:00
serenity/Userland/Libraries/LibWeb/Layout/BlockContainer.h
Andreas Kling 268b9c5d90 LibWeb: Make the layout tree GC-allocated
This removes a set of complex reference cycles between DOM, layout tree
and browsing context.

It also makes lifetimes much easier to reason about, as the DOM and
layout trees are now free to keep each other alive.
2022-10-20 15:16:23 +02:00

45 lines
1.5 KiB
C++

/*
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibWeb/Layout/Box.h>
#include <LibWeb/Layout/LineBox.h>
namespace Web::Layout {
// https://www.w3.org/TR/css-display/#block-container
class BlockContainer : public Box {
JS_CELL(BlockContainer, Box);
public:
BlockContainer(DOM::Document&, DOM::Node*, NonnullRefPtr<CSS::StyleProperties>);
BlockContainer(DOM::Document&, DOM::Node*, CSS::ComputedValues);
virtual ~BlockContainer() override;
BlockContainer* previous_sibling() { return verify_cast<BlockContainer>(Node::previous_sibling()); }
BlockContainer const* previous_sibling() const { return verify_cast<BlockContainer>(Node::previous_sibling()); }
BlockContainer* next_sibling() { return verify_cast<BlockContainer>(Node::next_sibling()); }
BlockContainer const* next_sibling() const { return verify_cast<BlockContainer>(Node::next_sibling()); }
bool is_scrollable() const;
Gfx::FloatPoint const& scroll_offset() const { return m_scroll_offset; }
void set_scroll_offset(Gfx::FloatPoint const&);
Painting::PaintableWithLines const* paint_box() const;
virtual RefPtr<Painting::Paintable> create_paintable() const override;
private:
virtual bool is_block_container() const final { return true; }
Gfx::FloatPoint m_scroll_offset;
};
template<>
inline bool Node::fast_is<BlockContainer>() const { return is_block_container(); }
}