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

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp

Issue 2692853016: Change PaintLayer::m_layoutObject to a reference. (Closed)
Patch Set: Added TODO 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 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com)
5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com)
6 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
7 * Copyright (C) 2010 Google Inc. All rights reserved. 7 * Copyright (C) 2010 Google Inc. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 202
203 // A continuation of this LayoutObject should be destroyed at subclasses. 203 // A continuation of this LayoutObject should be destroyed at subclasses.
204 ASSERT(!continuation()); 204 ASSERT(!continuation());
205 205
206 if (isPositioned()) { 206 if (isPositioned()) {
207 // Don't use this->view() because the document's layoutView has been set to 207 // Don't use this->view() because the document's layoutView has been set to
208 // 0 during destruction. 208 // 0 during destruction.
209 if (LocalFrame* frame = this->frame()) { 209 if (LocalFrame* frame = this->frame()) {
210 if (FrameView* frameView = frame->view()) { 210 if (FrameView* frameView = frame->view()) {
211 if (style()->hasViewportConstrainedPosition()) 211 if (style()->hasViewportConstrainedPosition())
212 frameView->removeViewportConstrainedObject(this); 212 frameView->removeViewportConstrainedObject(*this);
213 } 213 }
214 } 214 }
215 } 215 }
216 216
217 LayoutObject::willBeDestroyed(); 217 LayoutObject::willBeDestroyed();
218 218
219 destroyLayer(); 219 destroyLayer();
220 } 220 }
221 221
222 void LayoutBoxModelObject::styleWillChange(StyleDifference diff, 222 void LayoutBoxModelObject::styleWillChange(StyleDifference diff,
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 // position constraints then. 398 // position constraints then.
399 if (layer()) 399 if (layer())
400 layer()->setNeedsCompositingInputsUpdate(); 400 layer()->setNeedsCompositingInputsUpdate();
401 401
402 // TODO(pdr): When slimming paint v2 is enabled, we will need to 402 // TODO(pdr): When slimming paint v2 is enabled, we will need to
403 // invalidate the scroll paint property subtree for this so main thread 403 // invalidate the scroll paint property subtree for this so main thread
404 // scroll reasons are recomputed. 404 // scroll reasons are recomputed.
405 } else { 405 } else {
406 // This may get re-added to viewport constrained objects if the object 406 // This may get re-added to viewport constrained objects if the object
407 // went from sticky to fixed. 407 // went from sticky to fixed.
408 frameView->removeViewportConstrainedObject(this); 408 frameView->removeViewportConstrainedObject(*this);
409 409
410 // Remove sticky constraints for this layer. 410 // Remove sticky constraints for this layer.
411 if (layer()) { 411 if (layer()) {
412 DisableCompositingQueryAsserts disabler; 412 DisableCompositingQueryAsserts disabler;
413 if (const PaintLayer* ancestorOverflowLayer = 413 if (const PaintLayer* ancestorOverflowLayer =
414 layer()->ancestorOverflowLayer()) { 414 layer()->ancestorOverflowLayer()) {
415 if (PaintLayerScrollableArea* scrollableArea = 415 if (PaintLayerScrollableArea* scrollableArea =
416 ancestorOverflowLayer->getScrollableArea()) 416 ancestorOverflowLayer->getScrollableArea())
417 scrollableArea->invalidateStickyConstraintsFor(layer()); 417 scrollableArea->invalidateStickyConstraintsFor(layer());
418 } 418 }
419 } 419 }
420 420
421 // TODO(pdr): When slimming paint v2 is enabled, we will need to 421 // TODO(pdr): When slimming paint v2 is enabled, we will need to
422 // invalidate the scroll paint property subtree for this so main thread 422 // invalidate the scroll paint property subtree for this so main thread
423 // scroll reasons are recomputed. 423 // scroll reasons are recomputed.
424 } 424 }
425 } 425 }
426 426
427 if (newStyleIsViewportConstained != oldStyleIsViewportConstrained) { 427 if (newStyleIsViewportConstained != oldStyleIsViewportConstrained) {
428 if (newStyleIsViewportConstained && layer()) 428 if (newStyleIsViewportConstained && layer())
429 frameView->addViewportConstrainedObject(this); 429 frameView->addViewportConstrainedObject(*this);
430 else 430 else
431 frameView->removeViewportConstrainedObject(this); 431 frameView->removeViewportConstrainedObject(*this);
432 } 432 }
433 } 433 }
434 } 434 }
435 435
436 void LayoutBoxModelObject::invalidateStickyConstraints() { 436 void LayoutBoxModelObject::invalidateStickyConstraints() {
437 PaintLayer* enclosing = enclosingLayer(); 437 PaintLayer* enclosing = enclosingLayer();
438 438
439 if (PaintLayerScrollableArea* scrollableArea = 439 if (PaintLayerScrollableArea* scrollableArea =
440 enclosing->getScrollableArea()) { 440 enclosing->getScrollableArea()) {
441 scrollableArea->invalidateAllStickyConstraints(); 441 scrollableArea->invalidateAllStickyConstraints();
442 // If this object doesn't have a layer and its enclosing layer is a scroller 442 // If this object doesn't have a layer and its enclosing layer is a scroller
443 // then we don't need to invalidate the sticky constraints on the ancestor 443 // then we don't need to invalidate the sticky constraints on the ancestor
444 // scroller because the enclosing scroller won't have changed size. 444 // scroller because the enclosing scroller won't have changed size.
445 if (!layer()) 445 if (!layer())
446 return; 446 return;
447 } 447 }
448 448
449 // This intentionally uses the stale ancestor overflow layer compositing input 449 // This intentionally uses the stale ancestor overflow layer compositing input
450 // as if we have saved constraints for this layer they were saved in the 450 // as if we have saved constraints for this layer they were saved in the
451 // previous frame. 451 // previous frame.
452 DisableCompositingQueryAsserts disabler; 452 DisableCompositingQueryAsserts disabler;
453 if (const PaintLayer* ancestorOverflowLayer = 453 if (const PaintLayer* ancestorOverflowLayer =
454 enclosing->ancestorOverflowLayer()) 454 enclosing->ancestorOverflowLayer())
455 ancestorOverflowLayer->getScrollableArea() 455 ancestorOverflowLayer->getScrollableArea()
456 ->invalidateAllStickyConstraints(); 456 ->invalidateAllStickyConstraints();
457 } 457 }
458 458
459 void LayoutBoxModelObject::createLayer() { 459 void LayoutBoxModelObject::createLayer() {
460 ASSERT(!m_layer); 460 ASSERT(!m_layer);
461 m_layer = WTF::makeUnique<PaintLayer>(this); 461 m_layer = WTF::makeUnique<PaintLayer>(*this);
462 setHasLayer(true); 462 setHasLayer(true);
463 m_layer->insertOnlyThisLayerAfterStyleChange(); 463 m_layer->insertOnlyThisLayerAfterStyleChange();
464 } 464 }
465 465
466 void LayoutBoxModelObject::destroyLayer() { 466 void LayoutBoxModelObject::destroyLayer() {
467 setHasLayer(false); 467 setHasLayer(false);
468 m_layer = nullptr; 468 m_layer = nullptr;
469 } 469 }
470 470
471 bool LayoutBoxModelObject::hasSelfPaintingLayer() const { 471 bool LayoutBoxModelObject::hasSelfPaintingLayer() const {
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 MapCoordinatesFlags flags = 0; 804 MapCoordinatesFlags flags = 0;
805 skippedContainersOffset = 805 skippedContainersOffset =
806 toFloatSize(locationContainer 806 toFloatSize(locationContainer
807 ->localToAncestorQuadWithoutTransforms( 807 ->localToAncestorQuadWithoutTransforms(
808 FloatQuad(), containingBlock, flags) 808 FloatQuad(), containingBlock, flags)
809 .boundingBox() 809 .boundingBox()
810 .location()); 810 .location());
811 LayoutBox* scrollAncestor = 811 LayoutBox* scrollAncestor =
812 layer()->ancestorOverflowLayer()->isRootLayer() 812 layer()->ancestorOverflowLayer()->isRootLayer()
813 ? nullptr 813 ? nullptr
814 : toLayoutBox(layer()->ancestorOverflowLayer()->layoutObject()); 814 : &toLayoutBox(layer()->ancestorOverflowLayer()->layoutObject());
815 815
816 LayoutUnit maxContainerWidth = 816 LayoutUnit maxContainerWidth =
817 containingBlock->isLayoutView() 817 containingBlock->isLayoutView()
818 ? containingBlock->logicalWidth() 818 ? containingBlock->logicalWidth()
819 : containingBlock->containingBlockLogicalWidthForContent(); 819 : containingBlock->containingBlockLogicalWidthForContent();
820 // Sticky positioned element ignore any override logical width on the 820 // Sticky positioned element ignore any override logical width on the
821 // containing block, as they don't call containingBlockLogicalWidthForContent. 821 // containing block, as they don't call containingBlockLogicalWidthForContent.
822 // It's unclear whether this is totally fine. 822 // It's unclear whether this is totally fine.
823 // Compute the container-relative area within which the sticky element is 823 // Compute the container-relative area within which the sticky element is
824 // allowed to move. 824 // allowed to move.
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
963 StickyPositionScrollingConstraints::AnchorEdgeBottom); 963 StickyPositionScrollingConstraints::AnchorEdgeBottom);
964 } 964 }
965 scrollableArea->stickyConstraintsMap().set(layer(), constraints); 965 scrollableArea->stickyConstraintsMap().set(layer(), constraints);
966 } 966 }
967 967
968 FloatRect LayoutBoxModelObject::computeStickyConstrainingRect() const { 968 FloatRect LayoutBoxModelObject::computeStickyConstrainingRect() const {
969 if (layer()->ancestorOverflowLayer()->isRootLayer()) 969 if (layer()->ancestorOverflowLayer()->isRootLayer())
970 return view()->frameView()->visibleContentRect(); 970 return view()->frameView()->visibleContentRect();
971 971
972 LayoutBox* enclosingClippingBox = 972 LayoutBox* enclosingClippingBox =
973 toLayoutBox(layer()->ancestorOverflowLayer()->layoutObject()); 973 layer()->ancestorOverflowLayer()->layoutBox();
974 DCHECK(enclosingClippingBox);
974 FloatRect constrainingRect; 975 FloatRect constrainingRect;
975 constrainingRect = 976 constrainingRect =
976 FloatRect(enclosingClippingBox->overflowClipRect(LayoutPoint(DoublePoint( 977 FloatRect(enclosingClippingBox->overflowClipRect(LayoutPoint(DoublePoint(
977 enclosingClippingBox->getScrollableArea()->scrollPosition())))); 978 enclosingClippingBox->getScrollableArea()->scrollPosition()))));
978 constrainingRect.move( 979 constrainingRect.move(
979 -enclosingClippingBox->borderLeft() + enclosingClippingBox->paddingLeft(), 980 -enclosingClippingBox->borderLeft() + enclosingClippingBox->paddingLeft(),
980 -enclosingClippingBox->borderTop() + enclosingClippingBox->paddingTop()); 981 -enclosingClippingBox->borderTop() + enclosingClippingBox->paddingTop());
981 constrainingRect.contract( 982 constrainingRect.contract(
982 FloatSize(enclosingClippingBox->paddingLeft() + 983 FloatSize(enclosingClippingBox->paddingLeft() +
983 enclosingClippingBox->paddingRight(), 984 enclosingClippingBox->paddingRight(),
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
1367 if (rootElementStyle->hasBackground()) 1368 if (rootElementStyle->hasBackground())
1368 return false; 1369 return false;
1369 1370
1370 if (node() != document().firstBodyElement()) 1371 if (node() != document().firstBodyElement())
1371 return false; 1372 return false;
1372 1373
1373 return true; 1374 return true;
1374 } 1375 }
1375 1376
1376 } // namespace blink 1377 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutBox.cpp ('k') | third_party/WebKit/Source/core/layout/LayoutGeometryMap.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698