PaintableFragment.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. * Copyright (c) 2024, Aliaksandr Kalenik <kalenik.aliaksandr@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <LibWeb/Layout/LineBoxFragment.h>
  8. #include <LibWeb/Layout/Node.h>
  9. #include <LibWeb/Painting/BorderRadiiData.h>
  10. #include <LibWeb/PixelUnits.h>
  11. namespace Web::Painting {
  12. class PaintableFragment {
  13. friend class ViewportPaintable;
  14. public:
  15. explicit PaintableFragment(Layout::LineBoxFragment const&);
  16. Layout::Node const& layout_node() const { return m_layout_node; }
  17. Paintable const& paintable() const { return *m_layout_node->paintable(); }
  18. int start() const { return m_start; }
  19. int length() const { return m_length; }
  20. CSSPixels baseline() const { return m_baseline; }
  21. CSSPixelPoint offset() const { return m_offset; }
  22. void set_offset(CSSPixelPoint offset) { m_offset = offset; }
  23. CSSPixelSize size() const { return m_size; }
  24. BorderRadiiData const& border_radii_data() const { return m_border_radii_data; }
  25. void set_border_radii_data(BorderRadiiData const& border_radii_data) { m_border_radii_data = border_radii_data; }
  26. Vector<ShadowData> const& shadows() const { return m_shadows; }
  27. void set_shadows(Vector<ShadowData>&& shadows) { m_shadows = shadows; }
  28. CSSPixelRect const absolute_rect() const;
  29. Vector<Gfx::DrawGlyphOrEmoji> const& glyph_run() const { return m_glyph_run; }
  30. CSSPixelRect selection_rect(Gfx::Font const&) const;
  31. CSSPixels width() const { return m_size.width(); }
  32. CSSPixels height() const { return m_size.height(); }
  33. int text_index_at(CSSPixels) const;
  34. private:
  35. JS::NonnullGCPtr<Layout::Node const> m_layout_node;
  36. CSSPixelPoint m_offset;
  37. CSSPixelSize m_size;
  38. CSSPixels m_baseline;
  39. int m_start;
  40. int m_length;
  41. Painting::BorderRadiiData m_border_radii_data;
  42. Vector<Gfx::DrawGlyphOrEmoji> m_glyph_run;
  43. Vector<ShadowData> m_shadows;
  44. bool m_contained_by_inline_node { false };
  45. };
  46. }