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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.cpp

Issue 2699593006: Refactor to remove need for infiniteIntRect when computing rects in pre-paint (Closed)
Patch Set: none Created 3 years, 10 months 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "platform/graphics/paint/GeometryMapper.h" 5 #include "platform/graphics/paint/GeometryMapper.h"
6 6
7 #include "platform/RuntimeEnabledFeatures.h" 7 #include "platform/RuntimeEnabledFeatures.h"
8 #include "platform/geometry/LayoutRect.h" 8 #include "platform/geometry/LayoutRect.h"
9 9
10 namespace blink { 10 namespace blink {
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 continue; 142 continue;
143 143
144 PropertyTreeState transformAndClipState(effect->localTransformSpace(), 144 PropertyTreeState transformAndClipState(effect->localTransformSpace(),
145 effect->outputClip(), nullptr); 145 effect->outputClip(), nullptr);
146 bool hasRadius = result.hasRadius(); 146 bool hasRadius = result.hasRadius();
147 result = sourceToDestinationVisualRectInternal( 147 result = sourceToDestinationVisualRectInternal(
148 result.rect(), lastTransformAndClipState, transformAndClipState, 148 result.rect(), lastTransformAndClipState, transformAndClipState,
149 success); 149 success);
150 hasRadius |= result.hasRadius(); 150 hasRadius |= result.hasRadius();
151 if (!success) { 151 if (!success) {
152 result.setHasRadius(hasRadius); 152 if (hasRadius)
153 result.setHasRadius();
153 return result; 154 return result;
154 } 155 }
155 156
156 result = effect->mapRect(result.rect()); 157 result = effect->mapRect(result.rect());
157 result.setHasRadius(hasRadius); 158 if (hasRadius)
159 result.setHasRadius();
158 lastTransformAndClipState = transformAndClipState; 160 lastTransformAndClipState = transformAndClipState;
159 } 161 }
160 162
161 PropertyTreeState finalTransformAndClipState(ancestorState.transform(), 163 PropertyTreeState finalTransformAndClipState(ancestorState.transform(),
162 ancestorState.clip(), nullptr); 164 ancestorState.clip(), nullptr);
163 bool hasRadius = result.hasRadius(); 165 bool hasRadius = result.hasRadius();
164 result = sourceToDestinationVisualRectInternal( 166 result = sourceToDestinationVisualRectInternal(
165 result.rect(), lastTransformAndClipState, finalTransformAndClipState, 167 result.rect(), lastTransformAndClipState, finalTransformAndClipState,
166 success); 168 success);
167 result.setHasRadius(hasRadius || result.hasRadius()); 169 if (hasRadius || result.hasRadius())
170 result.setHasRadius();
168 return result; 171 return result;
169 } 172 }
170 173
171 FloatRect GeometryMapper::localToAncestorRect( 174 FloatRect GeometryMapper::localToAncestorRect(
172 const FloatRect& rect, 175 const FloatRect& rect,
173 const TransformPaintPropertyNode* localTransformNode, 176 const TransformPaintPropertyNode* localTransformNode,
174 const TransformPaintPropertyNode* ancestorTransformNode) { 177 const TransformPaintPropertyNode* ancestorTransformNode) {
175 bool success = false; 178 bool success = false;
176 FloatRect result = localToAncestorRectInternal( 179 FloatRect result = localToAncestorRectInternal(
177 rect, localTransformNode, ancestorTransformNode, success); 180 rect, localTransformNode, ancestorTransformNode, success);
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 for (auto it = intermediateNodes.rbegin(); it != intermediateNodes.rend(); 344 for (auto it = intermediateNodes.rbegin(); it != intermediateNodes.rend();
342 ++it) { 345 ++it) {
343 success = false; 346 success = false;
344 const TransformationMatrix& transformMatrix = localToAncestorMatrixInternal( 347 const TransformationMatrix& transformMatrix = localToAncestorMatrixInternal(
345 (*it)->localTransformSpace(), ancestorTransform, success); 348 (*it)->localTransformSpace(), ancestorTransform, success);
346 if (!success) 349 if (!success)
347 return clip; 350 return clip;
348 FloatRect mappedRect = transformMatrix.mapRect((*it)->clipRect().rect()); 351 FloatRect mappedRect = transformMatrix.mapRect((*it)->clipRect().rect());
349 clip.intersect(mappedRect); 352 clip.intersect(mappedRect);
350 if ((*it)->clipRect().isRounded()) 353 if ((*it)->clipRect().isRounded())
351 clip.setHasRadius(true); 354 clip.setHasRadius();
352 clipCache.set(*it, clip); 355 clipCache.set(*it, clip);
353 } 356 }
354 357
355 success = true; 358 success = true;
356 return clipCache.find(descendant)->value; 359 return clipCache.find(descendant)->value;
357 } 360 }
358 361
359 const TransformationMatrix& GeometryMapper::localToAncestorMatrix( 362 const TransformationMatrix& GeometryMapper::localToAncestorMatrix(
360 const TransformPaintPropertyNode* localTransformNode, 363 const TransformPaintPropertyNode* localTransformNode,
361 const TransformPaintPropertyNode* ancestorTransformNode) { 364 const TransformPaintPropertyNode* ancestorTransformNode) {
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 const TransformPaintPropertyNode*, 470 const TransformPaintPropertyNode*,
468 const TransformPaintPropertyNode*); 471 const TransformPaintPropertyNode*);
469 template const ClipPaintPropertyNode* GeometryMapper::lowestCommonAncestor( 472 template const ClipPaintPropertyNode* GeometryMapper::lowestCommonAncestor(
470 const ClipPaintPropertyNode*, 473 const ClipPaintPropertyNode*,
471 const ClipPaintPropertyNode*); 474 const ClipPaintPropertyNode*);
472 template const ScrollPaintPropertyNode* GeometryMapper::lowestCommonAncestor( 475 template const ScrollPaintPropertyNode* GeometryMapper::lowestCommonAncestor(
473 const ScrollPaintPropertyNode*, 476 const ScrollPaintPropertyNode*,
474 const ScrollPaintPropertyNode*); 477 const ScrollPaintPropertyNode*);
475 478
476 } // namespace blink 479 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698