Chromium Code Reviews| Index: cc/trees/property_tree.h |
| diff --git a/cc/trees/property_tree.h b/cc/trees/property_tree.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..cc502a8ba1ceab0bd409771c98cd527cce23de0c |
| --- /dev/null |
| +++ b/cc/trees/property_tree.h |
| @@ -0,0 +1,107 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef CC_TREES_PROPERTY_TREE_H_ |
| +#define CC_TREES_PROPERTY_TREE_H_ |
| + |
| +#include <vector> |
| + |
| +#include "base/basictypes.h" |
| +#include "cc/base/cc_export.h" |
| +#include "ui/gfx/rect.h" |
| +#include "ui/gfx/transform.h" |
| + |
| +namespace cc { |
| + |
| +template <typename T> |
| +struct CC_EXPORT TreeNode { |
| + TreeNode() : id(-1), parent_id(-1), data() {} |
| + int id; |
| + int parent_id; |
| + T data; |
| +}; |
| + |
| +struct CC_EXPORT TransformNodeData { |
| + TransformNodeData(); |
| + ~TransformNodeData(); |
| + |
| + gfx::Transform to_parent; |
| + gfx::Transform from_parent; |
| + |
| + gfx::Transform to_screen; |
| + gfx::Transform from_screen; |
| + |
| + int target_id; |
| + |
| + bool is_invertible; |
| + bool ancestors_are_invertible; |
| + bool flattens; |
| + |
| + void set_to_parent(const gfx::Transform& transform) { |
| + to_parent = transform; |
| + is_invertible = to_parent.GetInverse(&from_parent); |
| + } |
| +}; |
| + |
| +typedef TreeNode<TransformNodeData> TransformNode; |
| + |
| +struct CC_EXPORT ClipNodeData { |
| + ClipNodeData(); |
| + |
| + gfx::RectF clip; |
| + gfx::RectF combined_clip; |
| + int transform_id; |
| + int target_id; |
| +}; |
| + |
| +typedef TreeNode<ClipNodeData> ClipNode; |
| + |
| +template <typename T> |
| +class CC_EXPORT PropertyTree { |
| + public: |
| + PropertyTree(); |
| + // Not virtual. Should not derive from this class. |
|
enne (OOO)
2014/12/10 23:45:59
final?
Ian Vollick
2014/12/12 03:01:47
Done.
|
| + ~PropertyTree(); |
| + |
| + int Insert(const T& tree_node, int parent_id); |
| + |
| + T* Node(int i) { return i > -1 ? &nodes_[i] : nullptr; } |
| + const T* Node(int i) const { return i > -1 ? &nodes_[i] : nullptr; } |
| + |
| + T* parent(const T* t) { |
| + return t->parent_id > -1 ? Node(t->parent_id) : nullptr; |
| + } |
| + const T* parent(const T* t) const { |
| + return t->parent_id > -1 ? Node(t->parent_id) : nullptr; |
| + } |
| + |
| + T* back() { return size() ? &nodes_[nodes_.size() - 1] : nullptr; } |
| + const T* back() const { |
| + return size() ? &nodes_[nodes_.size() - 1] : nullptr; |
| + } |
| + |
| + void clear() { nodes_.clear(); } |
| + size_t size() const { return nodes_.size(); } |
| + |
| + private: |
| + // Copy and assign are permitted. This is how we'll do tree sync. |
| + std::vector<T> nodes_; |
| +}; |
| + |
| +typedef PropertyTree<TransformNode> TransformTree; |
| +typedef PropertyTree<ClipNode> ClipTree; |
| + |
| +bool CC_EXPORT ComputeTransform(const TransformTree& tree, |
|
enne (OOO)
2014/12/10 23:45:59
Make this a const function on TransformTree?
Ian Vollick
2014/12/12 03:01:47
Done.
|
| + int source_id, |
| + int dest_id, |
| + gfx::Transform* transform); |
| + |
| +bool CC_EXPORT |
| +Are2DAxisAligned(const TransformTree& tree, int source_id, int dest_id); |
|
enne (OOO)
2014/12/10 23:45:59
Same here?
Ian Vollick
2014/12/12 03:01:47
Done.
|
| + |
| +void CC_EXPORT UpdateScreenSpaceTransform(TransformTree* tree, int id); |
| + |
| +} // namespace cc |
| + |
| +#endif // CC_TREES_PROPERTY_TREE_H_ |