/* * Copyright (c) 2022-2023, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include namespace Web::Painting { Paintable::Paintable(Layout::Node const& layout_node) : m_layout_node(layout_node) , m_browsing_context(const_cast(layout_node.browsing_context())) { } void Paintable::visit_edges(Cell::Visitor& visitor) { Base::visit_edges(visitor); TreeNode::visit_edges(visitor); visitor.visit(m_dom_node); visitor.visit(m_layout_node); visitor.visit(m_browsing_context); if (m_containing_block.has_value()) visitor.visit(m_containing_block.value()); } bool Paintable::is_positioned() const { if (layout_node().is_grid_item() && computed_values().z_index().has_value()) { // https://www.w3.org/TR/css-grid-2/#z-order // grid items with z_index should behave as if position were "relative" return true; } return computed_values().position() != CSS::Positioning::Static; } void Paintable::set_dom_node(JS::GCPtr dom_node) { m_dom_node = dom_node; } JS::GCPtr Paintable::dom_node() { return m_dom_node; } JS::GCPtr Paintable::dom_node() const { return m_dom_node; } HTML::BrowsingContext const& Paintable::browsing_context() const { return m_browsing_context; } HTML::BrowsingContext& Paintable::browsing_context() { return m_browsing_context; } Paintable::DispatchEventOfSameName Paintable::handle_mousedown(Badge, CSSPixelPoint, unsigned, unsigned) { return DispatchEventOfSameName::Yes; } Paintable::DispatchEventOfSameName Paintable::handle_mouseup(Badge, CSSPixelPoint, unsigned, unsigned) { return DispatchEventOfSameName::Yes; } Paintable::DispatchEventOfSameName Paintable::handle_mousemove(Badge, CSSPixelPoint, unsigned, unsigned) { return DispatchEventOfSameName::Yes; } bool Paintable::handle_mousewheel(Badge, CSSPixelPoint, unsigned, unsigned, int, int) { return false; } Optional Paintable::hit_test(CSSPixelPoint, HitTestType) const { return {}; } StackingContext const* Paintable::stacking_context_rooted_here() const { if (!is(*this)) return nullptr; return static_cast(*this).stacking_context(); } }