OLD | NEW |
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 1808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1819 | 1819 |
1820 void RenderBlockFlow::createFloatingObjects() | 1820 void RenderBlockFlow::createFloatingObjects() |
1821 { | 1821 { |
1822 m_floatingObjects = adoptPtr(new FloatingObjects(this, isHorizontalWritingMo
de())); | 1822 m_floatingObjects = adoptPtr(new FloatingObjects(this, isHorizontalWritingMo
de())); |
1823 } | 1823 } |
1824 | 1824 |
1825 void RenderBlockFlow::styleWillChange(StyleDifference diff, const RenderStyle& n
ewStyle) | 1825 void RenderBlockFlow::styleWillChange(StyleDifference diff, const RenderStyle& n
ewStyle) |
1826 { | 1826 { |
1827 RenderStyle* oldStyle = style(); | 1827 RenderStyle* oldStyle = style(); |
1828 s_canPropagateFloatIntoSibling = oldStyle ? !isFloatingOrOutOfFlowPositioned
() && !avoidsFloats() : false; | 1828 s_canPropagateFloatIntoSibling = oldStyle ? !isFloatingOrOutOfFlowPositioned
() && !avoidsFloats() : false; |
1829 if (oldStyle && parent() && diff == StyleDifferenceLayout && oldStyle->posit
ion() != newStyle.position() | 1829 if (oldStyle && parent() && diff.needsFullLayout() && oldStyle->position() !
= newStyle.position() |
1830 && containsFloats() && !isFloating() && !isOutOfFlowPositioned() && newS
tyle.hasOutOfFlowPosition()) | 1830 && containsFloats() && !isFloating() && !isOutOfFlowPositioned() && newS
tyle.hasOutOfFlowPosition()) |
1831 markAllDescendantsWithFloatsForLayout(); | 1831 markAllDescendantsWithFloatsForLayout(); |
1832 | 1832 |
1833 RenderBlock::styleWillChange(diff, newStyle); | 1833 RenderBlock::styleWillChange(diff, newStyle); |
1834 } | 1834 } |
1835 | 1835 |
1836 void RenderBlockFlow::styleDidChange(StyleDifference diff, const RenderStyle* ol
dStyle) | 1836 void RenderBlockFlow::styleDidChange(StyleDifference diff, const RenderStyle* ol
dStyle) |
1837 { | 1837 { |
1838 RenderBlock::styleDidChange(diff, oldStyle); | 1838 RenderBlock::styleDidChange(diff, oldStyle); |
1839 | 1839 |
1840 // After our style changed, if we lose our ability to propagate floats into
next sibling | 1840 // After our style changed, if we lose our ability to propagate floats into
next sibling |
1841 // blocks, then we need to find the top most parent containing that overhang
ing float and | 1841 // blocks, then we need to find the top most parent containing that overhang
ing float and |
1842 // then mark its descendants with floats for layout and clear all floats fro
m its next | 1842 // then mark its descendants with floats for layout and clear all floats fro
m its next |
1843 // sibling blocks that exist in our floating objects list. See bug 56299 and
62875. | 1843 // sibling blocks that exist in our floating objects list. See bug 56299 and
62875. |
1844 bool canPropagateFloatIntoSibling = !isFloatingOrOutOfFlowPositioned() && !a
voidsFloats(); | 1844 bool canPropagateFloatIntoSibling = !isFloatingOrOutOfFlowPositioned() && !a
voidsFloats(); |
1845 if (diff == StyleDifferenceLayout && s_canPropagateFloatIntoSibling && !canP
ropagateFloatIntoSibling && hasOverhangingFloats()) { | 1845 if (diff.needsFullLayout() && s_canPropagateFloatIntoSibling && !canPropagat
eFloatIntoSibling && hasOverhangingFloats()) { |
1846 RenderBlockFlow* parentBlockFlow = this; | 1846 RenderBlockFlow* parentBlockFlow = this; |
1847 const FloatingObjectSet& floatingObjectSet = m_floatingObjects->set(); | 1847 const FloatingObjectSet& floatingObjectSet = m_floatingObjects->set(); |
1848 FloatingObjectSetIterator end = floatingObjectSet.end(); | 1848 FloatingObjectSetIterator end = floatingObjectSet.end(); |
1849 | 1849 |
1850 for (RenderObject* curr = parent(); curr && !curr->isRenderView(); curr
= curr->parent()) { | 1850 for (RenderObject* curr = parent(); curr && !curr->isRenderView(); curr
= curr->parent()) { |
1851 if (curr->isRenderBlockFlow()) { | 1851 if (curr->isRenderBlockFlow()) { |
1852 RenderBlockFlow* currBlock = toRenderBlockFlow(curr); | 1852 RenderBlockFlow* currBlock = toRenderBlockFlow(curr); |
1853 | 1853 |
1854 if (currBlock->hasOverhangingFloats()) { | 1854 if (currBlock->hasOverhangingFloats()) { |
1855 for (FloatingObjectSetIterator it = floatingObjectSet.begin(
); it != end; ++it) { | 1855 for (FloatingObjectSetIterator it = floatingObjectSet.begin(
); it != end; ++it) { |
1856 RenderBox* renderer = (*it)->renderer(); | 1856 RenderBox* renderer = (*it)->renderer(); |
1857 if (currBlock->hasOverhangingFloat(renderer)) { | 1857 if (currBlock->hasOverhangingFloat(renderer)) { |
1858 parentBlockFlow = currBlock; | 1858 parentBlockFlow = currBlock; |
1859 break; | 1859 break; |
1860 } | 1860 } |
1861 } | 1861 } |
1862 } | 1862 } |
1863 } | 1863 } |
1864 } | 1864 } |
1865 | 1865 |
1866 parentBlockFlow->markAllDescendantsWithFloatsForLayout(); | 1866 parentBlockFlow->markAllDescendantsWithFloatsForLayout(); |
1867 parentBlockFlow->markSiblingsWithFloatsForLayout(); | 1867 parentBlockFlow->markSiblingsWithFloatsForLayout(); |
1868 } | 1868 } |
1869 | 1869 |
1870 if (diff == StyleDifferenceLayout || !oldStyle) | 1870 if (diff.needsFullLayout() || !oldStyle) |
1871 createOrDestroyMultiColumnFlowThreadIfNeeded(); | 1871 createOrDestroyMultiColumnFlowThreadIfNeeded(); |
1872 } | 1872 } |
1873 | 1873 |
1874 void RenderBlockFlow::updateStaticInlinePositionForChild(RenderBox* child, Layou
tUnit logicalTop) | 1874 void RenderBlockFlow::updateStaticInlinePositionForChild(RenderBox* child, Layou
tUnit logicalTop) |
1875 { | 1875 { |
1876 if (child->style()->isOriginalDisplayInlineType()) | 1876 if (child->style()->isOriginalDisplayInlineType()) |
1877 setStaticInlinePositionForChild(child, logicalTop, startAlignedOffsetFor
Line(logicalTop, false)); | 1877 setStaticInlinePositionForChild(child, logicalTop, startAlignedOffsetFor
Line(logicalTop, false)); |
1878 else | 1878 else |
1879 setStaticInlinePositionForChild(child, logicalTop, startOffsetForContent
()); | 1879 setStaticInlinePositionForChild(child, logicalTop, startOffsetForContent
()); |
1880 } | 1880 } |
(...skipping 923 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2804 RenderBlockFlow::RenderBlockFlowRareData& RenderBlockFlow::ensureRareData() | 2804 RenderBlockFlow::RenderBlockFlowRareData& RenderBlockFlow::ensureRareData() |
2805 { | 2805 { |
2806 if (m_rareData) | 2806 if (m_rareData) |
2807 return *m_rareData; | 2807 return *m_rareData; |
2808 | 2808 |
2809 m_rareData = adoptPtr(new RenderBlockFlowRareData(this)); | 2809 m_rareData = adoptPtr(new RenderBlockFlowRareData(this)); |
2810 return *m_rareData; | 2810 return *m_rareData; |
2811 } | 2811 } |
2812 | 2812 |
2813 } // namespace WebCore | 2813 } // namespace WebCore |
OLD | NEW |