Coverage Report

Created: 2025-08-28 06:26

/src/serenity/Userland/Libraries/LibWeb/Layout/Viewport.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (c) 2018-2023, Andreas Kling <kling@serenityos.org>
3
 *
4
 * SPDX-License-Identifier: BSD-2-Clause
5
 */
6
7
#pragma once
8
9
#include <LibWeb/DOM/Document.h>
10
#include <LibWeb/Layout/BlockContainer.h>
11
12
namespace Web::Layout {
13
14
class Viewport final : public BlockContainer {
15
    JS_CELL(Viewport, BlockContainer);
16
    JS_DECLARE_ALLOCATOR(Viewport);
17
18
public:
19
    explicit Viewport(DOM::Document&, NonnullRefPtr<CSS::StyleProperties>);
20
    virtual ~Viewport() override;
21
22
    struct TextPosition {
23
        JS::NonnullGCPtr<DOM::Text> dom_node;
24
        size_t start_offset { 0 };
25
    };
26
    struct TextBlock {
27
        String text;
28
        Vector<TextPosition> positions;
29
    };
30
    Vector<TextBlock> const& text_blocks();
31
32
0
    const DOM::Document& dom_node() const { return static_cast<const DOM::Document&>(*Node::dom_node()); }
33
34
    virtual void visit_edges(Visitor&) override;
35
36
private:
37
    virtual JS::GCPtr<Painting::Paintable> create_paintable() const override;
38
39
    void update_text_blocks();
40
41
0
    virtual bool is_viewport() const override { return true; }
42
43
    Optional<Vector<TextBlock>> m_text_blocks;
44
};
45
46
template<>
47
0
inline bool Node::fast_is<Viewport>() const { return is_viewport(); }
48
49
}