Changeset 91760 in webkit
- Timestamp:
- Jul 26, 2011 10:11:08 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 8 added
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r91759 r91760 1 2011-07-26 Alexandru Chiculita <achicu@adobe.com> 2 3 [CSSRegions] Collect flowed elements in different render element 4 https://bugs.webkit.org/show_bug.cgi?id=64516 5 6 Reviewed by Simon Fraser. 7 8 * fast/regions/webkit-flow-renderer-expected.txt: Added. 9 * fast/regions/webkit-flow-renderer-layer-expected.txt: Added. 10 * fast/regions/webkit-flow-renderer-layer.html: Added. 11 * fast/regions/webkit-flow-renderer-nested-expected.txt: Added. 12 * fast/regions/webkit-flow-renderer-nested.html: Added. 13 * fast/regions/webkit-flow-renderer.html: Added. 14 1 15 2011-07-26 Patrick Dubroy <dubroy@chromium.org> 2 16 -
trunk/Source/WebCore/ChangeLog
r91759 r91760 1 2011-07-26 Alexandru Chiculita <achicu@adobe.com> 2 3 [CSSRegions] Collect flowed elements in different render element 4 https://bugs.webkit.org/show_bug.cgi?id=64516 5 6 All the RenderObjects that have a specified "flow" name are moved out of the 7 normal flow. A RenderFlowThread will collect all such RenderObjects. There is 8 a RenderFlowThread for each flow name. The new RenderFlowThread is an anonymous 9 RenderBlock that is positioned absolute and will not render directly. In a 10 different bug/patch we will add RenderRegion that will take care of rendering the 11 RenderFlowThread on screen. 12 13 Reviewed by Simon Fraser. 14 15 Tests: fast/regions/webkit-flow-renderer-layer.html 16 fast/regions/webkit-flow-renderer-nested.html 17 fast/regions/webkit-flow-renderer.html 18 19 * WebCore.vcproj/WebCore.vcproj: 20 * WebCore.xcodeproj/project.pbxproj: 21 * dom/Node.cpp: 22 (WebCore::Node::diff): 23 * dom/NodeRenderingContext.cpp: 24 (WebCore::NodeRenderingContext::NodeRenderingContext): 25 (WebCore::NodeRenderingContext::setStyle): 26 (WebCore::NodeRenderingContext::nextRenderer): 27 (WebCore::NodeRenderingContext::previousRenderer): 28 (WebCore::NodeRenderingContext::parentRenderer): 29 (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded): 30 (WebCore::NodeRendererFactory::createRendererIfNeeded): 31 * dom/NodeRenderingContext.h: 32 (WebCore::NodeRenderingContext::hasFlowThreadParent): 33 (WebCore::NodeRenderingContext::parentFlowRenderer): 34 * rendering/RenderFlowThread.cpp: Added. 35 (WebCore::RenderFlowThread::RenderFlowThread): 36 (WebCore::RenderFlowThread::createFlowThreadStyle): 37 (WebCore::RenderFlowThread::nextRendererForNode): 38 (WebCore::RenderFlowThread::previousRendererForNode): 39 (WebCore::RenderFlowThread::addChild): 40 (WebCore::RenderFlowThread::removeChild): 41 * rendering/RenderFlowThread.h: Added. 42 (WebCore::toRenderFlowThread): 43 * rendering/RenderLayer.cpp: 44 (WebCore::RenderLayer::collectLayers): 45 * rendering/RenderObject.h: 46 (WebCore::RenderObject::isRenderFlowThread): 47 * rendering/RenderTreeAsText.cpp: 48 (WebCore::RenderTreeAsText::writeRenderObject): 49 (WebCore::writeLayers): 50 * rendering/RenderView.cpp: 51 (WebCore::RenderView::renderFlowThreadWithName): 52 * rendering/RenderView.h: 53 * rendering/style/RenderStyle.cpp: 54 (WebCore::RenderStyle::diff): 55 1 56 2011-07-26 Patrick Dubroy <dubroy@chromium.org> 2 57 -
trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj
r91643 r91760 34875 34875 </File> 34876 34876 <File 34877 RelativePath="..\rendering\RenderFlowThread.cpp" 34878 > 34879 </File> 34880 <File 34881 RelativePath="..\rendering\RenderFlowThread.h" 34882 > 34883 </File> 34884 <File 34877 34885 RelativePath="..\rendering\svg\RenderForeignObject.cpp" 34878 34886 > -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r91643 r91760 1320 1320 501BA9E21393CEA000F7ACEB /* CSSWrapShapes.h in Headers */ = {isa = PBXBuildFile; fileRef = 501BA9E11393CEA000F7ACEB /* CSSWrapShapes.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1321 1321 501BAAA913950E2C00F7ACEB /* WindRule.h in Headers */ = {isa = PBXBuildFile; fileRef = 501BAAA813950E2C00F7ACEB /* WindRule.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1322 508CCA4F13CF106B003151F3 /* RenderFlowThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 508CCA4D13CF106B003151F3 /* RenderFlowThread.h */; }; 1323 508CCA5013CF106B003151F3 /* RenderFlowThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 508CCA4E13CF106B003151F3 /* RenderFlowThread.cpp */; }; 1322 1324 50E566D6139E38C500214433 /* CSSWrapShapes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 501BAAB11395114B00F7ACEB /* CSSWrapShapes.cpp */; }; 1323 1325 510184690B08602A004A825F /* CachedPage.h in Headers */ = {isa = PBXBuildFile; fileRef = 510184670B08602A004A825F /* CachedPage.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 7895 7897 501BAAA813950E2C00F7ACEB /* WindRule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WindRule.h; sourceTree = "<group>"; }; 7896 7898 501BAAB11395114B00F7ACEB /* CSSWrapShapes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSWrapShapes.cpp; sourceTree = "<group>"; }; 7899 508CCA4D13CF106B003151F3 /* RenderFlowThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderFlowThread.h; sourceTree = "<group>"; }; 7900 508CCA4E13CF106B003151F3 /* RenderFlowThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderFlowThread.cpp; sourceTree = "<group>"; }; 7897 7901 510184670B08602A004A825F /* CachedPage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedPage.h; sourceTree = "<group>"; }; 7898 7902 510184680B08602A004A825F /* CachedPage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CachedPage.cpp; sourceTree = "<group>"; }; … … 19611 19615 37FC96DA1104ED71003E1FAD /* TrailingFloatsRootInlineBox.h */, 19612 19616 BCA257141293C010007A263D /* VerticalPositionCache.h */, 19617 508CCA4D13CF106B003151F3 /* RenderFlowThread.h */, 19618 508CCA4E13CF106B003151F3 /* RenderFlowThread.cpp */, 19613 19619 ); 19614 19620 path = rendering; … … 23252 23258 977E2E0F12F0FC9C00C13379 /* XSSAuditor.h in Headers */, 23253 23259 FD537353137B651800008DCE /* ZeroPole.h in Headers */, 23260 508CCA4F13CF106B003151F3 /* RenderFlowThread.h in Headers */, 23254 23261 ); 23255 23262 runOnlyForDeploymentPostprocessing = 0; … … 26038 26045 977E2E0E12F0FC9C00C13379 /* XSSAuditor.cpp in Sources */, 26039 26046 FD537352137B651800008DCE /* ZeroPole.cpp in Sources */, 26047 508CCA5013CF106B003151F3 /* RenderFlowThread.cpp in Sources */, 26040 26048 ); 26041 26049 runOnlyForDeploymentPostprocessing = 0; -
trunk/Source/WebCore/dom/Node.cpp
r91404 r91760 358 358 ch = Detach; 359 359 360 #if ENABLE(CSS_REGIONS) 361 // We need to reattach the node, so that it is moved to the correct RenderFlowThread. 362 if ((s1 && s2) && (s1->flowThread() != s2->flowThread())) 363 ch = Detach; 364 #endif 365 360 366 return ch; 361 367 } -
trunk/Source/WebCore/dom/NodeRenderingContext.cpp
r91548 r91760 29 29 #include "ContainerNode.h" 30 30 #include "Node.h" 31 #include "RenderFlowThread.h" 31 32 #include "RenderFullScreen.h" 32 33 #include "RenderObject.h" 34 #include "RenderView.h" 33 35 #include "ShadowContentElement.h" 34 36 #include "ShadowInclusionSelector.h" … … 45 47 , m_includer(0) 46 48 , m_style(0) 49 #if ENABLE(CSS_REGIONS) 50 , m_parentFlowRenderer(0) 51 #endif 47 52 { 48 53 ContainerNode* parent = m_node->parentOrHostNode(); … … 85 90 , m_includer(0) 86 91 , m_style(style) 92 #if ENABLE(CSS_REGIONS) 93 , m_parentFlowRenderer(0) 94 #endif 87 95 { 88 96 } … … 95 103 { 96 104 m_style = style; 105 #if ENABLE(CSS_REGIONS) 106 moveToFlowThreadIfNeeded(); 107 #endif 97 108 } 98 109 … … 156 167 return renderer->nextSibling(); 157 168 169 #if ENABLE(CSS_REGIONS) 170 if (m_parentFlowRenderer) 171 return m_parentFlowRenderer->nextRendererForNode(m_node); 172 #endif 173 158 174 if (m_phase == AttachContentForwarded) { 159 175 if (RenderObject* found = nextRendererOf(m_includer, m_node)) … … 168 184 169 185 for (Node* node = m_node->nextSibling(); node; node = node->nextSibling()) { 170 if (node->renderer()) 186 if (node->renderer()) { 187 #if ENABLE(CSS_REGIONS) 188 // Do not return elements that are attached to a different flow-thread. 189 if (node->renderer()->style() && !node->renderer()->style()->flowThread().isEmpty()) 190 continue; 191 #endif 171 192 return node->renderer(); 193 } 172 194 if (node->isContentElement()) { 173 195 if (RenderObject* first = firstRendererOf(toShadowContentElement(node))) … … 184 206 if (RenderObject* renderer = m_node->renderer()) 185 207 return renderer->previousSibling(); 208 209 #if ENABLE(CSS_REGIONS) 210 if (m_parentFlowRenderer) 211 return m_parentFlowRenderer->previousRendererForNode(m_node); 212 #endif 186 213 187 214 if (m_phase == AttachContentForwarded) { … … 194 221 // however, when I tried adding it, several tests failed. 195 222 for (Node* node = m_node->previousSibling(); node; node = node->previousSibling()) { 196 if (node->renderer()) 223 if (node->renderer()) { 224 #if ENABLE(CSS_REGIONS) 225 // Do not return elements that are attached to a different flow-thread. 226 if (node->renderer()->style() && !node->renderer()->style()->flowThread().isEmpty()) 227 continue; 228 #endif 197 229 return node->renderer(); 230 } 198 231 if (node->isContentElement()) { 199 232 if (RenderObject* last = lastRendererOf(toShadowContentElement(node))) … … 211 244 return renderer->parent(); 212 245 } 246 247 #if ENABLE(CSS_REGIONS) 248 if (m_parentFlowRenderer) 249 return m_parentFlowRenderer; 250 #endif 213 251 214 252 ASSERT(m_location != LocationUndetermined); … … 250 288 } 251 289 290 #if ENABLE(CSS_REGIONS) 291 void NodeRenderingContext::moveToFlowThreadIfNeeded() 292 { 293 if (!m_node->isElementNode() || !m_style || m_style->flowThread().isEmpty()) 294 return; 295 296 m_flowThread = m_style->flowThread(); 297 ASSERT(m_node->document()->renderView()); 298 m_parentFlowRenderer = m_node->document()->renderView()->renderFlowThreadWithName(m_flowThread); 299 } 300 #endif 252 301 253 302 NodeRendererFactory::NodeRendererFactory(Node* node) … … 317 366 RenderObject* newRenderer = createRendererAndStyle(); 318 367 368 #if ENABLE(CSS_REGIONS) 369 if (m_context.hasFlowThreadParent()) { 370 parentRenderer = m_context.parentFlowRenderer(); 371 // Do not call m_context.nextRenderer() here, because it expects to have 372 // the renderer added to its parent already. 373 nextRenderer = m_context.parentFlowRenderer()->nextRendererForNode(node); 374 } 375 #endif 376 319 377 #if ENABLE(FULLSCREEN_API) 320 378 if (document->webkitIsFullScreen() && document->webkitCurrentFullScreenElement() == node) -
trunk/Source/WebCore/dom/NodeRenderingContext.h
r91235 r91760 29 29 #include <wtf/Noncopyable.h> 30 30 #include <wtf/RefPtr.h> 31 #include <wtf/text/AtomicString.h> 31 32 32 33 namespace WebCore { … … 39 40 class ShadowContentElement; 40 41 class ShadowRoot; 42 43 #if ENABLE(CSS_REGIONS) 44 class RenderFlowThread; 45 #endif 41 46 42 47 class NodeRenderingContext { … … 61 66 void hostChildrenChanged(); 62 67 68 #if ENABLE(CSS_REGIONS) 69 bool hasFlowThreadParent() const { return m_parentFlowRenderer; } 70 RenderFlowThread* parentFlowRenderer() const { return m_parentFlowRenderer; } 71 void moveToFlowThreadIfNeeded(); 72 #endif 63 73 private: 64 74 … … 83 93 ShadowContentElement* m_includer; 84 94 RefPtr<RenderStyle> m_style; 95 #if ENABLE(CSS_REGIONS) 96 RenderFlowThread* m_parentFlowRenderer; 97 AtomicString m_flowThread; 98 #endif 85 99 }; 86 100 -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r91436 r91760 3879 3879 updateVisibilityStatus(); 3880 3880 3881 #if ENABLE(CSS_REGIONS) 3882 // Do not let the RenderFlowThread to render directly to screen. It will only render 3883 // inside the RenderRegion objects, so avoid collecting it. 3884 if (renderer()->isRenderFlowThread()) 3885 return; 3886 #endif 3887 3881 3888 // Overflow layers are just painted by their enclosing layers, so they don't get put in zorder lists. 3882 3889 if ((m_hasVisibleContent || (m_hasVisibleDescendant && isStackingContext())) && !isNormalFlowOnly()) { -
trunk/Source/WebCore/rendering/RenderObject.h
r91689 r91760 315 315 virtual bool isRenderFullScreen() const { return false; } 316 316 virtual bool isRenderFullScreenPlaceholder() const { return false; } 317 #endif 318 319 #if ENABLE(CSS_REGIONS) 320 virtual bool isRenderFlowThread() const { return false; } 317 321 #endif 318 322 -
trunk/Source/WebCore/rendering/RenderTreeAsText.cpp
r89649 r91760 39 39 #include "RenderDetailsMarker.h" 40 40 #include "RenderFileUploadControl.h" 41 #include "RenderFlowThread.h" 41 42 #include "RenderInline.h" 42 43 #include "RenderLayer.h" … … 244 245 } 245 246 } 246 247 247 248 bool adjustForTableCells = o.containingBlock()->isTableCell(); 248 249 … … 706 707 writeLayers(ts, rootLayer, posList->at(i), paintDirtyRect, currIndent, behavior); 707 708 } 709 710 #if ENABLE(CSS_REGIONS) 711 // Altough the RenderFlowThread requires a layer, it is not collected by its parent, 712 // so we have to treat it as a special case. 713 bool firstRenderFlowThread = true; 714 for (RenderObject* child = l->renderer()->firstChild(); child; child = child->nextSibling()) { 715 if (child->isRenderFlowThread()) { 716 if (firstRenderFlowThread) { 717 firstRenderFlowThread = false; 718 writeIndent(ts, indent); 719 ts << "Flow Threads\n"; 720 } 721 const RenderFlowThread* renderFlowThread = toRenderFlowThread(child); 722 writeIndent(ts, indent + 1); 723 ts << "Thread with flow-name '" << renderFlowThread->flowThread() << "'\n"; 724 RenderLayer* layer = renderFlowThread->layer(); 725 writeLayers(ts, rootLayer, layer, paintDirtyRect, indent + 2, behavior); 726 } 727 } 728 #endif 708 729 } 709 730 -
trunk/Source/WebCore/rendering/RenderView.cpp
r91436 r91760 30 30 #include "HTMLFrameOwnerElement.h" 31 31 #include "HitTestResult.h" 32 #include "RenderFlowThread.h" 32 33 #include "RenderLayer.h" 33 34 #include "RenderSelectionInfo.h" … … 783 784 } 784 785 786 #if ENABLE(CSS_REGIONS) 787 RenderFlowThread* RenderView::renderFlowThreadWithName(const AtomicString& flowThread) 788 { 789 for (RenderObject* renderer = firstChild(); renderer; renderer = renderer->nextSibling()) { 790 if (renderer->isRenderFlowThread()) { 791 RenderFlowThread* flowRenderer = toRenderFlowThread(renderer); 792 if (flowRenderer->flowThread() == flowThread) 793 return flowRenderer; 794 } 795 } 796 797 RenderFlowThread* flowRenderer = new (renderArena()) RenderFlowThread(document(), flowThread); 798 addChild(flowRenderer); 799 800 return flowRenderer; 801 } 802 #endif 803 785 804 } // namespace WebCore -
trunk/Source/WebCore/rendering/RenderView.h
r91417 r91760 32 32 class RenderWidget; 33 33 34 #if ENABLE(CSS_REGIONS) 35 class RenderFlowThread; 36 #endif 37 34 38 #if USE(ACCELERATED_COMPOSITING) 35 39 class RenderLayerCompositor; … … 163 167 164 168 IntRect documentRect() const; 169 170 #if ENABLE(CSS_REGIONS) 171 RenderFlowThread* renderFlowThreadWithName(const AtomicString& flowThread); 172 #endif 165 173 166 174 protected: -
trunk/Source/WebCore/rendering/style/RenderStyle.cpp
r91392 r91760 350 350 351 351 #if ENABLE(CSS_REGIONS) 352 if (rareNonInheritedData->m_flowThread != other->rareNonInheritedData->m_flowThread 353 || rareNonInheritedData->m_regionThread != other->rareNonInheritedData->m_regionThread 352 if (rareNonInheritedData->m_regionThread != other->rareNonInheritedData->m_regionThread 354 353 || rareNonInheritedData->m_regionIndex != other->rareNonInheritedData->m_regionIndex 355 354 || rareNonInheritedData->m_regionOverflow != other->rareNonInheritedData->m_regionOverflow)
Note: See TracChangeset
for help on using the changeset viewer.