| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2007 David Smith (catfish.man@gmail.com) | 4 * (C) 2007 David Smith (catfish.man@gmail.com) |
| 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. | 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.
All rights reserved. |
| 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
| 7 * | 7 * |
| 8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
| 9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
| 10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 #include "TransformState.h" | 63 #include "TransformState.h" |
| 64 #include "WebCoreMemoryInstrumentation.h" | 64 #include "WebCoreMemoryInstrumentation.h" |
| 65 #include <wtf/StdLibExtras.h> | 65 #include <wtf/StdLibExtras.h> |
| 66 #if ENABLE(CSS_EXCLUSIONS) | 66 #if ENABLE(CSS_EXCLUSIONS) |
| 67 #include "ExclusionShapeInsideInfo.h" | 67 #include "ExclusionShapeInsideInfo.h" |
| 68 #include "ExclusionShapeOutsideInfo.h" | 68 #include "ExclusionShapeOutsideInfo.h" |
| 69 #endif | 69 #endif |
| 70 #include <wtf/MemoryInstrumentationHashMap.h> | 70 #include <wtf/MemoryInstrumentationHashMap.h> |
| 71 #include <wtf/MemoryInstrumentationHashSet.h> | 71 #include <wtf/MemoryInstrumentationHashSet.h> |
| 72 #include <wtf/MemoryInstrumentationListHashSet.h> | 72 #include <wtf/MemoryInstrumentationListHashSet.h> |
| 73 #include <wtf/TemporaryChange.h> |
| 73 | 74 |
| 74 using namespace std; | 75 using namespace std; |
| 75 using namespace WTF; | 76 using namespace WTF; |
| 76 using namespace Unicode; | 77 using namespace Unicode; |
| 77 | 78 |
| 78 namespace WebCore { | 79 namespace WebCore { |
| 79 | 80 |
| 80 using namespace HTMLNames; | 81 using namespace HTMLNames; |
| 81 | 82 |
| 82 struct SameSizeAsRenderBlock : public RenderBox { | 83 struct SameSizeAsRenderBlock : public RenderBox { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 110 | 111 |
| 111 static TrackedContainerMap* gPositionedContainerMap = 0; | 112 static TrackedContainerMap* gPositionedContainerMap = 0; |
| 112 static TrackedContainerMap* gPercentHeightContainerMap = 0; | 113 static TrackedContainerMap* gPercentHeightContainerMap = 0; |
| 113 | 114 |
| 114 typedef WTF::HashMap<RenderBlock*, OwnPtr<ListHashSet<RenderInline*> > > Continu
ationOutlineTableMap; | 115 typedef WTF::HashMap<RenderBlock*, OwnPtr<ListHashSet<RenderInline*> > > Continu
ationOutlineTableMap; |
| 115 | 116 |
| 116 typedef WTF::HashSet<RenderBlock*> DelayedUpdateScrollInfoSet; | 117 typedef WTF::HashSet<RenderBlock*> DelayedUpdateScrollInfoSet; |
| 117 static int gDelayUpdateScrollInfo = 0; | 118 static int gDelayUpdateScrollInfo = 0; |
| 118 static DelayedUpdateScrollInfoSet* gDelayedUpdateScrollInfoSet = 0; | 119 static DelayedUpdateScrollInfoSet* gDelayedUpdateScrollInfoSet = 0; |
| 119 | 120 |
| 121 static bool gIsInColumnFlowSplit = false; |
| 122 |
| 120 bool RenderBlock::s_canPropagateFloatIntoSibling = false; | 123 bool RenderBlock::s_canPropagateFloatIntoSibling = false; |
| 121 | 124 |
| 122 // This class helps dispatching the 'overflow' event on layout change. overflow
can be set on RenderBoxes, yet the existing code | 125 // This class helps dispatching the 'overflow' event on layout change. overflow
can be set on RenderBoxes, yet the existing code |
| 123 // only works on RenderBlocks. If this change, this class should be shared with
other RenderBoxes. | 126 // only works on RenderBlocks. If this change, this class should be shared with
other RenderBoxes. |
| 124 class OverflowEventDispatcher { | 127 class OverflowEventDispatcher { |
| 125 WTF_MAKE_NONCOPYABLE(OverflowEventDispatcher); | 128 WTF_MAKE_NONCOPYABLE(OverflowEventDispatcher); |
| 126 public: | 129 public: |
| 127 OverflowEventDispatcher(const RenderBlock* block) | 130 OverflowEventDispatcher(const RenderBlock* block) |
| 128 : m_block(block) | 131 : m_block(block) |
| 129 , m_hadHorizontalLayoutOverflow(false) | 132 , m_hadHorizontalLayoutOverflow(false) |
| (...skipping 692 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 822 ASSERT(beforeChild->isRunIn()); | 825 ASSERT(beforeChild->isRunIn()); |
| 823 beforeChild = beforeChildContainer; | 826 beforeChild = beforeChildContainer; |
| 824 } | 827 } |
| 825 } | 828 } |
| 826 | 829 |
| 827 // Nothing goes before the intruded run-in. | 830 // Nothing goes before the intruded run-in. |
| 828 if (beforeChild && beforeChild->isRunIn() && runInIsPlacedIntoSiblingBlock(b
eforeChild)) | 831 if (beforeChild && beforeChild->isRunIn() && runInIsPlacedIntoSiblingBlock(b
eforeChild)) |
| 829 beforeChild = beforeChild->nextSibling(); | 832 beforeChild = beforeChild->nextSibling(); |
| 830 | 833 |
| 831 // Check for a spanning element in columns. | 834 // Check for a spanning element in columns. |
| 832 RenderBlock* columnsBlockAncestor = columnsBlockForSpanningElement(newChild)
; | 835 if (!gIsInColumnFlowSplit) { |
| 833 if (columnsBlockAncestor) { | 836 RenderBlock* columnsBlockAncestor = columnsBlockForSpanningElement(newCh
ild); |
| 834 // We are placing a column-span element inside a block. | 837 if (columnsBlockAncestor) { |
| 835 RenderBlock* newBox = createAnonymousColumnSpanBlock(); | 838 TemporaryChange<bool> isInColumnFlowSplit(gIsInColumnFlowSplit, true
); |
| 839 // We are placing a column-span element inside a block. |
| 840 RenderBlock* newBox = createAnonymousColumnSpanBlock(); |
| 836 | 841 |
| 837 if (columnsBlockAncestor != this) { | 842 if (columnsBlockAncestor != this) { |
| 838 // We are nested inside a multi-column element and are being split b
y the span. We have to break up | 843 // We are nested inside a multi-column element and are being spl
it by the span. We have to break up |
| 839 // our block into continuations. | 844 // our block into continuations. |
| 840 RenderBoxModelObject* oldContinuation = continuation(); | 845 RenderBoxModelObject* oldContinuation = continuation(); |
| 841 | 846 |
| 842 // When we split an anonymous block, there's no need to do any conti
nuation hookup, | 847 // When we split an anonymous block, there's no need to do any c
ontinuation hookup, |
| 843 // since we haven't actually split a real element. | 848 // since we haven't actually split a real element. |
| 844 if (!isAnonymousBlock()) | 849 if (!isAnonymousBlock()) |
| 845 setContinuation(newBox); | 850 setContinuation(newBox); |
| 846 | 851 |
| 847 splitFlow(beforeChild, newBox, newChild, oldContinuation); | 852 splitFlow(beforeChild, newBox, newChild, oldContinuation); |
| 853 return; |
| 854 } |
| 855 |
| 856 // We have to perform a split of this block's children. This involve
s creating an anonymous block box to hold |
| 857 // the column-spanning |newChild|. We take all of the children from
before |newChild| and put them into |
| 858 // one anonymous columns block, and all of the children after |newCh
ild| go into another anonymous block. |
| 859 makeChildrenAnonymousColumnBlocks(beforeChild, newBox, newChild); |
| 848 return; | 860 return; |
| 849 } | 861 } |
| 850 | |
| 851 // We have to perform a split of this block's children. This involves c
reating an anonymous block box to hold | |
| 852 // the column-spanning |newChild|. We take all of the children from bef
ore |newChild| and put them into | |
| 853 // one anonymous columns block, and all of the children after |newChild|
go into another anonymous block. | |
| 854 makeChildrenAnonymousColumnBlocks(beforeChild, newBox, newChild); | |
| 855 return; | |
| 856 } | 862 } |
| 857 | 863 |
| 858 bool madeBoxesNonInline = false; | 864 bool madeBoxesNonInline = false; |
| 859 | 865 |
| 860 // A block has to either have all of its children inline, or all of its chil
dren as blocks. | 866 // A block has to either have all of its children inline, or all of its chil
dren as blocks. |
| 861 // So, if our children are currently inline and a block child has to be inse
rted, we move all our | 867 // So, if our children are currently inline and a block child has to be inse
rted, we move all our |
| 862 // inline children into anonymous block boxes. | 868 // inline children into anonymous block boxes. |
| 863 if (childrenInline() && !newChild->isInline() && !newChild->isFloatingOrOutO
fFlowPositioned()) { | 869 if (childrenInline() && !newChild->isInline() && !newChild->isFloatingOrOutO
fFlowPositioned()) { |
| 864 // This is a block with inline content. Wrap the inline content in anony
mous blocks. | 870 // This is a block with inline content. Wrap the inline content in anony
mous blocks. |
| 865 makeChildrenNonInline(beforeChild); | 871 makeChildrenNonInline(beforeChild); |
| (...skipping 6878 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7744 { | 7750 { |
| 7745 memoryInstrumentation->addRootObject(gColumnInfoMap, WebCoreMemoryTypes::Ren
deringStructures); | 7751 memoryInstrumentation->addRootObject(gColumnInfoMap, WebCoreMemoryTypes::Ren
deringStructures); |
| 7746 memoryInstrumentation->addRootObject(gPositionedDescendantsMap, WebCoreMemor
yTypes::RenderingStructures); | 7752 memoryInstrumentation->addRootObject(gPositionedDescendantsMap, WebCoreMemor
yTypes::RenderingStructures); |
| 7747 memoryInstrumentation->addRootObject(gPercentHeightDescendantsMap, WebCoreMe
moryTypes::RenderingStructures); | 7753 memoryInstrumentation->addRootObject(gPercentHeightDescendantsMap, WebCoreMe
moryTypes::RenderingStructures); |
| 7748 memoryInstrumentation->addRootObject(gPositionedContainerMap, WebCoreMemoryT
ypes::RenderingStructures); | 7754 memoryInstrumentation->addRootObject(gPositionedContainerMap, WebCoreMemoryT
ypes::RenderingStructures); |
| 7749 memoryInstrumentation->addRootObject(gPercentHeightContainerMap, WebCoreMemo
ryTypes::RenderingStructures); | 7755 memoryInstrumentation->addRootObject(gPercentHeightContainerMap, WebCoreMemo
ryTypes::RenderingStructures); |
| 7750 memoryInstrumentation->addRootObject(gDelayedUpdateScrollInfoSet, WebCoreMem
oryTypes::RenderingStructures); | 7756 memoryInstrumentation->addRootObject(gDelayedUpdateScrollInfoSet, WebCoreMem
oryTypes::RenderingStructures); |
| 7751 } | 7757 } |
| 7752 | 7758 |
| 7753 } // namespace WebCore | 7759 } // namespace WebCore |
| OLD | NEW |