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

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

Issue 616453002: Remove unneeded flow thread awareness from accumulateOffsetTowardsAncestor(). (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 2 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
« no previous file with comments | « no previous file | no next file » | 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) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
3 * 3 *
4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation.
5 * 5 *
6 * Other contributors: 6 * Other contributors:
7 * Robert O'Callahan <roc+@cs.cmu.edu> 7 * Robert O'Callahan <roc+@cs.cmu.edu>
8 * David Baron <dbaron@fas.harvard.edu> 8 * David Baron <dbaron@fas.harvard.edu>
9 * Christian Biesinger <cbiesinger@web.de> 9 * Christian Biesinger <cbiesinger@web.de>
10 * Randall Jesup <rjesup@wgate.com> 10 * Randall Jesup <rjesup@wgate.com>
(...skipping 1323 matching lines...) Expand 10 before | Expand all | Expand 10 after
1334 } 1334 }
1335 1335
1336 // Returns the layer reached on the walk up towards the ancestor. 1336 // Returns the layer reached on the walk up towards the ancestor.
1337 static inline const RenderLayer* accumulateOffsetTowardsAncestor(const RenderLay er* layer, const RenderLayer* ancestorLayer, LayoutPoint& location) 1337 static inline const RenderLayer* accumulateOffsetTowardsAncestor(const RenderLay er* layer, const RenderLayer* ancestorLayer, LayoutPoint& location)
1338 { 1338 {
1339 ASSERT(ancestorLayer != layer); 1339 ASSERT(ancestorLayer != layer);
1340 1340
1341 const RenderLayerModelObject* renderer = layer->renderer(); 1341 const RenderLayerModelObject* renderer = layer->renderer();
1342 EPosition position = renderer->style()->position(); 1342 EPosition position = renderer->style()->position();
1343 1343
1344 // FIXME: Special casing RenderFlowThread so much for fixed positioning here is not great.
1345 RenderFlowThread* fixedFlowThreadContainer = position == FixedPosition ? ren derer->flowThreadContainingBlock() : 0;
1346 if (fixedFlowThreadContainer && !fixedFlowThreadContainer->isOutOfFlowPositi oned())
1347 fixedFlowThreadContainer = 0;
1348
1349 // FIXME: Positioning of out-of-flow(fixed, absolute) elements collected in a RenderFlowThread 1344 // FIXME: Positioning of out-of-flow(fixed, absolute) elements collected in a RenderFlowThread
1350 // may need to be revisited in a future patch. 1345 // may need to be revisited in a future patch.
1351 // If the fixed renderer is inside a RenderFlowThread, we should not compute location using localToAbsolute, 1346 // If the fixed renderer is inside a RenderFlowThread, we should not compute location using localToAbsolute,
1352 // since localToAbsolute maps the coordinates from flow thread to regions co ordinates and regions can be 1347 // since localToAbsolute maps the coordinates from flow thread to regions co ordinates and regions can be
1353 // positioned in a completely different place in the viewport (RenderView). 1348 // positioned in a completely different place in the viewport (RenderView).
1354 if (position == FixedPosition && !fixedFlowThreadContainer && (!ancestorLaye r || ancestorLayer == renderer->view()->layer())) { 1349 if (position == FixedPosition && (!ancestorLayer || ancestorLayer == rendere r->view()->layer())) {
1355 // If the fixed layer's container is the root, just add in the offset of the view. We can obtain this by calling 1350 // If the fixed layer's container is the root, just add in the offset of the view. We can obtain this by calling
1356 // localToAbsolute() on the RenderView. 1351 // localToAbsolute() on the RenderView.
1357 FloatPoint absPos = renderer->localToAbsolute(FloatPoint(), IsFixed); 1352 FloatPoint absPos = renderer->localToAbsolute(FloatPoint(), IsFixed);
1358 location += LayoutSize(absPos.x(), absPos.y()); 1353 location += LayoutSize(absPos.x(), absPos.y());
1359 return ancestorLayer; 1354 return ancestorLayer;
1360 } 1355 }
1361 1356
1362 // For the fixed positioned elements inside a render flow thread, we should also skip the code path below 1357 // For the fixed positioned elements inside a render flow thread, we should also skip the code path below
1363 // Otherwise, for the case of ancestorLayer == rootLayer and fixed positione d element child of a transformed 1358 // Otherwise, for the case of ancestorLayer == rootLayer and fixed positione d element child of a transformed
1364 // element in render flow thread, we will hit the fixed positioned container before hitting the ancestor layer. 1359 // element in render flow thread, we will hit the fixed positioned container before hitting the ancestor layer.
1365 if (position == FixedPosition && !fixedFlowThreadContainer) { 1360 if (position == FixedPosition) {
1366 // For a fixed layers, we need to walk up to the root to see if there's a fixed position container 1361 // For a fixed layers, we need to walk up to the root to see if there's a fixed position container
1367 // (e.g. a transformed layer). It's an error to call convertToLayerCoord s() across a layer with a transform, 1362 // (e.g. a transformed layer). It's an error to call convertToLayerCoord s() across a layer with a transform,
1368 // so we should always find the ancestor at or before we find the fixed position container. 1363 // so we should always find the ancestor at or before we find the fixed position container.
1369 RenderLayer* fixedPositionContainerLayer = 0; 1364 RenderLayer* fixedPositionContainerLayer = 0;
1370 bool foundAncestor = false; 1365 bool foundAncestor = false;
1371 for (RenderLayer* currLayer = layer->parent(); currLayer; currLayer = cu rrLayer->parent()) { 1366 for (RenderLayer* currLayer = layer->parent(); currLayer; currLayer = cu rrLayer->parent()) {
1372 if (currLayer == ancestorLayer) 1367 if (currLayer == ancestorLayer)
1373 foundAncestor = true; 1368 foundAncestor = true;
1374 1369
1375 if (isFixedPositionedContainer(currLayer)) { 1370 if (isFixedPositionedContainer(currLayer)) {
(...skipping 2320 matching lines...) Expand 10 before | Expand all | Expand 10 after
3696 } 3691 }
3697 } 3692 }
3698 3693
3699 void showLayerTree(const blink::RenderObject* renderer) 3694 void showLayerTree(const blink::RenderObject* renderer)
3700 { 3695 {
3701 if (!renderer) 3696 if (!renderer)
3702 return; 3697 return;
3703 showLayerTree(renderer->enclosingLayer()); 3698 showLayerTree(renderer->enclosingLayer());
3704 } 3699 }
3705 #endif 3700 #endif
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698