Home | History | Annotate | Download | only in rendering
      1 /*
      2  * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  *
      8  * 1. Redistributions of source code must retain the above
      9  *    copyright notice, this list of conditions and the following
     10  *    disclaimer.
     11  * 2. Redistributions in binary form must reproduce the above
     12  *    copyright notice, this list of conditions and the following
     13  *    disclaimer in the documentation and/or other materials
     14  *    provided with the distribution.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AS IS AND ANY
     17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
     20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
     21  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
     25  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
     26  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     27  * SUCH DAMAGE.
     28  */
     29 
     30 #ifndef RenderRegion_h
     31 #define RenderRegion_h
     32 
     33 #include "core/rendering/RenderBlockFlow.h"
     34 #include "core/rendering/style/StyleInheritedData.h"
     35 
     36 namespace blink {
     37 
     38 struct LayerFragment;
     39 typedef Vector<LayerFragment, 1> LayerFragments;
     40 class RenderFlowThread;
     41 
     42 class RenderRegion : public RenderBlockFlow {
     43 public:
     44     explicit RenderRegion(Element*, RenderFlowThread*);
     45 
     46     virtual bool isRenderRegion() const OVERRIDE FINAL { return true; }
     47 
     48     void setFlowThreadPortionRect(const LayoutRect& rect) { m_flowThreadPortionRect = rect; }
     49     LayoutRect flowThreadPortionRect() const { return m_flowThreadPortionRect; }
     50     LayoutRect flowThreadPortionOverflowRect() const;
     51 
     52     RenderFlowThread* flowThread() const { return m_flowThread; }
     53 
     54     // Valid regions do not create circular dependencies with other flows.
     55     bool isValid() const { return m_isValid; }
     56     void setIsValid(bool valid) { m_isValid = valid; }
     57 
     58     bool isFirstRegion() const;
     59     bool isLastRegion() const;
     60 
     61     // These methods represent the width and height of a "page" and for a RenderRegion they are just
     62     // the content width and content height of a region. For RenderMultiColumnSets, however, they
     63     // will be the width and height of a single column or page in the set.
     64     virtual LayoutUnit pageLogicalWidth() const;
     65     virtual LayoutUnit pageLogicalHeight() const;
     66 
     67     virtual bool canHaveChildren() const OVERRIDE FINAL { return false; }
     68     virtual bool canHaveGeneratedChildren() const OVERRIDE FINAL { return true; }
     69 
     70     virtual const char* renderName() const OVERRIDE { return "RenderRegion"; }
     71 
     72 protected:
     73     virtual void computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const OVERRIDE FINAL;
     74 
     75     LayoutRect overflowRectForFlowThreadPortion(const LayoutRect& flowThreadPortionRect, bool isFirstPortion, bool isLastPortion) const;
     76     void paintInvalidationOfFlowThreadContentRectangle(const LayoutRect& paintInvalidationRect, const LayoutRect& flowThreadPortionRect,
     77         const LayoutRect& flowThreadPortionOverflowRect, const LayoutPoint& regionLocation) const;
     78 
     79 private:
     80     virtual void layoutBlock(bool relayoutChildren) OVERRIDE FINAL;
     81 
     82 protected:
     83     RenderFlowThread* m_flowThread;
     84 
     85 private:
     86     LayoutRect m_flowThreadPortionRect;
     87     bool m_isValid : 1;
     88 };
     89 
     90 DEFINE_RENDER_OBJECT_TYPE_CASTS(RenderRegion, isRenderRegion());
     91 
     92 } // namespace blink
     93 
     94 #endif // RenderRegion_h
     95