15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * disclaimer. 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * disclaimer in the documentation and/or other materials 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * provided with the distribution. 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SUCH DAMAGE. 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef RenderRegion_h 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RenderRegion_h 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderBlock.h" 3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/style/StyleInheritedData.h" 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 38926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)struct LayerFragment; 39926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)typedef Vector<LayerFragment, 1> LayerFragments; 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderBox; 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderBoxRegionInfo; 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderFlowThread; 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderNamedFlowThread; 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 45926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class RenderRegion : public RenderBlock { 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 47926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) explicit RenderRegion(Element*, RenderFlowThread*); 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderRegion() const { return true; } 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) bool hitTestFlowThreadContents(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction); 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setFlowThreadPortionRect(const LayoutRect& rect) { m_flowThreadPortionRect = rect; } 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutRect flowThreadPortionRect() const { return m_flowThreadPortionRect; } 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutRect flowThreadPortionOverflowRect() const; 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void attachRegion(); 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void detachRegion(); 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderNamedFlowThread* parentNamedFlowThread() const { return m_parentNamedFlowThread; } 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderFlowThread* flowThread() const { return m_flowThread; } 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Valid regions do not create circular dependencies with other flows. 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isValid() const { return m_isValid; } 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setIsValid(bool valid) { m_isValid = valid; } 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasCustomRegionStyle() const { return m_hasCustomRegionStyle; } 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setHasCustomRegionStyle(bool hasCustomRegionStyle) { m_hasCustomRegionStyle = hasCustomRegionStyle; } 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderBoxRegionInfo* renderBoxRegionInfo(const RenderBox*) const; 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderBoxRegionInfo* setRenderBoxRegionInfo(const RenderBox*, LayoutUnit logicalLeftInset, LayoutUnit logicalRightInset, 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool containingBlockChainIsInset); 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PassOwnPtr<RenderBoxRegionInfo> takeRenderBoxRegionInfo(const RenderBox*); 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void removeRenderBoxRegionInfo(const RenderBox*); 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void deleteAllRenderBoxRegionInfo(); 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isFirstRegion() const; 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isLastRegion() const; 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearObjectStyleInRegion(const RenderObject*); 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 85591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch RegionOversetState regionOversetState() const; 86591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch void setRegionOversetState(RegionOversetState); 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 88591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch Element* element() const; 8902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // These methods represent the width and height of a "page" and for a RenderRegion they are just the 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // content width and content height of a region. For RenderRegionSets, however, they will be the width and 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // height of a single column or page in the set. 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual LayoutUnit pageLogicalWidth() const; 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual LayoutUnit pageLogicalHeight() const; 95926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) LayoutUnit maxPageLogicalHeight() const; 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit logicalTopOfFlowThreadContentRect(const LayoutRect&) const; 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit logicalBottomOfFlowThreadContentRect(const LayoutRect&) const; 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit logicalTopForFlowThreadContent() const { return logicalTopOfFlowThreadContentRect(flowThreadPortionRect()); }; 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit logicalBottomForFlowThreadContent() const { return logicalBottomOfFlowThreadContentRect(flowThreadPortionRect()); }; 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void getRanges(Vector<RefPtr<Range> >&) const; 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This method represents the logical height of the entire flow thread portion used by the region or set. 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // For RenderRegions it matches logicalPaginationHeight(), but for sets it is the height of all the pages 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // or columns added together. 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual LayoutUnit logicalHeightOfAllFlowThreadContent() const; 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasAutoLogicalHeight() const { return m_hasAutoLogicalHeight; } 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 111f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) const LayoutUnit& computedAutoHeight() const 112f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) { 113f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) ASSERT(hasComputedAutoHeight()); 114f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return m_computedAutoHeight; 115f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) } 116f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 117f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) void setComputedAutoHeight(LayoutUnit computedAutoHeight) 118f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) { 119f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) ASSERT(computedAutoHeight >= 0); 120f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) m_computedAutoHeight = computedAutoHeight; 121f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) } 122f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 123f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) void clearComputedAutoHeight() 124f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) { 125f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) m_computedAutoHeight = -1; 126f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) } 127f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 128f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) bool hasComputedAutoHeight() const { return (m_computedAutoHeight >= 0); } 129f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void updateLogicalHeight() OVERRIDE; 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The top of the nearest page inside the region. For RenderRegions, this is just the logical top of the 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // flow thread portion we contain. For sets, we have to figure out the top of the nearest column or 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // page. 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual LayoutUnit pageLogicalTopForOffset(LayoutUnit offset) const; 13602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void expandToEncompassFlowThreadContentsIfNeeded() { }; 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Whether or not this region is a set. 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderRegionSet() const { return false; } 14102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 14253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) virtual void repaintFlowThreadContent(const LayoutRect& repaintRect) const; 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 144926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void collectLayerFragments(LayerFragments&, const LayoutRect&, const LayoutRect&) { } 145926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setRegionObjectsRegionStyle(); 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void restoreRegionObjectsOriginalStyle(); 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) virtual void computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const OVERRIDE; 15153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 1525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) LayoutRect overflowRectForFlowThreadPortion(const LayoutRect& flowThreadPortionRect, bool isFirstPortion, bool isLastPortion) const; 15353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) void repaintFlowThreadContentRectangle(const LayoutRect& repaintRect, const LayoutRect& flowThreadPortionRect, 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const LayoutRect& flowThreadPortionOverflowRect, const LayoutPoint& regionLocation) const; 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 156926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool shouldHaveAutoLogicalHeight() const; 157926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual const char* renderName() const { return "RenderRegion"; } 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 161926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool canHaveChildren() const OVERRIDE { return false; } 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void insertedIntoTree() OVERRIDE; 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void willBeRemovedFromTree() OVERRIDE; 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 166926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void layoutBlock(bool relayoutChildren, LayoutUnit pageLogicalHeight = 0) OVERRIDE; 167926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void paintObject(PaintInfo&, const LayoutPoint&) OVERRIDE; 168926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void installFlowThread(); 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PassRefPtr<RenderStyle> computeStyleInRegion(const RenderObject*); 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void computeChildrenStyleInRegion(const RenderObject*); 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setObjectStyleInRegion(RenderObject*, PassRefPtr<RenderStyle>, bool objectRegionStyleCached); 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void checkRegionStyle(); 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void updateRegionHasAutoLogicalHeightFlag(); 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 178926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void incrementAutoLogicalHeightCount(); 179926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void decrementAutoLogicalHeightCount(); 180926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderFlowThread* m_flowThread; 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If this RenderRegion is displayed as part of another named flow, 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // we need to create a dependency tree, so that layout of the 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // regions is always done before the regions themselves. 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderNamedFlowThread* m_parentNamedFlowThread; 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutRect m_flowThreadPortionRect; 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This map holds unique information about a block that is split across regions. 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // A RenderBoxRegionInfo* tells us about any layout information for a RenderBox that 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // is unique to the region. For now it just holds logical width information for RenderBlocks, but eventually 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // it will also hold a custom style for any box (for region styling). 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) typedef HashMap<const RenderBox*, OwnPtr<RenderBoxRegionInfo> > RenderBoxRegionInfoMap; 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderBoxRegionInfoMap m_renderBoxRegionInfo; 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) struct ObjectRegionStyleInfo { 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Used to store the original style of the object in region 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // so that the original style is properly restored after paint. 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Also used to store computed style of the object in region between 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // region paintings, so that the style in region is computed only 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // when necessary. 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<RenderStyle> style; 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // True if the computed style in region is cached. 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool cached; 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) typedef HashMap<const RenderObject*, ObjectRegionStyleInfo > RenderObjectRegionStyleMap; 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObjectRegionStyleMap m_renderObjectRegionStyle; 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 211f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) LayoutUnit m_computedAutoHeight; 212f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_isValid : 1; 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_hasCustomRegionStyle : 1; 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_hasAutoLogicalHeight : 1; 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline RenderRegion* toRenderRegion(RenderObject* object) 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 220926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT_WITH_SECURITY_IMPLICATION(!object || object->isRenderRegion()); 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<RenderRegion*>(object); 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline const RenderRegion* toRenderRegion(const RenderObject* object) 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 226926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT_WITH_SECURITY_IMPLICATION(!object || object->isRenderRegion()); 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<const RenderRegion*>(object); 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// This will catch anyone doing an unnecessary cast. 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void toRenderRegion(const RenderRegion*); 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // RenderRegion_h 236