/* * Copyright (c) 2023, Andreas Kling * Copyright (c) 2024, Aliaksandr Kalenik * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace Web::Painting { class ViewportPaintable final : public PaintableWithLines { JS_CELL(ViewportPaintable, PaintableWithLines); JS_DECLARE_ALLOCATOR(ViewportPaintable); public: static JS::NonnullGCPtr create(Layout::Viewport const&); virtual ~ViewportPaintable() override; void paint_all_phases(PaintContext&); void build_stacking_context_tree_if_needed(); void assign_scroll_frames(); void refresh_scroll_state(); HashMap, RefPtr> clip_state; void assign_clip_frames(); void resolve_paint_only_properties(); JS::GCPtr selection() const; void recompute_selection_states(DOM::Range&); void update_selection(); bool handle_mousewheel(Badge, CSSPixelPoint, unsigned, unsigned, int wheel_delta_x, int wheel_delta_y) override; void set_needs_to_refresh_scroll_state(bool value) { m_needs_to_refresh_scroll_state = value; } ScrollState const& scroll_state() const { return m_scroll_state; } private: void build_stacking_context_tree(); explicit ViewportPaintable(Layout::Viewport const&); virtual void visit_edges(Visitor&) override; ScrollState m_scroll_state; bool m_needs_to_refresh_scroll_state { true }; }; }