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

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

Issue 2050123002: Remove OwnPtr from Blink. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: First attempt to land. Created 4 years, 6 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) 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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 #include "core/layout/LayoutMultiColumnSpannerPlaceholder.h" 42 #include "core/layout/LayoutMultiColumnSpannerPlaceholder.h"
43 #include "core/layout/LayoutPagedFlowThread.h" 43 #include "core/layout/LayoutPagedFlowThread.h"
44 #include "core/layout/LayoutView.h" 44 #include "core/layout/LayoutView.h"
45 #include "core/layout/TextAutosizer.h" 45 #include "core/layout/TextAutosizer.h"
46 #include "core/layout/line/GlyphOverflow.h" 46 #include "core/layout/line/GlyphOverflow.h"
47 #include "core/layout/line/InlineIterator.h" 47 #include "core/layout/line/InlineIterator.h"
48 #include "core/layout/line/InlineTextBox.h" 48 #include "core/layout/line/InlineTextBox.h"
49 #include "core/layout/line/LineWidth.h" 49 #include "core/layout/line/LineWidth.h"
50 #include "core/layout/shapes/ShapeOutsideInfo.h" 50 #include "core/layout/shapes/ShapeOutsideInfo.h"
51 #include "core/paint/PaintLayer.h" 51 #include "core/paint/PaintLayer.h"
52 #include "wtf/PtrUtil.h"
53 #include <memory>
52 54
53 namespace blink { 55 namespace blink {
54 56
55 bool LayoutBlockFlow::s_canPropagateFloatIntoSibling = false; 57 bool LayoutBlockFlow::s_canPropagateFloatIntoSibling = false;
56 58
57 struct SameSizeAsLayoutBlockFlow : public LayoutBlock { 59 struct SameSizeAsLayoutBlockFlow : public LayoutBlock {
58 LineBoxList lineBoxes; 60 LineBoxList lineBoxes;
59 LayoutUnit m_paintInvalidationLogicalTopAndBottom[2]; 61 LayoutUnit m_paintInvalidationLogicalTopAndBottom[2];
60 void* pointers[2]; 62 void* pointers[2];
61 }; 63 };
(...skipping 1055 matching lines...) Expand 10 before | Expand all | Expand 10 after
1117 floatMap.remove(floatingObject.layoutObject()); 1119 floatMap.remove(floatingObject.layoutObject());
1118 } else { 1120 } else {
1119 changeLogicalTop = LayoutUnit(); 1121 changeLogicalTop = LayoutUnit();
1120 changeLogicalBottom = std::max(changeLogicalBottom, logicalB ottom); 1122 changeLogicalBottom = std::max(changeLogicalBottom, logicalB ottom);
1121 } 1123 }
1122 } 1124 }
1123 } 1125 }
1124 1126
1125 LayoutBoxToFloatInfoMap::iterator end = floatMap.end(); 1127 LayoutBoxToFloatInfoMap::iterator end = floatMap.end();
1126 for (LayoutBoxToFloatInfoMap::iterator it = floatMap.begin(); it != end; ++it) { 1128 for (LayoutBoxToFloatInfoMap::iterator it = floatMap.begin(); it != end; ++it) {
1127 OwnPtr<FloatingObject>& floatingObject = it->value; 1129 std::unique_ptr<FloatingObject>& floatingObject = it->value;
1128 if (!floatingObject->isDescendant()) { 1130 if (!floatingObject->isDescendant()) {
1129 changeLogicalTop = LayoutUnit(); 1131 changeLogicalTop = LayoutUnit();
1130 changeLogicalBottom = std::max(changeLogicalBottom, logicalBotto mForFloat(*floatingObject)); 1132 changeLogicalBottom = std::max(changeLogicalBottom, logicalBotto mForFloat(*floatingObject));
1131 } 1133 }
1132 } 1134 }
1133 1135
1134 markLinesDirtyInBlockRange(changeLogicalTop, changeLogicalBottom); 1136 markLinesDirtyInBlockRange(changeLogicalTop, changeLogicalBottom);
1135 } else if (!oldIntrudingFloatSet.isEmpty()) { 1137 } else if (!oldIntrudingFloatSet.isEmpty()) {
1136 // If there are previously intruding floats that no longer intrude, then children with floats 1138 // If there are previously intruding floats that no longer intrude, then children with floats
1137 // should also get layout because they might need their floating object lists cleared. 1139 // should also get layout because they might need their floating object lists cleared.
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after
1755 { 1757 {
1756 if (style()->marginBeforeCollapse() == MarginCollapseDiscard) { 1758 if (style()->marginBeforeCollapse() == MarginCollapseDiscard) {
1757 ASSERT(value); 1759 ASSERT(value);
1758 return; 1760 return;
1759 } 1761 }
1760 1762
1761 if (!m_rareData && !value) 1763 if (!m_rareData && !value)
1762 return; 1764 return;
1763 1765
1764 if (!m_rareData) 1766 if (!m_rareData)
1765 m_rareData = adoptPtr(new LayoutBlockFlowRareData(this)); 1767 m_rareData = wrapUnique(new LayoutBlockFlowRareData(this));
1766 1768
1767 m_rareData->m_discardMarginBefore = value; 1769 m_rareData->m_discardMarginBefore = value;
1768 } 1770 }
1769 1771
1770 void LayoutBlockFlow::setMustDiscardMarginAfter(bool value) 1772 void LayoutBlockFlow::setMustDiscardMarginAfter(bool value)
1771 { 1773 {
1772 if (style()->marginAfterCollapse() == MarginCollapseDiscard) { 1774 if (style()->marginAfterCollapse() == MarginCollapseDiscard) {
1773 ASSERT(value); 1775 ASSERT(value);
1774 return; 1776 return;
1775 } 1777 }
1776 1778
1777 if (!m_rareData && !value) 1779 if (!m_rareData && !value)
1778 return; 1780 return;
1779 1781
1780 if (!m_rareData) 1782 if (!m_rareData)
1781 m_rareData = adoptPtr(new LayoutBlockFlowRareData(this)); 1783 m_rareData = wrapUnique(new LayoutBlockFlowRareData(this));
1782 1784
1783 m_rareData->m_discardMarginAfter = value; 1785 m_rareData->m_discardMarginAfter = value;
1784 } 1786 }
1785 1787
1786 bool LayoutBlockFlow::mustDiscardMarginBefore() const 1788 bool LayoutBlockFlow::mustDiscardMarginBefore() const
1787 { 1789 {
1788 return style()->marginBeforeCollapse() == MarginCollapseDiscard || (m_rareDa ta && m_rareData->m_discardMarginBefore); 1790 return style()->marginBeforeCollapse() == MarginCollapseDiscard || (m_rareDa ta && m_rareData->m_discardMarginBefore);
1789 } 1791 }
1790 1792
1791 bool LayoutBlockFlow::mustDiscardMarginAfter() const 1793 bool LayoutBlockFlow::mustDiscardMarginAfter() const
(...skipping 24 matching lines...) Expand all
1816 1818
1817 // FIXME: See |mustDiscardMarginBeforeForChild| above. 1819 // FIXME: See |mustDiscardMarginBeforeForChild| above.
1818 return false; 1820 return false;
1819 } 1821 }
1820 1822
1821 void LayoutBlockFlow::setMaxMarginBeforeValues(LayoutUnit pos, LayoutUnit neg) 1823 void LayoutBlockFlow::setMaxMarginBeforeValues(LayoutUnit pos, LayoutUnit neg)
1822 { 1824 {
1823 if (!m_rareData) { 1825 if (!m_rareData) {
1824 if (pos == LayoutBlockFlowRareData::positiveMarginBeforeDefault(this) && neg == LayoutBlockFlowRareData::negativeMarginBeforeDefault(this)) 1826 if (pos == LayoutBlockFlowRareData::positiveMarginBeforeDefault(this) && neg == LayoutBlockFlowRareData::negativeMarginBeforeDefault(this))
1825 return; 1827 return;
1826 m_rareData = adoptPtr(new LayoutBlockFlowRareData(this)); 1828 m_rareData = wrapUnique(new LayoutBlockFlowRareData(this));
1827 } 1829 }
1828 m_rareData->m_margins.setPositiveMarginBefore(pos); 1830 m_rareData->m_margins.setPositiveMarginBefore(pos);
1829 m_rareData->m_margins.setNegativeMarginBefore(neg); 1831 m_rareData->m_margins.setNegativeMarginBefore(neg);
1830 } 1832 }
1831 1833
1832 void LayoutBlockFlow::setMaxMarginAfterValues(LayoutUnit pos, LayoutUnit neg) 1834 void LayoutBlockFlow::setMaxMarginAfterValues(LayoutUnit pos, LayoutUnit neg)
1833 { 1835 {
1834 if (!m_rareData) { 1836 if (!m_rareData) {
1835 if (pos == LayoutBlockFlowRareData::positiveMarginAfterDefault(this) && neg == LayoutBlockFlowRareData::negativeMarginAfterDefault(this)) 1837 if (pos == LayoutBlockFlowRareData::positiveMarginAfterDefault(this) && neg == LayoutBlockFlowRareData::negativeMarginAfterDefault(this))
1836 return; 1838 return;
1837 m_rareData = adoptPtr(new LayoutBlockFlowRareData(this)); 1839 m_rareData = wrapUnique(new LayoutBlockFlowRareData(this));
1838 } 1840 }
1839 m_rareData->m_margins.setPositiveMarginAfter(pos); 1841 m_rareData->m_margins.setPositiveMarginAfter(pos);
1840 m_rareData->m_margins.setNegativeMarginAfter(neg); 1842 m_rareData->m_margins.setNegativeMarginAfter(neg);
1841 } 1843 }
1842 1844
1843 bool LayoutBlockFlow::mustSeparateMarginBeforeForChild(const LayoutBox& child) c onst 1845 bool LayoutBlockFlow::mustSeparateMarginBeforeForChild(const LayoutBox& child) c onst
1844 { 1846 {
1845 ASSERT(!child.selfNeedsLayout()); 1847 ASSERT(!child.selfNeedsLayout());
1846 const ComputedStyle& childStyle = child.styleRef(); 1848 const ComputedStyle& childStyle = child.styleRef();
1847 if (!child.isWritingModeRoot()) 1849 if (!child.isWritingModeRoot())
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
2191 if (newLogicalTop < logicalTop) 2193 if (newLogicalTop < logicalTop)
2192 break; 2194 break;
2193 } 2195 }
2194 ASSERT_NOT_REACHED(); 2196 ASSERT_NOT_REACHED();
2195 } 2197 }
2196 return result; 2198 return result;
2197 } 2199 }
2198 2200
2199 void LayoutBlockFlow::createFloatingObjects() 2201 void LayoutBlockFlow::createFloatingObjects()
2200 { 2202 {
2201 m_floatingObjects = adoptPtr(new FloatingObjects(this, isHorizontalWritingMo de())); 2203 m_floatingObjects = wrapUnique(new FloatingObjects(this, isHorizontalWriting Mode()));
2202 } 2204 }
2203 2205
2204 void LayoutBlockFlow::willBeDestroyed() 2206 void LayoutBlockFlow::willBeDestroyed()
2205 { 2207 {
2206 // Mark as being destroyed to avoid trouble with merges in removeChild(). 2208 // Mark as being destroyed to avoid trouble with merges in removeChild().
2207 m_beingDestroyed = true; 2209 m_beingDestroyed = true;
2208 2210
2209 // Make sure to destroy anonymous children first while they are still connec ted to the rest of the tree, so that they will 2211 // Make sure to destroy anonymous children first while they are still connec ted to the rest of the tree, so that they will
2210 // properly dirty line boxes that they are removed from. Effects that do :be fore/:after only on hover could crash otherwise. 2212 // properly dirty line boxes that they are removed from. Effects that do :be fore/:after only on hover could crash otherwise.
2211 children()->destroyLeftoverChildren(); 2213 children()->destroyLeftoverChildren();
(...skipping 784 matching lines...) Expand 10 before | Expand all | Expand 10 after
2996 } else { 2998 } else {
2997 // Don't insert the object again if it's already in the list 2999 // Don't insert the object again if it's already in the list
2998 const FloatingObjectSet& floatingObjectSet = m_floatingObjects->set(); 3000 const FloatingObjectSet& floatingObjectSet = m_floatingObjects->set();
2999 FloatingObjectSetIterator it = floatingObjectSet.find<FloatingObjectHash Translator>(&floatBox); 3001 FloatingObjectSetIterator it = floatingObjectSet.find<FloatingObjectHash Translator>(&floatBox);
3000 if (it != floatingObjectSet.end()) 3002 if (it != floatingObjectSet.end())
3001 return it->get(); 3003 return it->get();
3002 } 3004 }
3003 3005
3004 // Create the special object entry & append it to the list 3006 // Create the special object entry & append it to the list
3005 3007
3006 OwnPtr<FloatingObject> newObj = FloatingObject::create(&floatBox); 3008 std::unique_ptr<FloatingObject> newObj = FloatingObject::create(&floatBox);
3007 3009
3008 // Our location is irrelevant if we're unsplittable or no pagination is in e ffect. 3010 // Our location is irrelevant if we're unsplittable or no pagination is in e ffect.
3009 // Just go ahead and lay out the float. 3011 // Just go ahead and lay out the float.
3010 bool isChildLayoutBlock = floatBox.isLayoutBlock(); 3012 bool isChildLayoutBlock = floatBox.isLayoutBlock();
3011 if (isChildLayoutBlock && !floatBox.needsLayout() && view()->layoutState()-> pageLogicalHeightChanged()) 3013 if (isChildLayoutBlock && !floatBox.needsLayout() && view()->layoutState()-> pageLogicalHeightChanged())
3012 floatBox.setChildNeedsLayout(MarkOnlyThis); 3014 floatBox.setChildNeedsLayout(MarkOnlyThis);
3013 3015
3014 floatBox.layoutIfNeeded(); 3016 floatBox.layoutIfNeeded();
3015 3017
3016 setLogicalWidthForFloat(*newObj, logicalWidthForChild(floatBox) + marginStar tForChild(floatBox) + marginEndForChild(floatBox)); 3018 setLogicalWidthForFloat(*newObj, logicalWidthForChild(floatBox) + marginStar tForChild(floatBox) + marginEndForChild(floatBox));
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after
3454 LayoutBlock* containingBlock = this->containingBlock(); 3456 LayoutBlock* containingBlock = this->containingBlock();
3455 return containingBlock && containingBlock->isLayoutBlockFlow(); 3457 return containingBlock && containingBlock->isLayoutBlockFlow();
3456 } 3458 }
3457 3459
3458 void LayoutBlockFlow::setPaginationStrutPropagatedFromChild(LayoutUnit strut) 3460 void LayoutBlockFlow::setPaginationStrutPropagatedFromChild(LayoutUnit strut)
3459 { 3461 {
3460 strut = std::max(strut, LayoutUnit()); 3462 strut = std::max(strut, LayoutUnit());
3461 if (!m_rareData) { 3463 if (!m_rareData) {
3462 if (!strut) 3464 if (!strut)
3463 return; 3465 return;
3464 m_rareData = adoptPtr(new LayoutBlockFlowRareData(this)); 3466 m_rareData = wrapUnique(new LayoutBlockFlowRareData(this));
3465 } 3467 }
3466 m_rareData->m_paginationStrutPropagatedFromChild = strut; 3468 m_rareData->m_paginationStrutPropagatedFromChild = strut;
3467 } 3469 }
3468 3470
3469 void LayoutBlockFlow::positionSpannerDescendant(LayoutMultiColumnSpannerPlacehol der& child) 3471 void LayoutBlockFlow::positionSpannerDescendant(LayoutMultiColumnSpannerPlacehol der& child)
3470 { 3472 {
3471 LayoutBox& spanner = *child.layoutObjectInFlowThread(); 3473 LayoutBox& spanner = *child.layoutObjectInFlowThread();
3472 // FIXME: |spanner| is a descendant, but never a direct child, so the names here are bad, if 3474 // FIXME: |spanner| is a descendant, but never a direct child, so the names here are bad, if
3473 // nothing else. 3475 // nothing else.
3474 setLogicalTopForChild(spanner, child.logicalTop()); 3476 setLogicalTopForChild(spanner, child.logicalTop());
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
3596 LayoutBlockFlowRareData& rareData = ensureRareData(); 3598 LayoutBlockFlowRareData& rareData = ensureRareData();
3597 ASSERT(!rareData.m_multiColumnFlowThread); 3599 ASSERT(!rareData.m_multiColumnFlowThread);
3598 rareData.m_multiColumnFlowThread = flowThread; 3600 rareData.m_multiColumnFlowThread = flowThread;
3599 } 3601 }
3600 3602
3601 LayoutBlockFlow::LayoutBlockFlowRareData& LayoutBlockFlow::ensureRareData() 3603 LayoutBlockFlow::LayoutBlockFlowRareData& LayoutBlockFlow::ensureRareData()
3602 { 3604 {
3603 if (m_rareData) 3605 if (m_rareData)
3604 return *m_rareData; 3606 return *m_rareData;
3605 3607
3606 m_rareData = adoptPtr(new LayoutBlockFlowRareData(this)); 3608 m_rareData = wrapUnique(new LayoutBlockFlowRareData(this));
3607 return *m_rareData; 3609 return *m_rareData;
3608 } 3610 }
3609 3611
3610 void LayoutBlockFlow::positionDialog() 3612 void LayoutBlockFlow::positionDialog()
3611 { 3613 {
3612 HTMLDialogElement* dialog = toHTMLDialogElement(node()); 3614 HTMLDialogElement* dialog = toHTMLDialogElement(node());
3613 if (dialog->getCenteringMode() == HTMLDialogElement::NotCentered) 3615 if (dialog->getCenteringMode() == HTMLDialogElement::NotCentered)
3614 return; 3616 return;
3615 3617
3616 bool canCenterDialog = (style()->position() == AbsolutePosition || style()-> position() == FixedPosition) 3618 bool canCenterDialog = (style()->position() == AbsolutePosition || style()-> position() == FixedPosition)
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
3829 if (!rect.isEmpty()) 3831 if (!rect.isEmpty())
3830 rects.append(rect); 3832 rects.append(rect);
3831 } 3833 }
3832 } 3834 }
3833 3835
3834 if (inlineElementContinuation) 3836 if (inlineElementContinuation)
3835 inlineElementContinuation->addOutlineRects(rects, additionalOffset + (in lineElementContinuation->containingBlock()->location() - location()), includeBlo ckOverflows); 3837 inlineElementContinuation->addOutlineRects(rects, additionalOffset + (in lineElementContinuation->containingBlock()->location() - location()), includeBlo ckOverflows);
3836 } 3838 }
3837 3839
3838 } // namespace blink 3840 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutBlockFlow.h ('k') | third_party/WebKit/Source/core/layout/LayoutBox.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698