Index: Source/core/rendering/RenderLazyBlock.cpp |
diff --git a/Source/core/rendering/RenderLazyBlock.cpp b/Source/core/rendering/RenderLazyBlock.cpp |
deleted file mode 100644 |
index a43ab5475493b916d7e74113b39b048376fe7565..0000000000000000000000000000000000000000 |
--- a/Source/core/rendering/RenderLazyBlock.cpp |
+++ /dev/null |
@@ -1,251 +0,0 @@ |
-/* |
- * Copyright (C) 2013 Google Inc. All rights reserved. |
- * |
- * Redistribution and use in source and binary forms, with or without |
- * modification, are permitted provided that the following conditions are |
- * met: |
- * |
- * * Redistributions of source code must retain the above copyright |
- * notice, this list of conditions and the following disclaimer. |
- * * Redistributions in binary form must reproduce the above |
- * copyright notice, this list of conditions and the following disclaimer |
- * in the documentation and/or other materials provided with the |
- * distribution. |
- * * Neither the name of Google Inc. nor the names of its |
- * contributors may be used to endorse or promote products derived from |
- * this software without specific prior written permission. |
- * |
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- */ |
- |
-#include "config.h" |
-#include "core/rendering/RenderLazyBlock.h" |
- |
-#include "core/rendering/LayoutRepainter.h" |
-#include "core/rendering/RenderLayer.h" |
-#include "core/rendering/RenderView.h" |
- |
-namespace WebCore { |
- |
-RenderLazyBlock::RenderLazyBlock(Element* element) |
- : RenderBlock(element) |
- , m_next(0) |
- , m_previous(0) |
- , m_firstVisibleChildBox(0) |
- , m_lastVisibleChildBox(0) |
- , m_attached(false) |
- , m_isNestedLayout(false) |
-{ |
- setChildrenInline(false); // All of our children must be block-level. |
-} |
- |
-RenderLazyBlock::~RenderLazyBlock() |
-{ |
- ASSERT(!m_attached); |
-} |
- |
-void RenderLazyBlock::willBeDestroyed() |
-{ |
- detachLazyBlock(); |
- RenderBlock::willBeDestroyed(); |
-} |
- |
-void RenderLazyBlock::willBeRemovedFromTree() |
-{ |
- RenderBlock::willBeRemovedFromTree(); |
- detachLazyBlock(); |
-} |
- |
-bool RenderLazyBlock::isNested() const |
-{ |
- for (RenderObject* ancestor = parent(); ancestor; ancestor = ancestor->parent()) { |
- if (ancestor->isRenderLazyBlock()) |
- return true; |
- } |
- return false; |
-} |
- |
-// FIXME: This method and detachLazyBlock are essentially identical to |
-// RenderQuote::attachQuote and detachQuote. We should just have a |
-// RenderTreeOrderedList that does this stuff internally. |
-void RenderLazyBlock::attachLazyBlock() |
-{ |
- ASSERT(view()); |
- ASSERT(!m_attached); |
- ASSERT(!m_next && !m_previous); |
- ASSERT(isRooted()); |
- |
- if (!view()->firstLazyBlock()) { |
- view()->setFirstLazyBlock(this); |
- m_attached = true; |
- return; |
- } |
- |
- for (RenderObject* predecessor = previousInPreOrder(); predecessor; predecessor = predecessor->previousInPreOrder()) { |
- if (!predecessor->isRenderLazyBlock() || !toRenderLazyBlock(predecessor)->isAttached()) |
- continue; |
- m_previous = toRenderLazyBlock(predecessor); |
- m_next = m_previous->m_next; |
- m_previous->m_next = this; |
- if (m_next) |
- m_next->m_previous = this; |
- break; |
- } |
- |
- if (!m_previous) { |
- m_next = view()->firstLazyBlock(); |
- view()->setFirstLazyBlock(this); |
- if (m_next) |
- m_next->m_previous = this; |
- } |
- m_attached = true; |
- |
- ASSERT(!m_next || m_next->m_attached); |
- ASSERT(!m_next || m_next->m_previous == this); |
- ASSERT(!m_previous || m_previous->m_attached); |
- ASSERT(!m_previous || m_previous->m_next == this); |
-} |
- |
-void RenderLazyBlock::detachLazyBlock() |
-{ |
- ASSERT(!m_next || m_next->m_attached); |
- ASSERT(!m_previous || m_previous->m_attached); |
- if (!m_attached) |
- return; |
- if (m_previous) |
- m_previous->m_next = m_next; |
- else if (view()) |
- view()->setFirstLazyBlock(m_next); |
- if (m_next) |
- m_next->m_previous = m_previous; |
- m_attached = false; |
- m_next = 0; |
- m_previous = 0; |
-} |
- |
-void RenderLazyBlock::paintChildren(PaintInfo& paintInfo, const LayoutPoint& paintOffset) |
-{ |
- for (RenderBox* child = m_firstVisibleChildBox; child && child != m_lastVisibleChildBox; child = child->nextSiblingBox()) |
- paintChild(child, paintInfo, paintOffset); |
-} |
- |
-void RenderLazyBlock::layoutChildren(bool relayoutChildren) |
-{ |
- LayoutUnit afterEdge = borderAfter() + paddingAfter() + scrollbarLogicalHeight(); |
- LayoutUnit height = borderBefore() + paddingBefore(); |
- LayoutRect intersectRect = m_intersectRect; |
- |
- // FIXME: If we already have m_firstVisibleChildBox we should start there |
- // and stop when we have enough to fill the viewport. This catches the most |
- // common cases of scrolling upward or downward. |
- |
- m_firstVisibleChildBox = 0; |
- m_lastVisibleChildBox = 0; |
- |
- // FIXME: This should approximate the height so we don't actually need to walk |
- // every child and can optimistically layout children until we fill the |
- // the expandedViewportRect. |
- |
- setLogicalHeight(height); |
- int childCount = 0; |
- LayoutUnit heightOfChildren = 0; |
- for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBox()) { |
- ++childCount; |
- updateBlockChildDirtyBitsBeforeLayout(relayoutChildren, child); |
- |
- if (relayoutChildren) |
- child->setNeedsLayout(MarkOnlyThis); |
- |
- if (child->style()->logicalHeight().isSpecified()) { |
- LogicalExtentComputedValues computedValues; |
- child->computeLogicalHeight(-1, height, computedValues); |
- child->setLogicalHeight(computedValues.m_extent); |
- heightOfChildren += computedValues.m_extent; |
- } else { |
- // FIXME: Enable guessing about height so we don't need to do layout |
- // on every non fixed height child. |
- setLogicalHeight(height); |
- setLogicalTopForChild(child, height); |
- if (heightOfChildren && child->needsLayout()) |
- child->setLogicalHeight(heightOfChildren / childCount); |
- else |
- child->layoutIfNeeded(); |
- heightOfChildren += child->logicalHeight(); |
- } |
- |
- intersectRect.setHeight(child->logicalHeight()); |
- |
- if (m_expandedViewportRect.intersects(enclosingIntRect(intersectRect))) { |
- if (!m_firstVisibleChildBox) |
- m_firstVisibleChildBox = child; |
- m_lastVisibleChildBox = child->nextSiblingBox(); |
- setLogicalHeight(height); |
- setLogicalTopForChild(child, height); |
- child->layoutIfNeeded(); |
- // FIXME: Track how far off our estimated height is from the actual height, |
- // and adjust the scrollbars accordingly. |
- } |
- |
- intersectRect.setY(intersectRect.y() + child->logicalHeight()); |
- height += child->logicalHeight(); |
- } |
- |
- setLogicalHeight(height + afterEdge); |
- |
- updateLogicalHeight(); |
-} |
- |
-void RenderLazyBlock::layoutBlock(bool relayoutChildren, LayoutUnit pageLogicalHeight) |
-{ |
- ASSERT(needsLayout()); |
- |
- if (!m_attached) |
- attachLazyBlock(); |
- |
- // FIXME: We should adjust the style to disallow columns too. |
- ASSERT(!hasColumns()); |
- |
- LayoutRepainter repainter(*this, checkForRepaintDuringLayout()); |
- LayoutStateMaintainer statePusher(view(), this, locationOffset(), hasTransform() || hasReflection() || style()->isFlippedBlocksWritingMode()); |
- |
- // FIXME: The compositor can instead give us a list of rects it thinks |
- // are important. |
- IntRect expandedViewportRect = view()->frameView()->visibleContentRect(ScrollableArea::IncludeScrollbars); |
- expandedViewportRect.move(-4000, -4000); |
- expandedViewportRect.expand(8000, 8000); |
- |
- // FIXME: We probably want a RenderGeometryMap instead since we need to handle |
- // rotation of the RenderLazyBlock and other transforms. |
- Vector<FloatQuad> quads; |
- enclosingBoxModelObject()->absoluteQuads(quads); |
- LayoutRect intersectRect = quads[0].enclosingBoundingBox(); |
- if (hasOverflowClip()) |
- intersectRect.move(-scrolledContentOffset()); |
- |
- // Avoid doing work inside the nested layout if we know everything is correct already. |
- if (!m_isNestedLayout || m_intersectRect != intersectRect || m_expandedViewportRect != expandedViewportRect) { |
- m_intersectRect = intersectRect; |
- m_expandedViewportRect = expandedViewportRect; |
- layoutChildren(relayoutChildren || updateLogicalWidthAndColumnWidth()); |
- } |
- |
- statePusher.pop(); |
- updateLayerTransform(); |
- updateScrollInfoAfterLayout(); |
- repainter.repaintAfterLayout(); |
- |
- m_isNestedLayout = false; |
- clearNeedsLayout(); |
-} |
- |
-} // namespace WebCore |