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

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

Issue 697653004: [CSS Grid Layout] Grid items must set a new formatting context. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Applied additional suggested changes. Created 6 years, 1 month 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/RenderBlock.cpp ('k') | Source/core/rendering/RenderBox.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) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. 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 are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 setChildrenInline(true); 431 setChildrenInline(true);
432 432
433 TextAutosizer::LayoutScope textAutosizerLayoutScope(this); 433 TextAutosizer::LayoutScope textAutosizerLayoutScope(this);
434 434
435 if (childrenInline()) 435 if (childrenInline())
436 layoutInlineChildren(relayoutChildren, m_paintInvalidationLogicalTop, m_ paintInvalidationLogicalBottom, afterEdge); 436 layoutInlineChildren(relayoutChildren, m_paintInvalidationLogicalTop, m_ paintInvalidationLogicalBottom, afterEdge);
437 else 437 else
438 layoutBlockChildren(relayoutChildren, layoutScope, beforeEdge, afterEdge ); 438 layoutBlockChildren(relayoutChildren, layoutScope, beforeEdge, afterEdge );
439 439
440 // Expand our intrinsic height to encompass floats. 440 // Expand our intrinsic height to encompass floats.
441 if (lowestFloatLogicalBottom() > (logicalHeight() - afterEdge) && createsBlo ckFormattingContext()) 441 if (lowestFloatLogicalBottom() > (logicalHeight() - afterEdge) && createsNew FormattingContext())
442 setLogicalHeight(lowestFloatLogicalBottom() + afterEdge); 442 setLogicalHeight(lowestFloatLogicalBottom() + afterEdge);
443 443
444 if (RenderMultiColumnFlowThread* flowThread = multiColumnFlowThread()) { 444 if (RenderMultiColumnFlowThread* flowThread = multiColumnFlowThread()) {
445 if (flowThread->recalculateColumnHeights()) { 445 if (flowThread->recalculateColumnHeights()) {
446 setChildNeedsLayout(MarkOnlyThis); 446 setChildNeedsLayout(MarkOnlyThis);
447 return false; 447 return false;
448 } 448 }
449 } else if (hasColumns()) { 449 } else if (hasColumns()) {
450 OwnPtr<RenderOverflow> savedOverflow = m_overflow.release(); 450 OwnPtr<RenderOverflow> savedOverflow = m_overflow.release();
451 if (childrenInline()) 451 if (childrenInline())
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
922 // See <rdar://problem/8049753>, where float property is applied on a text n ode in a SVG. 922 // See <rdar://problem/8049753>, where float property is applied on a text n ode in a SVG.
923 if (!parent() || !parent()->isRenderBlockFlow()) 923 if (!parent() || !parent()->isRenderBlockFlow())
924 return; 924 return;
925 925
926 // Attempt to locate a previous sibling with overhanging floats. We skip any elements that 926 // Attempt to locate a previous sibling with overhanging floats. We skip any elements that
927 // may have shifted to avoid floats, and any objects whose floats cannot int eract with objects 927 // may have shifted to avoid floats, and any objects whose floats cannot int eract with objects
928 // outside it (i.e. objects that create a new block formatting context). 928 // outside it (i.e. objects that create a new block formatting context).
929 RenderBlockFlow* parentBlockFlow = toRenderBlockFlow(parent()); 929 RenderBlockFlow* parentBlockFlow = toRenderBlockFlow(parent());
930 bool parentHasFloats = false; 930 bool parentHasFloats = false;
931 RenderObject* prev = previousSibling(); 931 RenderObject* prev = previousSibling();
932 while (prev && (!prev->isBox() || !prev->isRenderBlock() || toRenderBlock(pr ev)->avoidsFloats() || toRenderBlock(prev)->createsBlockFormattingContext())) { 932 while (prev && (!prev->isBox() || !prev->isRenderBlock() || toRenderBlock(pr ev)->avoidsFloats() || toRenderBlock(prev)->createsNewFormattingContext())) {
933 if (prev->isFloating()) 933 if (prev->isFloating())
934 parentHasFloats = true; 934 parentHasFloats = true;
935 prev = prev->previousSibling(); 935 prev = prev->previousSibling();
936 } 936 }
937 937
938 // First add in floats from the parent. Self-collapsing blocks let their par ent track any floats that intrude into 938 // First add in floats from the parent. Self-collapsing blocks let their par ent track any floats that intrude into
939 // them (as opposed to floats they contain themselves) so check for those he re too. 939 // them (as opposed to floats they contain themselves) so check for those he re too.
940 LayoutUnit logicalTopOffset = logicalTop(); 940 LayoutUnit logicalTopOffset = logicalTop();
941 bool parentHasIntrudingFloats = !parentHasFloats && (!prev || toRenderBlockF low(prev)->isSelfCollapsingBlock()) && parentBlockFlow->lowestFloatLogicalBottom () > logicalTopOffset; 941 bool parentHasIntrudingFloats = !parentHasFloats && (!prev || toRenderBlockF low(prev)->isSelfCollapsingBlock()) && parentBlockFlow->lowestFloatLogicalBottom () > logicalTopOffset;
942 if (parentHasFloats || parentHasIntrudingFloats) 942 if (parentHasFloats || parentHasIntrudingFloats)
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
1071 : m_canCollapseMarginAfterWithLastChild(true) 1071 : m_canCollapseMarginAfterWithLastChild(true)
1072 , m_atBeforeSideOfBlock(true) 1072 , m_atBeforeSideOfBlock(true)
1073 , m_atAfterSideOfBlock(false) 1073 , m_atAfterSideOfBlock(false)
1074 , m_hasMarginBeforeQuirk(false) 1074 , m_hasMarginBeforeQuirk(false)
1075 , m_hasMarginAfterQuirk(false) 1075 , m_hasMarginAfterQuirk(false)
1076 , m_determinedMarginBeforeQuirk(false) 1076 , m_determinedMarginBeforeQuirk(false)
1077 , m_discardMargin(false) 1077 , m_discardMargin(false)
1078 { 1078 {
1079 RenderStyle* blockStyle = blockFlow->style(); 1079 RenderStyle* blockStyle = blockFlow->style();
1080 ASSERT(blockFlow->isRenderView() || blockFlow->parent()); 1080 ASSERT(blockFlow->isRenderView() || blockFlow->parent());
1081 m_canCollapseWithChildren = !blockFlow->createsBlockFormattingContext() && ! blockFlow->isRenderFlowThread() && !blockFlow->isRenderView(); 1081 m_canCollapseWithChildren = !blockFlow->createsNewFormattingContext() && !bl ockFlow->isRenderFlowThread() && !blockFlow->isRenderView();
1082 1082
1083 m_canCollapseMarginBeforeWithChildren = m_canCollapseWithChildren && !before BorderPadding && blockStyle->marginBeforeCollapse() != MSEPARATE; 1083 m_canCollapseMarginBeforeWithChildren = m_canCollapseWithChildren && !before BorderPadding && blockStyle->marginBeforeCollapse() != MSEPARATE;
1084 1084
1085 // If any height other than auto is specified in CSS, then we don't collapse our bottom 1085 // If any height other than auto is specified in CSS, then we don't collapse our bottom
1086 // margins with our children's margins. To do otherwise would be to risk odd visual 1086 // margins with our children's margins. To do otherwise would be to risk odd visual
1087 // effects when the children overflow out of the parent block and yet still collapse 1087 // effects when the children overflow out of the parent block and yet still collapse
1088 // with it. We also don't collapse if we have any bottom border/padding. 1088 // with it. We also don't collapse if we have any bottom border/padding.
1089 m_canCollapseMarginAfterWithChildren = m_canCollapseWithChildren && !afterBo rderPadding 1089 m_canCollapseMarginAfterWithChildren = m_canCollapseWithChildren && !afterBo rderPadding
1090 && (blockStyle->logicalHeight().isAuto() && !blockStyle->logicalHeight() .value()) && blockStyle->marginAfterCollapse() != MSEPARATE; 1090 && (blockStyle->logicalHeight().isAuto() && !blockStyle->logicalHeight() .value()) && blockStyle->marginAfterCollapse() != MSEPARATE;
1091 1091
(...skipping 677 matching lines...) Expand 10 before | Expand all | Expand 10 after
1769 for (FloatingObjectSetIterator it = floatingObjectSet.begin(); it != end; ++ it) { 1769 for (FloatingObjectSetIterator it = floatingObjectSet.begin(); it != end; ++ it) {
1770 FloatingObject* floatingObject = it->get(); 1770 FloatingObject* floatingObject = it->get();
1771 if (floatingObject->isDescendant()) 1771 if (floatingObject->isDescendant())
1772 addOverflowFromChild(floatingObject->renderer(), IntSize(xPositionFo rFloatIncludingMargin(floatingObject), yPositionForFloatIncludingMargin(floating Object))); 1772 addOverflowFromChild(floatingObject->renderer(), IntSize(xPositionFo rFloatIncludingMargin(floatingObject), yPositionForFloatIncludingMargin(floating Object)));
1773 } 1773 }
1774 } 1774 }
1775 1775
1776 void RenderBlockFlow::computeOverflow(LayoutUnit oldClientAfterEdge, bool recomp uteFloats) 1776 void RenderBlockFlow::computeOverflow(LayoutUnit oldClientAfterEdge, bool recomp uteFloats)
1777 { 1777 {
1778 RenderBlock::computeOverflow(oldClientAfterEdge, recomputeFloats); 1778 RenderBlock::computeOverflow(oldClientAfterEdge, recomputeFloats);
1779 if (!hasColumns() && (recomputeFloats || createsBlockFormattingContext() || hasSelfPaintingLayer())) 1779 if (!hasColumns() && (recomputeFloats || createsNewFormattingContext() || ha sSelfPaintingLayer()))
1780 addOverflowFromFloats(); 1780 addOverflowFromFloats();
1781 } 1781 }
1782 1782
1783 RootInlineBox* RenderBlockFlow::createAndAppendRootInlineBox() 1783 RootInlineBox* RenderBlockFlow::createAndAppendRootInlineBox()
1784 { 1784 {
1785 RootInlineBox* rootBox = createRootInlineBox(); 1785 RootInlineBox* rootBox = createRootInlineBox();
1786 m_lineBoxes.appendLineBox(rootBox); 1786 m_lineBoxes.appendLineBox(rootBox);
1787 1787
1788 return rootBox; 1788 return rootBox;
1789 } 1789 }
(...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after
2469 return false; 2469 return false;
2470 2470
2471 return logicalBottomForFloat(it->get()) > logicalHeight(); 2471 return logicalBottomForFloat(it->get()) > logicalHeight();
2472 } 2472 }
2473 2473
2474 void RenderBlockFlow::addIntrudingFloats(RenderBlockFlow* prev, LayoutUnit logic alLeftOffset, LayoutUnit logicalTopOffset) 2474 void RenderBlockFlow::addIntrudingFloats(RenderBlockFlow* prev, LayoutUnit logic alLeftOffset, LayoutUnit logicalTopOffset)
2475 { 2475 {
2476 ASSERT(!avoidsFloats()); 2476 ASSERT(!avoidsFloats());
2477 2477
2478 // If we create our own block formatting context then our contents don't int eract with floats outside it, even those from our parent. 2478 // If we create our own block formatting context then our contents don't int eract with floats outside it, even those from our parent.
2479 if (createsBlockFormattingContext()) 2479 if (createsNewFormattingContext())
2480 return; 2480 return;
2481 2481
2482 // If the parent or previous sibling doesn't have any floats to add, don't b other. 2482 // If the parent or previous sibling doesn't have any floats to add, don't b other.
2483 if (!prev->m_floatingObjects) 2483 if (!prev->m_floatingObjects)
2484 return; 2484 return;
2485 2485
2486 logicalLeftOffset += marginLogicalLeft(); 2486 logicalLeftOffset += marginLogicalLeft();
2487 2487
2488 const FloatingObjectSet& prevSet = prev->m_floatingObjects->set(); 2488 const FloatingObjectSet& prevSet = prev->m_floatingObjects->set();
2489 FloatingObjectSetIterator prevEnd = prevSet.end(); 2489 FloatingObjectSetIterator prevEnd = prevSet.end();
(...skipping 16 matching lines...) Expand all
2506 2506
2507 m_floatingObjects->add(floatingObject->copyToNewContainer(offset )); 2507 m_floatingObjects->add(floatingObject->copyToNewContainer(offset ));
2508 } 2508 }
2509 } 2509 }
2510 } 2510 }
2511 } 2511 }
2512 2512
2513 void RenderBlockFlow::addOverhangingFloats(RenderBlockFlow* child, bool makeChil dPaintOtherFloats) 2513 void RenderBlockFlow::addOverhangingFloats(RenderBlockFlow* child, bool makeChil dPaintOtherFloats)
2514 { 2514 {
2515 // Prevent floats from being added to the canvas by the root element, e.g., <html>. 2515 // Prevent floats from being added to the canvas by the root element, e.g., <html>.
2516 if (!child->containsFloats() || child->isRenderRegion() || child->createsBlo ckFormattingContext()) 2516 if (!child->containsFloats() || child->isRenderRegion() || child->createsNew FormattingContext())
2517 return; 2517 return;
2518 2518
2519 LayoutUnit childLogicalTop = child->logicalTop(); 2519 LayoutUnit childLogicalTop = child->logicalTop();
2520 LayoutUnit childLogicalLeft = child->logicalLeft(); 2520 LayoutUnit childLogicalLeft = child->logicalLeft();
2521 2521
2522 // Floats that will remain the child's responsibility to paint should factor into its 2522 // Floats that will remain the child's responsibility to paint should factor into its
2523 // overflow. 2523 // overflow.
2524 FloatingObjectSetIterator childEnd = child->m_floatingObjects->set().end(); 2524 FloatingObjectSetIterator childEnd = child->m_floatingObjects->set().end();
2525 for (FloatingObjectSetIterator childIt = child->m_floatingObjects->set().beg in(); childIt != childEnd; ++childIt) { 2525 for (FloatingObjectSetIterator childIt = child->m_floatingObjects->set().beg in(); childIt != childEnd; ++childIt) {
2526 FloatingObject* floatingObject = childIt->get(); 2526 FloatingObject* floatingObject = childIt->get();
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
2844 FrameView* frameView = document().view(); 2844 FrameView* frameView = document().view();
2845 LayoutUnit top = (style()->position() == FixedPosition) ? 0 : frameView->scr ollOffset().height(); 2845 LayoutUnit top = (style()->position() == FixedPosition) ? 0 : frameView->scr ollOffset().height();
2846 int visibleHeight = frameView->visibleContentRect(IncludeScrollbars).height( ); 2846 int visibleHeight = frameView->visibleContentRect(IncludeScrollbars).height( );
2847 if (height() < visibleHeight) 2847 if (height() < visibleHeight)
2848 top += (visibleHeight - height()) / 2; 2848 top += (visibleHeight - height()) / 2;
2849 setY(top); 2849 setY(top);
2850 dialog->setCentered(top); 2850 dialog->setCentered(top);
2851 } 2851 }
2852 2852
2853 } // namespace blink 2853 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderBlock.cpp ('k') | Source/core/rendering/RenderBox.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698