Home | History | Annotate | Download | only in paint
      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:
     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