Changeset 92969 in webkit
- Timestamp:
- Aug 12, 2011 10:22:25 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 27 added
- 19 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r92966 r92969 1 2011-08-12 Alexandru Chiculita <achicu@adobe.com> 2 3 Original patch by Mihnea Ovidenie <mihnea@adobe.com>. 4 Also contains some improvements done by Dave Hyatt <hyatt@apple.com>. 5 6 [CSSRegions]RenderFlowThread should display its content using RenderRegion 7 https://bugs.webkit.org/show_bug.cgi?id=65627 8 9 Also updated the old tests that expected an 100% by 100% RenderFlowThread. Those tests 10 require at least a region attached, otherwise the RenderFlowThread would have been 0/0 in size, 11 and no output would be generated for them in the render tree. 12 13 The attached regions are now printed in the render tree, so some tests required updated results. 14 15 Reviewed by David Hyatt. 16 17 * fast/regions/content-flowed-into-regions-dynamically-added-expected.png: Added. 18 * fast/regions/content-flowed-into-regions-dynamically-added-expected.txt: Added. 19 * fast/regions/content-flowed-into-regions-dynamically-added.html: Added. 20 * fast/regions/content-flowed-into-regions-dynamically-removed-expected.png: Added. 21 * fast/regions/content-flowed-into-regions-dynamically-removed-expected.txt: Added. 22 * fast/regions/content-flowed-into-regions-dynamically-removed.html: Added. 23 * fast/regions/content-flowed-into-regions-expected.png: Added. 24 * fast/regions/content-flowed-into-regions-expected.txt: Added. 25 * fast/regions/content-flowed-into-regions-with-dyn-index-expected.png: Added. 26 * fast/regions/content-flowed-into-regions-with-dyn-index-expected.txt: Added. 27 * fast/regions/content-flowed-into-regions-with-dyn-index.html: Added. 28 * fast/regions/content-flowed-into-regions-with-index-dom-expected.png: Added. 29 * fast/regions/content-flowed-into-regions-with-index-dom-expected.txt: Added. 30 * fast/regions/content-flowed-into-regions-with-index-dom.html: Added. 31 * fast/regions/content-flowed-into-regions-with-index-expected.png: Added. 32 * fast/regions/content-flowed-into-regions-with-index-expected.txt: Added. 33 * fast/regions/content-flowed-into-regions-with-index.html: Added. 34 * fast/regions/content-flowed-into-regions.html: Added. 35 * fast/regions/flow-content-basic-vertical-rl.html: Copied from LayoutTests/fast/regions/flow-content-basic.html. 36 * fast/regions/flow-content-basic-vertical.html: Copied from LayoutTests/fast/regions/flow-content-basic.html. 37 * fast/regions/flow-content-basic.html: 38 * fast/regions/render-region-renderer-expected.txt: 39 * fast/regions/resources/region-style.css: Added. 40 (.greenBox): 41 (.blueBox): 42 (.orangeBox): 43 (.flowArticle): 44 (.regionArticle): 45 (.borderBox): 46 * fast/regions/webkit-flow-renderer-expected.txt: 47 * fast/regions/webkit-flow-renderer-layer-expected.txt: 48 * fast/regions/webkit-flow-renderer-layer.html: 49 * fast/regions/webkit-flow-renderer-nested-expected.txt: 50 * fast/regions/webkit-flow-renderer-nested.html: 51 * fast/regions/webkit-flow-renderer.html: 52 * platform/mac/fast/regions/flow-content-basic-expected.png: Added. 53 * platform/mac/fast/regions/flow-content-basic-expected.txt: Added. 54 * platform/mac/fast/regions/flow-content-basic-vertical-expected.png: Added. 55 * platform/mac/fast/regions/flow-content-basic-vertical-expected.txt: Added. 56 * platform/mac/fast/regions/flow-content-basic-vertical-rl-expected.png: Added. 57 * platform/mac/fast/regions/flow-content-basic-vertical-rl-expected.txt: Added. 58 1 59 2011-08-12 Abhishek Arya <inferno@chromium.org> 2 60 -
trunk/LayoutTests/fast/regions/flow-content-basic-vertical-rl.html
r92966 r92969 10 10 11 11 <style type="text/css"> 12 html { -webkit-writing-mode: vertical-rl } 13 12 14 #source{ 13 15 -webkit-flow: "main-thread"; 14 16 } 15 16 .region{ 17 content:from(main-thread); 18 } 19 17 18 .region { width: 100px; height:300px; content: -webkit-from-flow("main-thread"); border:1px solid black; padding:5px } 19 20 20 .pass{ 21 21 color: green; … … 29 29 <body> 30 30 <div id="source" class="pass"> 31 <p>flow content</p> 31 <div style="width:100px;">first flow content</div> 32 <div style="width:100px;">second flow content</div> 32 33 </div> 33 34 <div> 34 The words "flow content" in green should display after this div,35 The words "flow content" in green should display twice after this div, 35 36 and there should be two copies of this content that match. 36 37 </div> 37 38 <div id="region1" class="region"> 39 <div class="error">FAIL if this text is displayed.</div> 40 </div> 41 <div id="region2" class="region"> 38 42 <div class="error">FAIL if this text is displayed.</div> 39 43 </div> -
trunk/LayoutTests/fast/regions/flow-content-basic-vertical.html
r92966 r92969 10 10 11 11 <style type="text/css"> 12 html { -webkit-writing-mode: vertical-lr } 13 12 14 #source{ 13 15 -webkit-flow: "main-thread"; … … 15 17 16 18 .region{ 17 content:from(main-thread); 19 content: -webkit-from-flow("main-thread"); 20 width:100px; 18 21 } 19 22 -
trunk/LayoutTests/fast/regions/flow-content-basic.html
r90067 r92969 15 15 16 16 .region{ 17 content:from(main-thread); 17 content: -webkit-from-flow("main-thread"); 18 height:100px; 19 width:300px; 18 20 } 19 21 -
trunk/LayoutTests/fast/regions/render-region-renderer-expected.txt
r91955 r92969 4 4 RenderBlock {HTML} at (0,0) size 800x170 5 5 RenderBody {BODY} at (8,8) size 784x154 6 RenderRegion {DIV} at (0,0) size 784x2 [border: (1px solid #FF0000)]6 RenderRegion {DIV} at (0,0) size 2x2 [border: (1px solid #FF0000)] 7 7 RenderRegion {DIV} at (0,2) size 52x52 [border: (1px solid #FF0000)] 8 8 RenderBlock {DIV} at (0,54) size 100x100 … … 12 12 layer at (8,200) size 52x52 13 13 RenderRegion {DIV} at (8,200) size 52x52 [border: (1px solid #FF0000)] 14 Flow Threads 15 Thread with flow-name 'no-flow' 16 layer at (0,0) size 50x250 17 RenderFlowThread at (0,0) size 50x250 18 Regions for flow 'no-flow' 19 RenderRegion {DIV} with index 0 20 RenderRegion {DIV} with index 0 21 RenderRegion {DIV} with index 0 22 RenderRegion {DIV} with index 0 23 RenderRegion {DIV} with index 0 24 RenderRegion {DIV} with index 0 -
trunk/LayoutTests/fast/regions/webkit-flow-renderer-expected.txt
r91760 r92969 1 1 layer at (0,0) size 800x600 2 2 RenderView at (0,0) size 800x600 3 layer at (0,0) size 800x8 4 RenderBlock {HTML} at (0,0) size 800x8 5 RenderBody {BODY} at (8,8) size 784x0 3 layer at (0,0) size 800x316 4 RenderBlock {HTML} at (0,0) size 800x316 5 RenderBody {BODY} at (8,8) size 784x300 6 RenderRegion {DIV} at (0,0) size 784x100 7 RenderRegion {DIV} at (0,100) size 784x100 8 RenderRegion {DIV} at (0,200) size 784x100 6 9 Flow Threads 7 10 Thread with flow-name 'flowA' 8 layer at (0,0) size 800x6009 RenderFlowThread at (0,0) size 800x60010 RenderBlock {DIV} at (0,0) size 800x1811 layer at (0,0) size 784x100 12 RenderFlowThread at (0,0) size 784x100 13 RenderBlock {DIV} at (0,0) size 784x18 11 14 RenderText {#text} at (0,0) size 91x18 12 15 text run at (0,0) width 91: "DIV4 - flowA" 13 RenderBlock {DIV} at (0,18) size 800x1816 RenderBlock {DIV} at (0,18) size 784x18 14 17 RenderText {#text} at (0,0) size 91x18 15 18 text run at (0,0) width 91: "DIV1 - flowA" 19 Regions for flow 'flowA' 20 RenderRegion {DIV} #REGION1 with index 0 16 21 Thread with flow-name 'flowB' 17 layer at (0,0) size 800x60018 RenderFlowThread at (0,0) size 800x60019 RenderBlock {DIV} at (0,0) size 800x1822 layer at (0,0) size 784x100 23 RenderFlowThread at (0,0) size 784x100 24 RenderBlock {DIV} at (0,0) size 784x18 20 25 RenderText {#text} at (0,0) size 90x18 21 26 text run at (0,0) width 90: "DIV5 - flowB" 22 RenderBlock {DIV} at (0,18) size 800x1827 RenderBlock {DIV} at (0,18) size 784x18 23 28 RenderText {#text} at (0,0) size 90x18 24 29 text run at (0,0) width 90: "DIV7 - flowB" 25 RenderBlock (anonymous) at (0,36) size 800x1830 RenderBlock (anonymous) at (0,36) size 784x18 26 31 RenderInline {SPAN} at (0,0) size 103x18 27 32 RenderText {#text} at (0,0) size 103x18 28 33 text run at (0,0) width 103: "SPAN2 - flowB" 29 RenderBlock {DIV} at (0,54) size 800x1834 RenderBlock {DIV} at (0,54) size 784x18 30 35 RenderText {#text} at (0,0) size 90x18 31 36 text run at (0,0) width 90: "DIV6 - flowB" 37 Regions for flow 'flowB' 38 RenderRegion {DIV} #REGION2 with index 0 32 39 Thread with flow-name 'flowC' 33 layer at (0,0) size 800x60034 RenderFlowThread at (0,0) size 800x60035 RenderBlock {DIV} at (0,0) size 800x1840 layer at (0,0) size 784x100 41 RenderFlowThread at (0,0) size 784x100 42 RenderBlock {DIV} at (0,0) size 784x18 36 43 RenderText {#text} at (0,0) size 90x18 37 44 text run at (0,0) width 90: "DIV3 - flowC" 38 RenderBlock {DIV} at (0,18) size 800x1845 RenderBlock {DIV} at (0,18) size 784x18 39 46 RenderText {#text} at (0,0) size 90x18 40 47 text run at (0,0) width 90: "DIV8 - flowC" 48 Regions for flow 'flowC' 49 RenderRegion {DIV} #REGION3 with index 0 -
trunk/LayoutTests/fast/regions/webkit-flow-renderer-layer-expected.txt
r92870 r92969 1 1 layer at (0,0) size 800x600 2 2 RenderView at (0,0) size 800x600 3 layer at (0,0) size 800x8 4 RenderBlock {HTML} at (0,0) size 800x8 5 RenderBody {BODY} at (8,8) size 784x0 3 layer at (0,0) size 800x316 4 RenderBlock {HTML} at (0,0) size 800x316 5 RenderBody {BODY} at (8,8) size 784x300 6 RenderRegion {DIV} at (0,0) size 784x100 7 RenderRegion {DIV} at (0,100) size 784x100 8 RenderRegion {DIV} at (0,200) size 784x100 6 9 Flow Threads 7 10 Thread with flow-name 'flowA' 8 layer at (0,0) size 800x600 9 RenderFlowThread at (0,0) size 800x600 11 layer at (0,0) size 784x100 12 RenderFlowThread at (0,0) size 784x100 13 Regions for flow 'flowA' 14 RenderRegion {DIV} #REGION1 with index 0 10 15 Thread with flow-name 'flowB' 11 layer at (0,0) size 800x600 12 RenderFlowThread at (0,0) size 800x600 16 layer at (0,0) size 784x100 17 RenderFlowThread at (0,0) size 784x100 18 Regions for flow 'flowB' 19 RenderRegion {DIV} #REGION2 with index 0 13 20 Thread with flow-name 'flowC' 14 layer at (0,0) size 800x60015 RenderFlowThread at (0,0) size 800x60016 RenderBlock {DIV} at (0,0) size 800x3617 RenderBlock (anonymous) at (0,0) size 800x1821 layer at (0,0) size 784x100 22 RenderFlowThread at (0,0) size 784x100 23 RenderBlock {DIV} at (0,0) size 784x36 24 RenderBlock (anonymous) at (0,0) size 784x18 18 25 RenderText {#text} at (0,0) size 90x18 19 26 text run at (0,0) width 90: "DIV3 - flowC" 20 RenderBlock {DIV} at (0,18) size 800x1827 RenderBlock {DIV} at (0,18) size 784x18 21 28 RenderText {#text} at (0,0) size 90x18 22 29 text run at (0,0) width 90: "DIV5 - flowC" 30 Regions for flow 'flowC' 31 RenderRegion {DIV} #REGION3 with index 0 -
trunk/LayoutTests/fast/regions/webkit-flow-renderer-layer.html
r91760 r92969 19 19 z-index: -1; 20 20 } 21 22 #REGION1, #REGION2, #REGION3 { 23 width: 100%; 24 height: 100px; 25 } 26 #REGION1 { content: -webkit-from-flow('flowA'); } 27 #REGION2 { content: -webkit-from-flow('flowB'); } 28 #REGION3 { content: -webkit-from-flow('flowC'); } 21 29 </style> 22 30 … … 30 38 </div> 31 39 40 <!-- Make some regions, so that the flow has a size and it's visible in the render tree. --> 41 <div id="REGION1"></div> 42 <div id="REGION2"></div> 43 <div id="REGION3"></div> -
trunk/LayoutTests/fast/regions/webkit-flow-renderer-nested-expected.txt
r91760 r92969 1 1 layer at (0,0) size 800x600 2 2 RenderView at (0,0) size 800x600 3 layer at (0,0) size 800x8 4 RenderBlock {HTML} at (0,0) size 800x8 5 RenderBody {BODY} at (8,8) size 784x0 3 layer at (0,0) size 800x216 4 RenderBlock {HTML} at (0,0) size 800x216 5 RenderBody {BODY} at (8,8) size 784x200 6 RenderRegion {DIV} at (0,0) size 784x100 7 RenderRegion {DIV} at (0,100) size 784x100 6 8 Flow Threads 7 9 Thread with flow-name 'flowA' 8 layer at (0,0) size 800x6009 RenderFlowThread at (0,0) size 800x60010 RenderBlock {DIV} at (0,0) size 800x1811 RenderBlock (anonymous) at (0,0) size 800x1810 layer at (0,0) size 784x100 11 RenderFlowThread at (0,0) size 784x100 12 RenderBlock {DIV} at (0,0) size 784x18 13 RenderBlock (anonymous) at (0,0) size 784x18 12 14 RenderText {#text} at (0,0) size 91x18 13 15 text run at (0,0) width 91: "DIV1 - flowA" 14 16 RenderText {#text} at (0,0) size 0x0 15 RenderBlock {P} at (0,34) size 800x016 RenderBlock {P} at (0,34) size 800x017 RenderBlock {DIV} at (0,34) size 800x1817 RenderBlock {P} at (0,34) size 784x0 18 RenderBlock {P} at (0,34) size 784x0 19 RenderBlock {DIV} at (0,34) size 784x18 18 20 RenderText {#text} at (0,0) size 91x18 19 21 text run at (0,0) width 91: "DIV3 - flowA" 22 Regions for flow 'flowA' 23 RenderRegion {DIV} #REGION1 with index 0 20 24 Thread with flow-name 'flowB' 21 layer at (0,0) size 800x60022 RenderFlowThread at (0,0) size 800x60023 RenderBlock {DIV} at (0,0) size 800x1825 layer at (0,0) size 784x100 26 RenderFlowThread at (0,0) size 784x100 27 RenderBlock {DIV} at (0,0) size 784x18 24 28 RenderText {#text} at (0,0) size 90x18 25 29 text run at (0,0) width 90: "DIV2 - flowB" 30 Regions for flow 'flowB' 31 RenderRegion {DIV} #REGION2 with index 0 -
trunk/LayoutTests/fast/regions/webkit-flow-renderer-nested.html
r91760 r92969 4 4 #DIV1, #DIV3 { -webkit-flow:'flowA'; } 5 5 #DIV2 { -webkit-flow:'flowB'; } 6 7 #REGION1, #REGION2 { 8 width: 100%; 9 height: 100px; 10 } 11 #REGION1 { content: -webkit-from-flow('flowA'); } 12 #REGION2 { content: -webkit-from-flow('flowB'); } 6 13 </style> 7 14 … … 13 20 </p> 14 21 </div> 22 23 <!-- Make some regions, so that the flow has a size and it's visible in the render tree. --> 24 <div id="REGION1"></div> 25 <div id="REGION2"></div> -
trunk/LayoutTests/fast/regions/webkit-flow-renderer.html
r91760 r92969 5 5 #SPAN2 { -webkit-flow: 'flowB'; } 6 6 #DIV3 { -webkit-flow: 'flowC'; } 7 8 #REGION1, #REGION2, #REGION3 { 9 width: 100%; 10 height: 100px; 11 } 12 #REGION1 { content: -webkit-from-flow('flowA'); } 13 #REGION2 { content: -webkit-from-flow('flowB'); } 14 #REGION3 { content: -webkit-from-flow('flowC'); } 7 15 </style> 8 16 … … 10 18 <span id="SPAN2">SPAN2 - flowB</span> 11 19 <div id="DIV3">DIV3 - flowC</div> 20 21 <!-- Make some regions, so that the flow has a size and it's visible in the render tree. --> 22 <div id="REGION1"></div> 23 <div id="REGION2"></div> 24 <div id="REGION3"></div> 12 25 13 26 <script> -
trunk/Source/WebCore/ChangeLog
r92966 r92969 1 2011-08-12 Alexandru Chiculita <achicu@adobe.com> 2 3 Original patch by Mihnea Ovidenie <mihnea@adobe.com>. 4 Also contains some improvements done by Dave Hyatt <hyatt@apple.com>. 5 6 [CSSRegions]RenderFlowThread should display its content using RenderRegion 7 https://bugs.webkit.org/show_bug.cgi?id=65627 8 9 RenderFlowThread collects RenderObjects from a flow. These objects are displayed by means 10 of RenderRegion objects that get the content from the same flow. 11 12 Reviewed by David Hyatt. 13 14 Tests: fast/regions/content-flowed-into-regions-dynamically-added.html 15 fast/regions/content-flowed-into-regions-dynamically-removed.html 16 fast/regions/content-flowed-into-regions-with-dyn-index.html 17 fast/regions/content-flowed-into-regions-with-index-dom.html 18 fast/regions/content-flowed-into-regions-with-index.html 19 fast/regions/content-flowed-into-regions.html 20 fast/regions/flow-content-basic-vertical-rl.html 21 fast/regions/flow-content-basic-vertical.html 22 23 * dom/Node.cpp: 24 (WebCore::Node::diff): 25 * rendering/RenderFlowThread.cpp: 26 (WebCore::RenderFlowThread::RenderFlowThread): 27 (WebCore::RenderFlowThread::createFlowThreadStyle): 28 (WebCore::RenderFlowThread::styleDidChange): 29 (WebCore::compareRenderRegions): 30 (WebCore::RenderFlowThread::addRegionToThread): 31 (WebCore::RenderFlowThread::removeRegionFromThread): 32 (WebCore::RenderFlowThread::layout): 33 (WebCore::RenderFlowThread::computeLogicalWidth): 34 (WebCore::RenderFlowThread::computeLogicalHeight): 35 (WebCore::RenderFlowThread::paintIntoRegion): 36 * rendering/RenderFlowThread.h: 37 * rendering/RenderObject.cpp: 38 (WebCore::RenderObject::createObject): 39 * rendering/RenderRegion.cpp: 40 (WebCore::RenderRegion::RenderRegion): 41 (WebCore::RenderRegion::~RenderRegion): 42 (WebCore::RenderRegion::paint): 43 (WebCore::RenderRegion::styleDidChange): 44 * rendering/RenderRegion.h: 45 (WebCore::RenderRegion::setRegionRect): 46 (WebCore::RenderRegion::regionRect): 47 * rendering/RenderTreeAsText.cpp: 48 (WebCore::writeLayers): 49 * rendering/RenderView.cpp: 50 (WebCore::RenderView::styleDidChange): 51 (WebCore::RenderView::renderFlowThreadWithName): 52 * rendering/RenderView.h: 53 1 54 2011-08-12 Abhishek Arya <inferno@chromium.org> 2 55 -
trunk/Source/WebCore/dom/Node.cpp
r92792 r92969 365 365 // we need to prepare a separate render region object. 366 366 if ((s1 && s2) && ((s1->regionThread() != s2->regionThread() || (s1->regionIndex() != s2->regionIndex())))) 367 367 ch = Detach; 368 368 369 369 return ch; -
trunk/Source/WebCore/rendering/RenderFlowThread.cpp
r92792 r92969 32 32 #include "RenderFlowThread.h" 33 33 #include "Node.h" 34 #include "PaintInfo.h" 35 #include "RenderRegion.h" 34 36 35 37 namespace WebCore { 36 38 37 39 RenderFlowThread::RenderFlowThread(Node* node, const AtomicString& flowThread) 38 : RenderBlock(node) 39 , m_flowThread(flowThread) 40 : RenderBlock(node) 41 , m_flowThread(flowThread) 42 , m_regionsInvalidated(false) 40 43 { 41 44 setIsAnonymous(false); 42 setStyle(createFlowThreadStyle()); 43 } 44 45 PassRefPtr<RenderStyle> RenderFlowThread::createFlowThreadStyle() 45 } 46 47 PassRefPtr<RenderStyle> RenderFlowThread::createFlowThreadStyle(RenderStyle* parentStyle) 46 48 { 47 49 RefPtr<RenderStyle> newStyle(RenderStyle::create()); 50 newStyle->inheritFrom(parentStyle); 48 51 newStyle->setDisplay(BLOCK); 49 52 newStyle->setPosition(AbsolutePosition); … … 59 62 } 60 63 64 void RenderFlowThread::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle) 65 { 66 RenderBlock::styleDidChange(diff, oldStyle); 67 68 if (oldStyle && oldStyle->writingMode() != style()->writingMode()) 69 m_regionsInvalidated = true; 70 } 71 61 72 RenderObject* RenderFlowThread::nextRendererForNode(Node* node) const 62 73 { … … 111 122 } 112 123 124 // Compare two regions to determine in which one the content should flow first. 125 // The function returns true if the first passed region is "less" than the second passed region. 126 // If the first region index < second region index, then the first region is "less" than the second region. 127 // If the first region index == second region index and first region appears before second region in DOM, 128 // the first region is "less" than the second region. 129 // If the first region is "less" than the second region, the first region receives content before second region. 130 static bool compareRenderRegions(const RenderRegion* firstRegion, const RenderRegion* secondRegion) 131 { 132 ASSERT(firstRegion); 133 ASSERT(secondRegion); 134 135 // First, compare only region-index properties. 136 if (firstRegion->style()->regionIndex() != secondRegion->style()->regionIndex()) 137 return (firstRegion->style()->regionIndex() < secondRegion->style()->regionIndex()); 138 139 // If the regions have the same region-index, compare their position in dom. 140 ASSERT(firstRegion->node()); 141 ASSERT(secondRegion->node()); 142 143 unsigned short position = firstRegion->node()->compareDocumentPosition(secondRegion->node()); 144 return (position & Node::DOCUMENT_POSITION_FOLLOWING); 145 } 146 147 void RenderFlowThread::addRegionToThread(RenderRegion* renderRegion) 148 { 149 ASSERT(renderRegion); 150 if (m_regionList.isEmpty()) 151 m_regionList.add(renderRegion); 152 else { 153 // Find the first region "greater" than renderRegion. 154 RenderRegionList::iterator it = m_regionList.begin(); 155 while (it != m_regionList.end() && !compareRenderRegions(renderRegion, *it)) 156 ++it; 157 m_regionList.insertBefore(it, renderRegion); 158 } 159 160 invalidateRegions(); 161 } 162 163 void RenderFlowThread::removeRegionFromThread(RenderRegion* renderRegion) 164 { 165 ASSERT(renderRegion); 166 m_regionList.remove(renderRegion); 167 168 invalidateRegions(); 169 } 170 171 void RenderFlowThread::layout() 172 { 173 if (m_regionsInvalidated) { 174 m_regionsInvalidated = false; 175 if (hasRegions()) { 176 int logicalHeight = 0; 177 for (RenderRegionList::iterator iter = m_regionList.begin(); iter != m_regionList.end(); ++iter) { 178 RenderRegion* region = *iter; 179 180 ASSERT(!region->needsLayout()); 181 182 IntRect regionRect; 183 if (isHorizontalWritingMode()) { 184 regionRect = IntRect(0, logicalHeight, region->contentWidth(), region->contentHeight()); 185 logicalHeight += regionRect.height(); 186 } else { 187 regionRect = IntRect(logicalHeight, 0, region->contentWidth(), region->contentHeight()); 188 logicalHeight += regionRect.width(); 189 } 190 191 region->setRegionRect(regionRect); 192 } 193 } 194 } 195 196 RenderBlock::layout(); 197 } 198 199 void RenderFlowThread::computeLogicalWidth() 200 { 201 int logicalWidth = 0; 202 203 for (RenderRegionList::iterator iter = m_regionList.begin(); iter != m_regionList.end(); ++iter) { 204 RenderRegion* region = *iter; 205 ASSERT(!region->needsLayout()); 206 logicalWidth = max(isHorizontalWritingMode() ? region->contentWidth() : region->contentHeight(), logicalWidth); 207 } 208 209 setLogicalWidth(logicalWidth); 210 } 211 212 void RenderFlowThread::computeLogicalHeight() 213 { 214 int logicalHeight = 0; 215 216 for (RenderRegionList::iterator iter = m_regionList.begin(); iter != m_regionList.end(); ++iter) { 217 RenderRegion* region = *iter; 218 ASSERT(!region->needsLayout()); 219 logicalHeight += isHorizontalWritingMode() ? region->contentHeight() : region->contentWidth(); 220 } 221 222 setLogicalHeight(logicalHeight); 223 } 224 225 void RenderFlowThread::paintIntoRegion(PaintInfo& paintInfo, const LayoutRect& regionRect, const LayoutPoint& paintOffset) 226 { 227 GraphicsContext* context = paintInfo.context; 228 if (!context) 229 return; 230 231 // Adjust the clipping rect for the region. 232 // paintOffset contains the offset where the painting should occur 233 // adjusted with the region padding and border. 234 LayoutRect regionClippingRect(paintOffset, regionRect.size()); 235 236 PaintInfo info(paintInfo); 237 info.rect.intersect(regionClippingRect); 238 239 if (!info.rect.isEmpty()) { 240 context->save(); 241 242 context->clip(regionClippingRect); 243 244 // RenderFlowThread should start painting its content in a position that is offset 245 // from the region rect's current position. The amount of offset is equal to the location of 246 // region in flow coordinates. 247 LayoutPoint renderFlowThreadOffset; 248 if (style()->isFlippedBlocksWritingMode()) { 249 LayoutRect flippedRegionRect(regionRect); 250 flipForWritingMode(flippedRegionRect); 251 renderFlowThreadOffset = LayoutPoint(regionClippingRect.location() - flippedRegionRect.location()); 252 } else 253 renderFlowThreadOffset = LayoutPoint(regionClippingRect.location() - regionRect.location()); 254 255 RenderBlock::paint(paintInfo, renderFlowThreadOffset); 256 257 context->restore(); 258 } 259 } 260 113 261 } // namespace WebCore -
trunk/Source/WebCore/rendering/RenderFlowThread.h
r92792 r92969 41 41 42 42 class RenderStyle; 43 class RenderRegion; 44 45 typedef ListHashSet<RenderRegion*> RenderRegionList; 43 46 44 47 // RenderFlowThread is used to collect all the render objects that participate in a … … 54 57 virtual bool isRenderFlowThread() const { return true; } 55 58 59 virtual void layout(); 60 56 61 AtomicString flowThread() const { return m_flowThread; } 57 62 … … 66 71 virtual void removeChild(RenderObject*); 67 72 73 void addRegionToThread(RenderRegion*); 74 void removeRegionFromThread(RenderRegion*); 75 const RenderRegionList& renderRegionList() const { return m_regionList; } 76 77 void computeLogicalWidth(); 78 void computeLogicalHeight(); 79 80 void paintIntoRegion(PaintInfo&, const LayoutRect&, const LayoutPoint&); 81 82 bool hasRegions() const { return m_regionList.size(); } 83 84 void invalidateRegions() { m_regionsInvalidated = true; setNeedsLayout(true); } 85 86 static PassRefPtr<RenderStyle> createFlowThreadStyle(RenderStyle* parentStyle); 87 88 void styleDidChange(StyleDifference, const RenderStyle* oldStyle); 89 68 90 private: 69 static PassRefPtr<RenderStyle> createFlowThreadStyle();70 71 91 virtual const char* renderName() const { return "RenderFlowThread"; } 72 92 73 93 typedef ListHashSet<RenderObject*> FlowThreadChildList; 74 94 FlowThreadChildList m_flowThreadChildList; 75 95 76 96 AtomicString m_flowThread; 97 RenderRegionList m_regionList; 98 bool m_regionsInvalidated; 77 99 }; 78 100 -
trunk/Source/WebCore/rendering/RenderObject.cpp
r92888 r92969 139 139 case COMPACT: 140 140 // Only non-replaced block elements can become a region. 141 if (!style->regionThread().isEmpty() )142 return new (arena) RenderRegion(node );141 if (!style->regionThread().isEmpty() && doc->renderView()) 142 return new (arena) RenderRegion(node, doc->renderView()->renderFlowThreadWithName(style->regionThread())); 143 143 return new (arena) RenderBlock(node); 144 144 case LIST_ITEM: -
trunk/Source/WebCore/rendering/RenderRegion.cpp
r92792 r92969 34 34 #include "IntRect.h" 35 35 #include "PaintInfo.h" 36 #include "RenderFlowThread.h" 36 37 #include "RenderView.h" 37 38 38 39 namespace WebCore { 39 40 40 RenderRegion::RenderRegion(Node* node) 41 : RenderBox(node) 41 RenderRegion::RenderRegion(Node* node, RenderFlowThread* flowThread) 42 : RenderBox(node) 43 , m_flowThread(flowThread) 42 44 { 45 setReplaced(true); 43 46 } 44 47 45 48 RenderRegion::~RenderRegion() 46 49 { 50 if (m_flowThread && view()) 51 m_flowThread->removeRegionFromThread(this); 52 m_flowThread = 0; 47 53 } 48 54 … … 59 65 void RenderRegion::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset) 60 66 { 61 if (paintInfo.phase != PaintPhaseForeground && paintInfo.phase != PaintPhaseMask && paintInfo.phase != PaintPhaseOutline62 && paintInfo.phase != PaintPhaseSelfOutline)63 return;64 65 67 if (!paintInfo.shouldPaintWithinRoot(this)) 66 68 return; … … 82 84 if ((paintInfo.phase == PaintPhaseOutline || paintInfo.phase == PaintPhaseSelfOutline) && style()->outlineWidth()) 83 85 paintOutline(paintInfo.context, paintRect); 86 87 // Delegate painting of content in region to RenderFlowThread. 88 adjustedPaintOffset.move(borderLeft() + paddingLeft(), borderTop() + paddingTop()); 89 m_flowThread->paintIntoRegion(paintInfo, regionRect(), adjustedPaintOffset); 84 90 } 85 91 86 } // namespace WebCore 92 void RenderRegion::styleDidChange(StyleDifference difference, const RenderStyle* oldStyle) 93 { 94 RenderBox::styleDidChange(difference, oldStyle); 95 // This needs to be done here and not in the constructor, because RenderFlowThread 96 // uses the style() property which is not yet initialized in the constructor. 97 if (!oldStyle && m_flowThread) 98 m_flowThread->addRegionToThread(this); 99 } 100 101 } // namespace WebCre -
trunk/Source/WebCore/rendering/RenderRegion.h
r92792 r92969 35 35 namespace WebCore { 36 36 37 class RenderFlowThread; 38 37 39 class RenderRegion : public RenderBox { 38 40 public: 39 explicit RenderRegion(Node* );41 explicit RenderRegion(Node*, RenderFlowThread*); 40 42 virtual ~RenderRegion(); 41 43 … … 45 47 virtual void paint(PaintInfo&, const LayoutPoint&); 46 48 49 void setRegionRect(const IntRect& rect) { m_regionRect = rect; } 50 IntRect regionRect() const { return m_regionRect; } 51 47 52 private: 48 53 virtual const char* renderName() const { return "RenderRegion"; } 54 55 void styleDidChange(StyleDifference, const RenderStyle* oldStyle); 56 57 RenderFlowThread* m_flowThread; 58 IntRect m_regionRect; 49 59 }; 50 60 -
trunk/Source/WebCore/rendering/RenderTreeAsText.cpp
r92792 r92969 45 45 #include "RenderListMarker.h" 46 46 #include "RenderPart.h" 47 #include "RenderRegion.h" 47 48 #include "RenderTableCell.h" 48 49 #include "RenderView.h" … … 723 724 RenderLayer* layer = renderFlowThread->layer(); 724 725 writeLayers(ts, rootLayer, layer, paintDirtyRect, indent + 2, behavior); 726 727 // Display the render regions attached to this flow thread 728 const RenderRegionList& flowThreadRegionList = renderFlowThread->renderRegionList(); 729 if (!flowThreadRegionList.isEmpty()) { 730 writeIndent(ts, indent + 1); 731 ts << "Regions for flow '"<< renderFlowThread->flowThread() << "'\n"; 732 for (RenderRegionList::const_iterator itRR = flowThreadRegionList.begin(); itRR != flowThreadRegionList.end(); ++itRR) { 733 RenderRegion* renderRegion = *itRR; 734 writeIndent(ts, indent + 2); 735 ts << "RenderRegion"; 736 if (renderRegion->node()) { 737 String tagName = getTagName(renderRegion->node()); 738 if (!tagName.isEmpty()) 739 ts << " {" << tagName << "}"; 740 if (renderRegion->node()->isElementNode() && renderRegion->node()->hasID()) { 741 Element* element = static_cast<Element*>(renderRegion->node()); 742 ts << " #" << element->idForStyleResolution(); 743 } 744 } 745 ts << " with index " << renderRegion->style()->regionIndex() << "\n"; 746 } 747 } 725 748 } 726 749 } -
trunk/Source/WebCore/rendering/RenderView.cpp
r92874 r92969 794 794 } 795 795 796 void RenderView::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle) 797 { 798 RenderBlock::styleDidChange(diff, oldStyle); 799 800 for (RenderObject* renderer = firstChild(); renderer; renderer = renderer->nextSibling()) { 801 if (renderer->isRenderFlowThread()) { 802 RenderFlowThread* flowRenderer = toRenderFlowThread(renderer); 803 flowRenderer->setStyle(RenderFlowThread::createFlowThreadStyle(style())); 804 } 805 } 806 } 807 796 808 RenderFlowThread* RenderView::renderFlowThreadWithName(const AtomicString& flowThread) 797 809 { … … 805 817 806 818 RenderFlowThread* flowRenderer = new (renderArena()) RenderFlowThread(document(), flowThread); 819 flowRenderer->setStyle(RenderFlowThread::createFlowThreadStyle(style())); 807 820 addChild(flowRenderer); 808 821 -
trunk/Source/WebCore/rendering/RenderView.h
r92792 r92969 169 169 RenderFlowThread* renderFlowThreadWithName(const AtomicString& flowThread); 170 170 171 void styleDidChange(StyleDifference, const RenderStyle* oldStyle); 172 171 173 protected: 172 174 virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&, bool* wasFixed = 0) const;
Note: See TracChangeset
for help on using the changeset viewer.