• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
8 namespace blink {
9 
10 struct PaintInfo;
11 class InlineBox;
12 class LayoutPoint;
13 class LayoutRect;
14 class RenderFlexibleBox;
15 class RenderBlock;
16 class RenderBox;
17 class RenderObject;
18 
19 class BlockPainter {
20 public:
BlockPainter(RenderBlock & block)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 
35 private:
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