1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef BlockPainter_h
6#define BlockPainter_h
7
8namespace blink {
9
10struct PaintInfo;
11class InlineBox;
12class LayoutPoint;
13class LayoutRect;
14class RenderFlexibleBox;
15class RenderBlock;
16class RenderBox;
17class RenderObject;
18
19class BlockPainter {
20public:
21    BlockPainter(RenderBlock& block) : m_renderBlock(block) { }
22
23    void paint(PaintInfo&, const LayoutPoint& paintOffset);
24    void paintObject(PaintInfo&, const LayoutPoint&);
25    void paintChildren(PaintInfo&, const LayoutPoint&);
26    void paintChildAsInlineBlock(RenderBox*, PaintInfo&, const LayoutPoint&);
27
28    // inline-block elements paint all phases atomically. This function ensures that. Certain other elements
29    // (grid items, flex items) require this behavior as well, and this function exists as a helper for them.
30    // It is expected that the caller will call this function independent of the value of paintInfo.phase.
31    static void paintAsInlineBlock(RenderObject*, PaintInfo&, const LayoutPoint&);
32    static void paintChildrenOfFlexibleBox(RenderFlexibleBox&, PaintInfo&, const LayoutPoint& paintOffset);
33    static void paintInlineBox(InlineBox&, PaintInfo&, const LayoutPoint& paintOffset);
34
35private:
36    LayoutRect overflowRectForPaintRejection() const;
37    bool hasCaret() const;
38    void paintCarets(PaintInfo&, const LayoutPoint&);
39    void paintContents(PaintInfo&, const LayoutPoint&);
40    void paintColumnContents(PaintInfo&, const LayoutPoint&, bool paintFloats = false);
41    void paintColumnRules(PaintInfo&, const LayoutPoint&);
42    void paintChild(RenderBox*, PaintInfo&, const LayoutPoint&);
43    void paintSelection(PaintInfo&, const LayoutPoint&);
44    void paintContinuationOutlines(PaintInfo&, const LayoutPoint&);
45
46    RenderBlock& m_renderBlock;
47};
48
49} // namespace blink
50
51#endif // BlockPainter_h
52