Changeset 93144 in webkit
- Timestamp:
- Aug 16, 2011 12:43:21 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 9 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r93139 r93144 1 2011-08-16 David Hyatt <hyatt@apple.com> 2 3 https://bugs.webkit.org/show_bug.cgi?id=66254 4 5 Make regions repaint properly. Added new repaint tests. 6 7 Reviewed by Simon Fraser. 8 9 * fast/repaint/japanese-rl-selection-repaint-in-regions.html: Added. 10 * fast/repaint/line-flow-with-floats-in-regions.html: Added. 11 * fast/repaint/overflow-flipped-writing-mode-block-in-regions.html: Added. 12 * platform/mac/fast/repaint/japanese-rl-selection-repaint-in-regions-expected.png: Added. 13 * platform/mac/fast/repaint/japanese-rl-selection-repaint-in-regions-expected.txt: Added. 14 * platform/mac/fast/repaint/line-flow-with-floats-in-regions-expected.png: Added. 15 * platform/mac/fast/repaint/line-flow-with-floats-in-regions-expected.txt: Added. 16 * platform/mac/fast/repaint/overflow-flipped-writing-mode-block-in-regions-expected.png: Added. 17 * platform/mac/fast/repaint/overflow-flipped-writing-mode-block-in-regions-expected.txt: Added. 18 1 19 2011-08-16 Adam Roben <aroben@apple.com> 2 20 -
trunk/Source/WebCore/ChangeLog
r93140 r93144 1 2011-08-16 David Hyatt <hyatt@apple.com> 2 3 https://bugs.webkit.org/show_bug.cgi?id=66254 4 5 Make region invalidation and repainting work properly. We do this by making RenderFlowThreads into 6 repaint containers and then issuing new repaints in the regions that contain the invalidated flow thread 7 content. 8 9 Reviewed by Simon Fraser. 10 11 Added new tests in fast/repaint. 12 13 * rendering/RenderFlowThread.cpp: 14 (WebCore::RenderFlowThread::repaintRectangleInRegions): 15 * rendering/RenderFlowThread.h: 16 * rendering/RenderObject.cpp: 17 (WebCore::RenderObject::enclosingRenderFlowThread): 18 (WebCore::RenderObject::containerForRepaint): 19 (WebCore::RenderObject::repaintUsingContainer): 20 * rendering/RenderObject.h: 21 * rendering/RenderView.cpp: 22 (WebCore::RenderView::RenderView): 23 (WebCore::RenderView::renderFlowThreadWithName): 24 * rendering/RenderView.h: 25 (WebCore::RenderView::hasRenderFlowThreads): 26 1 27 2011-08-16 Joseph Pecoraro <joepeck@webkit.org> 2 28 -
trunk/Source/WebCore/rendering/RenderFlowThread.cpp
r92993 r93144 296 296 } 297 297 298 void RenderFlowThread::repaintRectangleInRegions(const LayoutRect& repaintRect, bool immediate) 299 { 300 for (RenderRegionList::iterator iter = m_regionList.begin(); iter != m_regionList.end(); ++iter) { 301 RenderRegion* region = *iter; 302 303 // We only have to issue a repaint in this region if the region rect intersects the repaint rect. 304 LayoutRect flippedRegionRect(region->regionRect()); 305 flipForWritingMode(flippedRegionRect); // Put the region rect into physical coordinates. 306 307 IntRect clippedRect(flippedRegionRect); 308 clippedRect.intersect(repaintRect); 309 if (clippedRect.isEmpty()) 310 continue; 311 312 // Put the region rect into the region's physical coordinate space. 313 clippedRect.setLocation(region->contentBoxRect().location() + (repaintRect.location() - flippedRegionRect.location())); 314 315 // Now switch to the region's writing mode coordinate space and let it repaint itself. 316 region->flipForWritingMode(clippedRect); 317 region->repaintRectangle(clippedRect, immediate); 318 } 319 } 320 298 321 } // namespace WebCore -
trunk/Source/WebCore/rendering/RenderFlowThread.h
r92993 r93144 89 89 void styleDidChange(StyleDifference, const RenderStyle* oldStyle); 90 90 91 void repaintRectangleInRegions(const LayoutRect&, bool immediate); 92 91 93 private: 92 94 virtual const char* renderName() const { return "RenderFlowThread"; } -
trunk/Source/WebCore/rendering/RenderObject.cpp
r93040 r93144 46 46 #include "RenderDeprecatedFlexibleBox.h" 47 47 #include "RenderFlexibleBox.h" 48 #include "RenderFlowThread.h" 48 49 #include "RenderImage.h" 49 50 #include "RenderImageResourceStyleImage.h" … … 566 567 567 568 ASSERT_NOT_REACHED(); 569 return 0; 570 } 571 572 RenderFlowThread* RenderObject::enclosingRenderFlowThread() const 573 { 574 RenderObject* curr = const_cast<RenderObject*>(this); 575 while (curr) { 576 if (curr->isRenderFlowThread()) 577 return toRenderFlowThread(curr); 578 curr = curr->parent(); 579 } 568 580 return 0; 569 581 } … … 1146 1158 RenderBoxModelObject* RenderObject::containerForRepaint() const 1147 1159 { 1160 RenderView* v = view(); 1161 if (!v) 1162 return 0; 1163 1164 RenderBoxModelObject* repaintContainer = 0; 1165 1148 1166 #if USE(ACCELERATED_COMPOSITING) 1149 if (RenderView* v = view()) { 1150 if (v->usesCompositing()) { 1151 RenderLayer* compLayer = enclosingLayer()->enclosingCompositingLayer(); 1152 return compLayer ? compLayer->renderer() : 0; 1153 } 1167 if (v->usesCompositing()) { 1168 RenderLayer* compLayer = enclosingLayer()->enclosingCompositingLayer(); 1169 if (compLayer) 1170 repaintContainer = compLayer->renderer(); 1154 1171 } 1155 1172 #endif 1156 // Do root-relative repaint. 1157 return 0; 1173 1174 // If we have a flow thread, then we need to do individual repaints within the RenderRegions instead. 1175 // Return the flow thread as a repaint container in order to create a chokepoint that allows us to change 1176 // repainting to do individual region repaints. 1177 // FIXME: Composited layers inside a flow thread will bypass this mechanism and will malfunction. It's not 1178 // clear how to address this problem for composited descendants of a RenderFlowThread. 1179 if (!repaintContainer && v->hasRenderFlowThreads()) 1180 repaintContainer = enclosingRenderFlowThread(); 1181 return repaintContainer; 1158 1182 } 1159 1183 … … 1164 1188 return; 1165 1189 } 1190 1191 if (repaintContainer->isRenderFlowThread()) 1192 return toRenderFlowThread(repaintContainer)->repaintRectangleInRegions(r, immediate); 1166 1193 1167 1194 #if USE(ACCELERATED_COMPOSITING) -
trunk/Source/WebCore/rendering/RenderObject.h
r92888 r93144 56 56 class RenderInline; 57 57 class RenderBlock; 58 class RenderFlow ;58 class RenderFlowThread; 59 59 class RenderLayer; 60 60 class RenderTheme; … … 185 185 RenderBox* enclosingBox() const; 186 186 RenderBoxModelObject* enclosingBoxModelObject() const; 187 188 // Function to return our enclosing flow thread if we are contained inside one. 189 RenderFlowThread* enclosingRenderFlowThread() const; 187 190 188 191 virtual bool isEmpty() const { return firstChild() == 0; } -
trunk/Source/WebCore/rendering/RenderView.cpp
r92969 r93144 53 53 , m_pageLogicalHeight(0) 54 54 , m_pageLogicalHeightChanged(false) 55 , m_hasRenderFlowThreads(false) 55 56 , m_layoutState(0) 56 57 , m_layoutStateDisableCount(0) … … 819 820 flowRenderer->setStyle(RenderFlowThread::createFlowThreadStyle(style())); 820 821 addChild(flowRenderer); 821 822 m_hasRenderFlowThreads = true; 822 823 return flowRenderer; 823 824 } -
trunk/Source/WebCore/rendering/RenderView.h
r92969 r93144 168 168 169 169 RenderFlowThread* renderFlowThreadWithName(const AtomicString& flowThread); 170 bool hasRenderFlowThreads() const { return m_hasRenderFlowThreads; } 170 171 171 172 void styleDidChange(StyleDifference, const RenderStyle* oldStyle); … … 246 247 unsigned m_pageLogicalHeight; 247 248 bool m_pageLogicalHeightChanged; 249 bool m_hasRenderFlowThreads; 248 250 LayoutState* m_layoutState; 249 251 unsigned m_layoutStateDisableCount;
Note: See TracChangeset
for help on using the changeset viewer.