Changeset 111376 in webkit
- Timestamp:
- Mar 20, 2012 3:08:26 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 12 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r111374 r111376 1 2012-03-20 Mihnea Ovidenie <mihnea@adobe.com> 2 3 [CSSRegions]Implement NamedFlow::getRegionsByContentNode 4 https://bugs.webkit.org/show_bug.cgi?id=77746 5 6 Reviewed by David Hyatt. 7 8 The list of regions returned is a static node list. 9 10 * fast/regions/get-regions-by-content-node-expected.txt: Added. 11 * fast/regions/get-regions-by-content-node-horiz-bt-expected.txt: Added. 12 * fast/regions/get-regions-by-content-node-horiz-bt.html: Added. 13 * fast/regions/get-regions-by-content-node-horiz-tb-expected.txt: Added. 14 * fast/regions/get-regions-by-content-node-horiz-tb.html: Added. 15 * fast/regions/get-regions-by-content-node-vert-lr-expected.txt: Added. 16 * fast/regions/get-regions-by-content-node-vert-lr.html: Added. 17 * fast/regions/get-regions-by-content-node-vert-rl-expected.txt: Added. 18 * fast/regions/get-regions-by-content-node-vert-rl.html: Added. 19 * fast/regions/get-regions-by-content-node.html: Added. 20 * fast/regions/get-regions-by-content-node2-expected.txt: Added. 21 * fast/regions/get-regions-by-content-node2.html: Added. 22 1 23 2012-03-20 Keishi Hattori <keishi@webkit.org> 2 24 -
trunk/Source/WebCore/ChangeLog
r111371 r111376 1 2012-03-20 Mihnea Ovidenie <mihnea@adobe.com> 2 3 [CSSRegions]Implement NamedFlow::getRegionsByContentNode 4 https://bugs.webkit.org/show_bug.cgi?id=77746 5 6 Reviewed by David Hyatt. 7 8 The list of regions returned is a static node list. 9 10 Tests: fast/regions/get-regions-by-content-node-horiz-bt.html 11 fast/regions/get-regions-by-content-node-horiz-tb.html 12 fast/regions/get-regions-by-content-node-vert-lr.html 13 fast/regions/get-regions-by-content-node-vert-rl.html 14 fast/regions/get-regions-by-content-node.html 15 fast/regions/get-regions-by-content-node2.html 16 17 * dom/WebKitNamedFlow.cpp: 18 (WebCore::WebKitNamedFlow::getRegionsByContentNode): 19 (WebCore): 20 * dom/WebKitNamedFlow.h: 21 (WebKitNamedFlow): 22 * dom/WebKitNamedFlow.idl: 23 * rendering/RenderFlowThread.cpp: 24 (WebCore::RenderFlowThread::regionInRange): 25 (WebCore): 26 (WebCore::RenderFlowThread::objectInFlowRegion): 27 * rendering/RenderFlowThread.h: 28 * rendering/RenderRegion.h: 29 (WebCore::RenderRegion::flowThread): 30 1 31 2012-03-20 Luke Macpherson <macpherson@chromium.org> 2 32 -
trunk/Source/WebCore/dom/WebKitNamedFlow.cpp
r111229 r111376 34 34 #include "NodeList.h" 35 35 #include "RenderFlowThread.h" 36 #include "RenderRegion.h" 36 37 #include "StaticNodeList.h" 37 38 … … 86 87 } 87 88 89 PassRefPtr<NodeList> WebKitNamedFlow::getRegionsByContentNode(Node* contentNode) 90 { 91 if (!contentNode) 92 return 0; 93 94 m_parentFlowThread->document()->updateLayoutIgnorePendingStylesheets(); 95 96 Vector<RefPtr<Node> > regionNodes; 97 if (contentNode->renderer() 98 && contentNode->renderer()->inRenderFlowThread() 99 && m_parentFlowThread == contentNode->renderer()->enclosingRenderFlowThread()) { 100 const RenderRegionList& regionList = m_parentFlowThread->renderRegionList(); 101 for (RenderRegionList::const_iterator iter = regionList.begin(); iter != regionList.end(); ++iter) { 102 const RenderRegion* renderRegion = *iter; 103 if (!renderRegion->isValid()) 104 continue; 105 if (m_parentFlowThread->objectInFlowRegion(contentNode->renderer(), renderRegion)) 106 regionNodes.append(renderRegion->node()); 107 } 108 } 109 return StaticNodeList::adopt(regionNodes); 110 } 111 88 112 } // namespace WebCore 89 113 -
trunk/Source/WebCore/dom/WebKitNamedFlow.h
r111229 r111376 52 52 bool overflow() const; 53 53 PassRefPtr<NodeList> contentNodes() const; 54 PassRefPtr<NodeList> getRegionsByContentNode(Node*); 54 55 55 56 void registerContentNode(Node* contentNode); -
trunk/Source/WebCore/dom/WebKitNamedFlow.idl
r111229 r111376 34 34 readonly attribute boolean overflow; 35 35 readonly attribute NodeList contentNodes; 36 NodeList getRegionsByContentNode(in Node contentNode); 36 37 }; 37 38 } -
trunk/Source/WebCore/rendering/RenderFlowThread.cpp
r110731 r111376 953 953 } 954 954 955 bool RenderFlowThread::regionInRange(const RenderRegion* targetRegion, const RenderRegion* startRegion, const RenderRegion* endRegion) const 956 { 957 ASSERT(targetRegion); 958 959 for (RenderRegionList::const_iterator it = m_regionList.find(const_cast<RenderRegion*>(startRegion)); it != m_regionList.end(); ++it) { 960 const RenderRegion* currRegion = *it; 961 if (!currRegion->isValid()) 962 continue; 963 if (targetRegion == currRegion) 964 return true; 965 if (currRegion == endRegion) 966 break; 967 } 968 969 return false; 970 } 971 972 bool RenderFlowThread::objectInFlowRegion(const RenderObject* object, const RenderRegion* region) const 973 { 974 ASSERT(object); 975 ASSERT(region); 976 977 if (!object->inRenderFlowThread()) 978 return false; 979 if (object->enclosingRenderFlowThread() != this) 980 return false; 981 if (!m_regionList.contains(const_cast<RenderRegion*>(region))) 982 return false; 983 984 RenderBox* enclosingBox = object->enclosingBox(); 985 RenderRegion* enclosingBoxStartRegion = 0; 986 RenderRegion* enclosingBoxEndRegion = 0; 987 getRegionRangeForBox(enclosingBox, enclosingBoxStartRegion, enclosingBoxEndRegion); 988 if (!regionInRange(region, enclosingBoxStartRegion, enclosingBoxEndRegion)) 989 return false; 990 991 if (object->isBox()) 992 return true; 993 994 LayoutRect objectABBRect = object->absoluteBoundingBoxRect(true); 995 if (!objectABBRect.width()) 996 objectABBRect.setWidth(1); 997 if (!objectABBRect.height()) 998 objectABBRect.setHeight(1); 999 if (objectABBRect.intersects(region->absoluteBoundingBoxRect(true))) 1000 return true; 1001 1002 if (region == lastRegion()) { 1003 // If the object does not intersect any of the enclosing box regions 1004 // then the object is in last region. 1005 for (RenderRegionList::const_iterator it = m_regionList.find(enclosingBoxStartRegion); it != m_regionList.end(); ++it) { 1006 const RenderRegion* currRegion = *it; 1007 if (!region->isValid()) 1008 continue; 1009 if (currRegion == region) 1010 break; 1011 if (objectABBRect.intersects(currRegion->absoluteBoundingBoxRect(true))) 1012 return false; 1013 } 1014 return true; 1015 } 1016 1017 return false; 1018 } 1019 955 1020 } // namespace WebCore 956 -
trunk/Source/WebCore/rendering/RenderFlowThread.h
r110731 r111376 138 138 bool overflow() const { return m_overflow; } 139 139 140 // Check if the object is in region and the region is part of this flow thread. 141 bool objectInFlowRegion(const RenderObject*, const RenderRegion*) const; 142 140 143 private: 141 144 virtual const char* renderName() const { return "RenderFlowThread"; } … … 148 151 bool shouldRepaint(const LayoutRect&) const; 149 152 void regionLayoutUpdateEventTimerFired(Timer<RenderFlowThread>*); 153 bool regionInRange(const RenderRegion* targetRegion, const RenderRegion* startRegion, const RenderRegion* endRegion) const; 150 154 151 155 typedef ListHashSet<RenderObject*> FlowThreadChildList; -
trunk/Source/WebCore/rendering/RenderRegion.h
r110731 r111376 58 58 59 59 RenderFlowThread* parentFlowThread() const { return m_parentFlowThread; } 60 RenderFlowThread* flowThread() const { return m_flowThread; } 60 61 61 62 // Valid regions do not create circular dependencies with other flows.
Note: See TracChangeset
for help on using the changeset viewer.