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 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 return renderer; | 170 return renderer; |
171 } | 171 } |
172 | 172 |
173 RenderBlockFlow* RenderBlockFlow::createAnonymousBlockFlow() const | 173 RenderBlockFlow* RenderBlockFlow::createAnonymousBlockFlow() const |
174 { | 174 { |
175 return toRenderBlockFlow(createAnonymousWithParentRendererAndDisplay(this, B
LOCK)); | 175 return toRenderBlockFlow(createAnonymousWithParentRendererAndDisplay(this, B
LOCK)); |
176 } | 176 } |
177 | 177 |
178 void RenderBlockFlow::willBeDestroyed() | 178 void RenderBlockFlow::willBeDestroyed() |
179 { | 179 { |
| 180 if (containsFloats()) |
| 181 m_floatingObjects->clearOverhangingAndIntrudingFloats(); |
| 182 |
180 if (lineGridBox()) | 183 if (lineGridBox()) |
181 lineGridBox()->destroy(); | 184 lineGridBox()->destroy(); |
182 | 185 |
183 if (renderNamedFlowFragment()) | 186 if (renderNamedFlowFragment()) |
184 setRenderNamedFlowFragment(0); | 187 setRenderNamedFlowFragment(0); |
185 | 188 |
186 RenderBlock::willBeDestroyed(); | 189 RenderBlock::willBeDestroyed(); |
187 } | 190 } |
188 | 191 |
189 bool RenderBlockFlow::relayoutForPagination(bool hasSpecifiedPageLogicalHeight,
LayoutUnit pageLogicalHeight, LayoutStateMaintainer& statePusher) | 192 bool RenderBlockFlow::relayoutForPagination(bool hasSpecifiedPageLogicalHeight,
LayoutUnit pageLogicalHeight, LayoutStateMaintainer& statePusher) |
(...skipping 1635 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1825 if (m_floatingObjects) { | 1828 if (m_floatingObjects) { |
1826 if (!toBlockFlow->m_floatingObjects) | 1829 if (!toBlockFlow->m_floatingObjects) |
1827 toBlockFlow->createFloatingObjects(); | 1830 toBlockFlow->createFloatingObjects(); |
1828 | 1831 |
1829 const FloatingObjectSet& fromFloatingObjectSet = m_floatingObjects->set(
); | 1832 const FloatingObjectSet& fromFloatingObjectSet = m_floatingObjects->set(
); |
1830 FloatingObjectSetIterator end = fromFloatingObjectSet.end(); | 1833 FloatingObjectSetIterator end = fromFloatingObjectSet.end(); |
1831 | 1834 |
1832 for (FloatingObjectSetIterator it = fromFloatingObjectSet.begin(); it !=
end; ++it) { | 1835 for (FloatingObjectSetIterator it = fromFloatingObjectSet.begin(); it !=
end; ++it) { |
1833 FloatingObject* floatingObject = *it; | 1836 FloatingObject* floatingObject = *it; |
1834 | 1837 |
1835 // Don't insert the object again if it's already in the list | 1838 if (floatingObject->isOverhangingOrIntruding() || toBlockFlow->conta
insFloat(floatingObject->renderer())) |
1836 if (toBlockFlow->containsFloat(floatingObject->renderer())) | |
1837 continue; | 1839 continue; |
1838 | 1840 |
1839 toBlockFlow->m_floatingObjects->add(floatingObject->unsafeClone()); | 1841 toBlockFlow->m_floatingObjects->add(floatingObject->unsafeClone()); |
1840 } | 1842 } |
1841 } | 1843 } |
1842 | 1844 |
1843 } | 1845 } |
1844 | 1846 |
1845 void RenderBlockFlow::repaintOverhangingFloats(bool paintAllDescendants) | 1847 void RenderBlockFlow::repaintOverhangingFloats(bool paintAllDescendants) |
1846 { | 1848 { |
(...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2418 | 2420 |
2419 // Applying the child's margin makes no sense in the case where
the child was passed in. | 2421 // Applying the child's margin makes no sense in the case where
the child was passed in. |
2420 // since this margin was added already through the modification
of the |logicalLeftOffset| variable | 2422 // since this margin was added already through the modification
of the |logicalLeftOffset| variable |
2421 // above. |logicalLeftOffset| will equal the margin in this case
, so it's already been taken | 2423 // above. |logicalLeftOffset| will equal the margin in this case
, so it's already been taken |
2422 // into account. Only apply this code if prev is the parent, sin
ce otherwise the left margin | 2424 // into account. Only apply this code if prev is the parent, sin
ce otherwise the left margin |
2423 // will get applied twice. | 2425 // will get applied twice. |
2424 LayoutSize offset = isHorizontalWritingMode() | 2426 LayoutSize offset = isHorizontalWritingMode() |
2425 ? LayoutSize(logicalLeftOffset - (prev != parent() ? prev->m
arginLeft() : LayoutUnit()), logicalTopOffset) | 2427 ? LayoutSize(logicalLeftOffset - (prev != parent() ? prev->m
arginLeft() : LayoutUnit()), logicalTopOffset) |
2426 : LayoutSize(logicalTopOffset, logicalLeftOffset - (prev !=
parent() ? prev->marginTop() : LayoutUnit())); | 2428 : LayoutSize(logicalTopOffset, logicalLeftOffset - (prev !=
parent() ? prev->marginTop() : LayoutUnit())); |
2427 | 2429 |
2428 m_floatingObjects->add(floatingObject->copyToNewContainer(offset
)); | 2430 m_floatingObjects->addOverhangingOrIntrudingFloat(floatingObject
->copyToNewContainer(offset)); |
2429 } | 2431 } |
2430 } | 2432 } |
2431 } | 2433 } |
2432 } | 2434 } |
2433 | 2435 |
2434 LayoutUnit RenderBlockFlow::addOverhangingFloats(RenderBlockFlow* child, bool ma
keChildPaintOtherFloats) | 2436 LayoutUnit RenderBlockFlow::addOverhangingFloats(RenderBlockFlow* child, bool ma
keChildPaintOtherFloats) |
2435 { | 2437 { |
2436 // Prevent floats from being added to the canvas by the root element, e.g.,
<html>. | 2438 // Prevent floats from being added to the canvas by the root element, e.g.,
<html>. |
2437 if (child->hasOverflowClip() || !child->containsFloats() || child->isRoot()
|| child->hasColumns() || child->isWritingModeRoot()) | 2439 if (child->hasOverflowClip() || !child->containsFloats() || child->isRoot()
|| child->hasColumns() || child->isWritingModeRoot()) |
2438 return 0; | 2440 return 0; |
(...skipping 22 matching lines...) Expand all Loading... |
2461 // far out as we can, to the outermost block that overlaps the f
loat, stopping only | 2463 // far out as we can, to the outermost block that overlaps the f
loat, stopping only |
2462 // if we hit a self-painting layer boundary. | 2464 // if we hit a self-painting layer boundary. |
2463 if (floatingObject->renderer()->enclosingFloatPaintingLayer() ==
enclosingFloatPaintingLayer()) { | 2465 if (floatingObject->renderer()->enclosingFloatPaintingLayer() ==
enclosingFloatPaintingLayer()) { |
2464 floatingObject->setShouldPaint(false); | 2466 floatingObject->setShouldPaint(false); |
2465 shouldPaint = true; | 2467 shouldPaint = true; |
2466 } | 2468 } |
2467 // We create the floating object list lazily. | 2469 // We create the floating object list lazily. |
2468 if (!m_floatingObjects) | 2470 if (!m_floatingObjects) |
2469 createFloatingObjects(); | 2471 createFloatingObjects(); |
2470 | 2472 |
2471 m_floatingObjects->add(floatingObject->copyToNewContainer(offset
, shouldPaint, true)); | 2473 m_floatingObjects->addOverhangingOrIntrudingFloat(floatingObject
->copyToNewContainer(offset, shouldPaint, true)); |
2472 } | 2474 } |
2473 } else { | 2475 } else { |
2474 if (makeChildPaintOtherFloats && !floatingObject->shouldPaint() && !
floatingObject->renderer()->hasSelfPaintingLayer() | 2476 if (makeChildPaintOtherFloats && !floatingObject->shouldPaint() && !
floatingObject->renderer()->hasSelfPaintingLayer() |
2475 && floatingObject->renderer()->isDescendantOf(child) && floating
Object->renderer()->enclosingFloatPaintingLayer() == child->enclosingFloatPainti
ngLayer()) { | 2477 && floatingObject->renderer()->isDescendantOf(child) && floating
Object->renderer()->enclosingFloatPaintingLayer() == child->enclosingFloatPainti
ngLayer()) { |
2476 // The float is not overhanging from this block, so if it is a d
escendant of the child, the child should | 2478 // The float is not overhanging from this block, so if it is a d
escendant of the child, the child should |
2477 // paint it (the other case is that it is intruding into the chi
ld), unless it has its own layer or enclosing | 2479 // paint it (the other case is that it is intruding into the chi
ld), unless it has its own layer or enclosing |
2478 // layer. | 2480 // layer. |
2479 // If makeChildPaintOtherFloats is false, it means that the chil
d must already know about all the floats | 2481 // If makeChildPaintOtherFloats is false, it means that the chil
d must already know about all the floats |
2480 // it should paint. | 2482 // it should paint. |
2481 floatingObject->setShouldPaint(true); | 2483 floatingObject->setShouldPaint(true); |
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2805 RenderBlockFlow::RenderBlockFlowRareData& RenderBlockFlow::ensureRareData() | 2807 RenderBlockFlow::RenderBlockFlowRareData& RenderBlockFlow::ensureRareData() |
2806 { | 2808 { |
2807 if (m_rareData) | 2809 if (m_rareData) |
2808 return *m_rareData; | 2810 return *m_rareData; |
2809 | 2811 |
2810 m_rareData = adoptPtr(new RenderBlockFlowRareData(this)); | 2812 m_rareData = adoptPtr(new RenderBlockFlowRareData(this)); |
2811 return *m_rareData; | 2813 return *m_rareData; |
2812 } | 2814 } |
2813 | 2815 |
2814 } // namespace WebCore | 2816 } // namespace WebCore |
OLD | NEW |