Index: Source/WebCore/page/scrolling/ScrollingStateTree.cpp |
diff --git a/Source/WebCore/page/scrolling/ScrollingStateTree.cpp b/Source/WebCore/page/scrolling/ScrollingStateTree.cpp |
deleted file mode 100644 |
index 56d6e7e34daf3bd3f81933f6d32f4447ebef8c54..0000000000000000000000000000000000000000 |
--- a/Source/WebCore/page/scrolling/ScrollingStateTree.cpp |
+++ /dev/null |
@@ -1,185 +0,0 @@ |
-/* |
- * Copyright (C) 2012 Apple 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: |
- * 1. Redistributions of source code must retain the above copyright |
- * notice, this list of conditions and the following disclaimer. |
- * 2. 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. |
- * |
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS 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 APPLE INC. OR ITS 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" |
- |
-#if ENABLE(THREADED_SCROLLING) |
- |
-#include "ScrollingStateTree.h" |
- |
-#include "ScrollingStateFixedNode.h" |
-#include "ScrollingStateScrollingNode.h" |
-#include "ScrollingStateStickyNode.h" |
- |
-namespace WebCore { |
- |
-PassOwnPtr<ScrollingStateTree> ScrollingStateTree::create() |
-{ |
- return adoptPtr(new ScrollingStateTree); |
-} |
- |
-ScrollingStateTree::ScrollingStateTree() |
- : m_hasChangedProperties(false) |
-{ |
-} |
- |
-ScrollingStateTree::~ScrollingStateTree() |
-{ |
-} |
- |
-ScrollingNodeID ScrollingStateTree::attachNode(ScrollingNodeType nodeType, ScrollingNodeID newNodeID, ScrollingNodeID parentID) |
-{ |
- ASSERT(newNodeID); |
- |
- if (ScrollingStateNode* node = stateNodeForID(newNodeID)) { |
- ScrollingStateNode* parent = stateNodeForID(parentID); |
- if (!parent) |
- return newNodeID; |
- if (node->parent() == parent) |
- return newNodeID; |
- |
- // The node is being re-parented. To do that, we'll remove it, and then re-create a new node. |
- removeNode(node); |
- } |
- |
- ScrollingStateNode* newNode; |
- if (!parentID) { |
- // If we're resetting the root node, we should clear the HashMap and destroy the current children. |
- clear(); |
- |
- setRootStateNode(ScrollingStateScrollingNode::create(this, newNodeID)); |
- newNode = rootStateNode(); |
- } else { |
- ScrollingStateNode* parent = stateNodeForID(parentID); |
- if (!parent) |
- return 0; |
- |
- switch (nodeType) { |
- case FixedNode: { |
- OwnPtr<ScrollingStateFixedNode> fixedNode = ScrollingStateFixedNode::create(this, newNodeID); |
- newNode = fixedNode.get(); |
- parent->appendChild(fixedNode.release()); |
- break; |
- } |
- case StickyNode: { |
- OwnPtr<ScrollingStateStickyNode> stickyNode = ScrollingStateStickyNode::create(this, newNodeID); |
- newNode = stickyNode.get(); |
- parent->appendChild(stickyNode.release()); |
- break; |
- } |
- case ScrollingNode: { |
- // FIXME: We currently only support child nodes that are fixed. |
- ASSERT_NOT_REACHED(); |
- OwnPtr<ScrollingStateScrollingNode> scrollingNode = ScrollingStateScrollingNode::create(this, newNodeID); |
- newNode = scrollingNode.get(); |
- parent->appendChild(scrollingNode.release()); |
- break; |
- } |
- } |
- } |
- |
- m_stateNodeMap.set(newNodeID, newNode); |
- return newNodeID; |
-} |
- |
-void ScrollingStateTree::detachNode(ScrollingNodeID nodeID) |
-{ |
- if (!nodeID) |
- return; |
- |
- // The node may not be found if clearStateTree() was recently called. |
- ScrollingStateNode* node = m_stateNodeMap.take(nodeID); |
- if (!node) |
- return; |
- |
- removeNode(node); |
-} |
- |
-void ScrollingStateTree::clear() |
-{ |
- removeNode(rootStateNode()); |
- m_stateNodeMap.clear(); |
-} |
- |
-PassOwnPtr<ScrollingStateTree> ScrollingStateTree::commit() |
-{ |
- // This function clones and resets the current state tree, but leaves the tree structure intact. |
- OwnPtr<ScrollingStateTree> treeStateClone = ScrollingStateTree::create(); |
- if (m_rootStateNode) |
- treeStateClone->setRootStateNode(static_pointer_cast<ScrollingStateScrollingNode>(m_rootStateNode->cloneAndReset())); |
- |
- // Copy the IDs of the nodes that have been removed since the last commit into the clone. |
- treeStateClone->m_nodesRemovedSinceLastCommit.swap(m_nodesRemovedSinceLastCommit); |
- |
- // Now the clone tree has changed properties, and the original tree does not. |
- treeStateClone->m_hasChangedProperties = true; |
- m_hasChangedProperties = false; |
- |
- return treeStateClone.release(); |
-} |
- |
-void ScrollingStateTree::removeNode(ScrollingStateNode* node) |
-{ |
- if (!node) |
- return; |
- |
- if (node == m_rootStateNode) { |
- didRemoveNode(node->scrollingNodeID()); |
- m_rootStateNode = nullptr; |
- return; |
- } |
- |
- ASSERT(m_rootStateNode); |
- m_rootStateNode->removeChild(node); |
- |
- // ScrollingStateTree::removeNode() will destroy children, so we have to make sure we remove those children |
- // from the HashMap. |
- size_t size = m_nodesRemovedSinceLastCommit.size(); |
- for (size_t i = 0; i < size; ++i) |
- m_stateNodeMap.remove(m_nodesRemovedSinceLastCommit[i]); |
-} |
- |
-void ScrollingStateTree::didRemoveNode(ScrollingNodeID nodeID) |
-{ |
- m_nodesRemovedSinceLastCommit.append(nodeID); |
- m_hasChangedProperties = true; |
-} |
- |
-ScrollingStateNode* ScrollingStateTree::stateNodeForID(ScrollingNodeID scrollLayerID) |
-{ |
- if (!scrollLayerID) |
- return 0; |
- |
- HashMap<ScrollingNodeID, ScrollingStateNode*>::const_iterator it = m_stateNodeMap.find(scrollLayerID); |
- if (it == m_stateNodeMap.end()) |
- return 0; |
- |
- ASSERT(it->value->scrollingNodeID() == scrollLayerID); |
- return it->value; |
-} |
- |
-} // namespace WebCore |
- |
-#endif // ENABLE(THREADED_SCROLLING) |