blob: 89863dcf41d1f9a27f9958121e4f50540b32be5d [file] [log] [blame] [edit]
// Copyright 2015 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 DisplayItemTransformTree_h
#define DisplayItemTransformTree_h
#include "platform/PlatformExport.h"
#include "platform/geometry/FloatPoint3D.h"
#include "platform/transforms/TransformationMatrix.h"
#include "public/platform/WebDisplayItemTransformTree.h"
#include "wtf/Vector.h"
namespace blink {
// Represents the hierarchy of transforms which apply to ranges of a display
// item list and may be of interest to the compositor.
//
// This class is also the private implementation of WebDisplayItemTransformTree.
// For more detail, see WebDisplayItemTransformTree.h.
class PLATFORM_EXPORT DisplayItemTransformTree {
public:
using TransformNode = WebDisplayItemTransformTree::TransformNode;
enum : size_t { kInvalidIndex = WebDisplayItemTransformTree::kInvalidIndex };
DisplayItemTransformTree();
~DisplayItemTransformTree();
size_t nodeCount() const { return m_nodes.size(); }
TransformNode& nodeAt(size_t index) { return m_nodes[index]; }
const TransformNode& nodeAt(size_t index) const { return m_nodes[index]; }
// Returns the new node index.
size_t createNewNode(size_t parentNodeIndex, const TransformationMatrix& matrix, const FloatPoint3D& transformOrigin)
{
ASSERT(parentNodeIndex != kInvalidIndex);
m_nodes.append(TransformNode(
parentNodeIndex,
TransformationMatrix::toSkMatrix44(matrix),
transformOrigin));
return m_nodes.size() - 1;
}
private:
Vector<TransformNode> m_nodes;
};
} // namespace blink
#endif // DisplayItemTransformTree_h