diff --git a/Userland/Libraries/LibWeb/Layout/InlineNode.cpp b/Userland/Libraries/LibWeb/Layout/InlineNode.cpp index 592186fc80..0ef7b62d85 100644 --- a/Userland/Libraries/LibWeb/Layout/InlineNode.cpp +++ b/Userland/Libraries/LibWeb/Layout/InlineNode.cpp @@ -5,6 +5,7 @@ */ #include +#include #include #include #include @@ -48,4 +49,20 @@ void InlineNode::paint_fragment(PaintContext& context, const LineBoxFragment& fr } } +void InlineNode::paint(PaintContext& context, PaintPhase phase) +{ + auto& painter = context.painter(); + + if (phase == PaintPhase::Foreground && document().inspected_node() == dom_node()) { + // FIXME: This paints a double-thick border between adjacent fragments, where ideally there + // would be none. Once we implement non-rectangular outlines for the `outline` CSS + // property, we can use that here instead. + containing_block()->for_each_fragment([&](auto& fragment) { + if (is_inclusive_ancestor_of(fragment.layout_node())) + painter.draw_rect(enclosing_int_rect(fragment.absolute_rect()), Color::Magenta); + return IterationDecision::Continue; + }); + } +} + } diff --git a/Userland/Libraries/LibWeb/Layout/InlineNode.h b/Userland/Libraries/LibWeb/Layout/InlineNode.h index 258c52d768..5f6d4d4597 100644 --- a/Userland/Libraries/LibWeb/Layout/InlineNode.h +++ b/Userland/Libraries/LibWeb/Layout/InlineNode.h @@ -15,6 +15,7 @@ public: InlineNode(DOM::Document&, DOM::Element&, NonnullRefPtr); virtual ~InlineNode() override; + virtual void paint(PaintContext&, PaintPhase) override; virtual void paint_fragment(PaintContext&, const LineBoxFragment&, PaintPhase) const override; virtual void split_into_lines(InlineFormattingContext&, LayoutMode) override;