Viewport.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*
  2. * Copyright (c) 2018-2023, Andreas Kling <andreas@ladybird.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <LibWeb/DOM/Document.h>
  8. #include <LibWeb/Layout/BlockContainer.h>
  9. namespace Web::Layout {
  10. class Viewport final : public BlockContainer {
  11. JS_CELL(Viewport, BlockContainer);
  12. JS_DECLARE_ALLOCATOR(Viewport);
  13. public:
  14. explicit Viewport(DOM::Document&, CSS::StyleProperties);
  15. virtual ~Viewport() override;
  16. struct TextPosition {
  17. JS::NonnullGCPtr<DOM::Text> dom_node;
  18. size_t start_offset { 0 };
  19. };
  20. struct TextBlock {
  21. String text;
  22. Vector<TextPosition> positions;
  23. };
  24. Vector<TextBlock> const& text_blocks();
  25. const DOM::Document& dom_node() const { return static_cast<const DOM::Document&>(*Node::dom_node()); }
  26. virtual void visit_edges(Visitor&) override;
  27. private:
  28. virtual JS::GCPtr<Painting::Paintable> create_paintable() const override;
  29. void update_text_blocks();
  30. virtual bool is_viewport() const override { return true; }
  31. Optional<Vector<TextBlock>> m_text_blocks;
  32. };
  33. template<>
  34. inline bool Node::fast_is<Viewport>() const { return is_viewport(); }
  35. }