Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Side by Side Diff: Source/core/rendering/RenderFlowThread.cpp

Issue 757933003: Get rid of a lot of special code for RenderFlowThread invalidation. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Ahemify and pxify tests. Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/rendering/RenderFlowThread.h ('k') | Source/core/rendering/RenderMultiColumnSet.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved. 2 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above 8 * 1. Redistributions of source code must retain the above
9 * copyright notice, this list of conditions and the following 9 * copyright notice, this list of conditions and the following
10 * disclaimer. 10 * disclaimer.
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 115
116 previousRegionLogicalHeight = regionLogicalHeight; 116 previousRegionLogicalHeight = regionLogicalHeight;
117 } 117 }
118 } 118 }
119 } 119 }
120 120
121 updateLogicalWidth(); // Called to get the maximum logical width for the col umnSet. 121 updateLogicalWidth(); // Called to get the maximum logical width for the col umnSet.
122 updateRegionsFlowThreadPortionRect(); 122 updateRegionsFlowThreadPortionRect();
123 } 123 }
124 124
125 void RenderFlowThread::mapRectToPaintInvalidationBacking(const RenderLayerModelO bject* paintInvalidationContainer, LayoutRect& rect, const PaintInvalidationStat e* paintInvalidationState) const
126 {
127 ASSERT(paintInvalidationContainer != this); // A flow thread should never be an invalidation container.
128 rect = fragmentsBoundingBox(rect);
129 RenderBlockFlow::mapRectToPaintInvalidationBacking(paintInvalidationContaine r, rect, paintInvalidationState);
130 }
131
125 void RenderFlowThread::layout() 132 void RenderFlowThread::layout()
126 { 133 {
127 m_pageLogicalSizeChanged = m_regionsInvalidated && everHadLayout(); 134 m_pageLogicalSizeChanged = m_regionsInvalidated && everHadLayout();
128 135
129 CurrentRenderFlowThreadMaintainer currentFlowThreadSetter(this); 136 CurrentRenderFlowThreadMaintainer currentFlowThreadSetter(this);
130 RenderBlockFlow::layout(); 137 RenderBlockFlow::layout();
131 138
132 m_pageLogicalSizeChanged = false; 139 m_pageLogicalSizeChanged = false;
133 } 140 }
134 141
135 void RenderFlowThread::computeLogicalHeight(LayoutUnit, LayoutUnit logicalTop, L ogicalExtentComputedValues& computedValues) const 142 void RenderFlowThread::computeLogicalHeight(LayoutUnit, LayoutUnit logicalTop, L ogicalExtentComputedValues& computedValues) const
136 { 143 {
137 computedValues.m_position = logicalTop; 144 computedValues.m_position = logicalTop;
138 computedValues.m_extent = 0; 145 computedValues.m_extent = 0;
139 146
140 for (RenderMultiColumnSetList::const_iterator iter = m_multiColumnSetList.be gin(); iter != m_multiColumnSetList.end(); ++iter) { 147 for (RenderMultiColumnSetList::const_iterator iter = m_multiColumnSetList.be gin(); iter != m_multiColumnSetList.end(); ++iter) {
141 RenderMultiColumnSet* columnSet = *iter; 148 RenderMultiColumnSet* columnSet = *iter;
142 computedValues.m_extent += columnSet->logicalHeightInFlowThread(); 149 computedValues.m_extent += columnSet->logicalHeightInFlowThread();
143 } 150 }
144 } 151 }
145 152
146 bool RenderFlowThread::nodeAtPoint(const HitTestRequest& request, HitTestResult& result, const HitTestLocation& locationInContainer, const LayoutPoint& accumula tedOffset, HitTestAction hitTestAction) 153 bool RenderFlowThread::nodeAtPoint(const HitTestRequest& request, HitTestResult& result, const HitTestLocation& locationInContainer, const LayoutPoint& accumula tedOffset, HitTestAction hitTestAction)
147 { 154 {
148 if (hitTestAction == HitTestBlockBackground) 155 if (hitTestAction == HitTestBlockBackground)
149 return false; 156 return false;
150 return RenderBlockFlow::nodeAtPoint(request, result, locationInContainer, ac cumulatedOffset, hitTestAction); 157 return RenderBlockFlow::nodeAtPoint(request, result, locationInContainer, ac cumulatedOffset, hitTestAction);
151 } 158 }
152 159
153 bool RenderFlowThread::shouldIssuePaintInvalidations(const LayoutRect& r) const
154 {
155 if (view()->document().printing() || r.isEmpty())
156 return false;
157
158 return true;
159 }
160
161 void RenderFlowThread::paintInvalidationRectangleInRegions(const LayoutRect& pai ntInvalidationRect) const
162 {
163 if (!shouldIssuePaintInvalidations(paintInvalidationRect) || !hasValidRegion Info())
164 return;
165
166 // We can't use currentFlowThread as it is possible to have interleaved flow threads and the wrong one could be used.
167 // Let each columnSet figure out the proper enclosing flow thread.
168 CurrentRenderFlowThreadDisabler disabler(view());
169
170 for (RenderMultiColumnSetList::const_iterator iter = m_multiColumnSetList.be gin(); iter != m_multiColumnSetList.end(); ++iter) {
171 RenderMultiColumnSet* columnSet = *iter;
172
173 columnSet->paintInvalidationForFlowThreadContent(paintInvalidationRect);
174 }
175 }
176
177 LayoutUnit RenderFlowThread::pageLogicalHeightForOffset(LayoutUnit offset) 160 LayoutUnit RenderFlowThread::pageLogicalHeightForOffset(LayoutUnit offset)
178 { 161 {
179 RenderMultiColumnSet* columnSet = columnSetAtBlockOffset(offset); 162 RenderMultiColumnSet* columnSet = columnSetAtBlockOffset(offset);
180 if (!columnSet) 163 if (!columnSet)
181 return 0; 164 return 0;
182 165
183 return columnSet->pageLogicalHeight(); 166 return columnSet->pageLogicalHeight();
184 } 167 }
185 168
186 LayoutUnit RenderFlowThread::pageRemainingLogicalHeightForOffset(LayoutUnit offs et, PageBoundaryRule pageBoundaryRule) 169 LayoutUnit RenderFlowThread::pageRemainingLogicalHeightForOffset(LayoutUnit offs et, PageBoundaryRule pageBoundaryRule)
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 void RenderFlowThread::collectLayerFragments(LayerFragments& layerFragments, con st LayoutRect& layerBoundingBox, const LayoutRect& dirtyRect) 223 void RenderFlowThread::collectLayerFragments(LayerFragments& layerFragments, con st LayoutRect& layerBoundingBox, const LayoutRect& dirtyRect)
241 { 224 {
242 ASSERT(!m_regionsInvalidated); 225 ASSERT(!m_regionsInvalidated);
243 226
244 for (RenderMultiColumnSetList::const_iterator iter = m_multiColumnSetList.be gin(); iter != m_multiColumnSetList.end(); ++iter) { 227 for (RenderMultiColumnSetList::const_iterator iter = m_multiColumnSetList.be gin(); iter != m_multiColumnSetList.end(); ++iter) {
245 RenderMultiColumnSet* columnSet = *iter; 228 RenderMultiColumnSet* columnSet = *iter;
246 columnSet->collectLayerFragments(layerFragments, layerBoundingBox, dirty Rect); 229 columnSet->collectLayerFragments(layerFragments, layerBoundingBox, dirty Rect);
247 } 230 }
248 } 231 }
249 232
250 LayoutRect RenderFlowThread::fragmentsBoundingBox(const LayoutRect& layerBoundin gBox) 233 LayoutRect RenderFlowThread::fragmentsBoundingBox(const LayoutRect& layerBoundin gBox) const
251 { 234 {
252 ASSERT(!m_regionsInvalidated); 235 ASSERT(!m_regionsInvalidated);
253 236
254 LayoutRect result; 237 LayoutRect result;
255 for (RenderMultiColumnSetList::const_iterator iter = m_multiColumnSetList.be gin(); iter != m_multiColumnSetList.end(); ++iter) { 238 for (RenderMultiColumnSetList::const_iterator iter = m_multiColumnSetList.be gin(); iter != m_multiColumnSetList.end(); ++iter) {
256 RenderMultiColumnSet* columnSet = *iter; 239 RenderMultiColumnSet* columnSet = *iter;
257 LayerFragments fragments; 240 LayerFragments fragments;
258 columnSet->collectLayerFragments(fragments, layerBoundingBox, PaintInfo: :infiniteRect()); 241 columnSet->collectLayerFragments(fragments, layerBoundingBox, PaintInfo: :infiniteRect());
259 for (size_t i = 0; i < fragments.size(); ++i) { 242 for (size_t i = 0; i < fragments.size(); ++i) {
260 const LayerFragment& fragment = fragments.at(i); 243 const LayerFragment& fragment = fragments.at(i);
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 { 375 {
393 if (!m_renderFlowThread) 376 if (!m_renderFlowThread)
394 return; 377 return;
395 RenderView* view = m_renderFlowThread->view(); 378 RenderView* view = m_renderFlowThread->view();
396 ASSERT(view->flowThreadController()->currentRenderFlowThread() == m_renderFl owThread); 379 ASSERT(view->flowThreadController()->currentRenderFlowThread() == m_renderFl owThread);
397 view->flowThreadController()->setCurrentRenderFlowThread(m_previousRenderFlo wThread); 380 view->flowThreadController()->setCurrentRenderFlowThread(m_previousRenderFlo wThread);
398 } 381 }
399 382
400 383
401 } // namespace blink 384 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderFlowThread.h ('k') | Source/core/rendering/RenderMultiColumnSet.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698