| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef WebDisplayItemTransformTree_h | 5 #ifndef WebDisplayItemTransformTree_h |
| 6 #define WebDisplayItemTransformTree_h | 6 #define WebDisplayItemTransformTree_h |
| 7 | 7 |
| 8 #include "public/platform/WebCommon.h" | 8 #include "public/platform/WebCommon.h" |
| 9 #include "public/platform/WebFloatSize.h" | 9 #include "public/platform/WebFloatSize.h" |
| 10 #include "public/platform/WebPrivateOwnPtr.h" | 10 #include "public/platform/WebPrivateOwnPtr.h" |
| 11 #include "third_party/skia/include/utils/SkMatrix44.h" | 11 #include "third_party/skia/include/utils/SkMatrix44.h" |
| 12 | 12 |
| 13 namespace blink { | 13 namespace blink { |
| 14 | 14 |
| 15 class DisplayItemTransformTree; | 15 class DisplayItemTransformTree; |
| 16 | 16 |
| 17 // Represents the hierarchy of transforms which apply to ranges of a display | 17 // Represents the hierarchy of transforms which apply to ranges of a display |
| 18 // item list and may be of interest to the compositor. | 18 // item list and may be of interest to the compositor. |
| 19 // | 19 // |
| 20 // It consists of a tree of "transform nodes", stored in a flattened | 20 // It consists of a tree of "transform nodes", stored in a flattened |
| 21 // representation in which their order is not guaranteed. Each node has a | 21 // representation in which their order is not guaranteed. Each node has a |
| 22 // parent, relative to whom its transform should be interpreted (i.e. the | 22 // parent, relative to whom its transform should be interpreted (i.e. the |
| 23 // total transform at a node is the product of its transform and its parent's | 23 // total transform at a node is the product of its transform and its parent's |
| 24 // total transform). | 24 // total transform). |
| 25 // | 25 class BLINK_PLATFORM_EXPORT WebDisplayItemTransformTree { |
| 26 // These nodes are associated with a display item list through the associated | |
| 27 // "range records", which correspond to non-overlapping ranges of display items | |
| 28 // in the list, in sorted order. Since the begin/end display items that create | |
| 29 // transform nodes are not included in these ranges, and empty ranges are | |
| 30 // omitted, these ranges are not a partition. Rather, they constitute a partial | |
| 31 // map from display item indices to transform node indices. | |
| 32 // | |
| 33 // Similarly, there may be transform nodes with no associated range records. | |
| 34 // This doesn't necessarily mean that it can be ignored -- it may be the parent | |
| 35 // of one or more other transform nodes. | |
| 36 class WebDisplayItemTransformTree { | |
| 37 public: | 26 public: |
| 38 enum : size_t { kInvalidIndex = static_cast<size_t>(-1) }; | 27 enum : size_t { kInvalidIndex = static_cast<size_t>(-1) }; |
| 39 | 28 |
| 40 struct TransformNode { | 29 struct TransformNode { |
| 41 TransformNode(size_t parent, const SkMatrix44& matrix44) | 30 TransformNode(size_t parent, const SkMatrix44& matrix44) |
| 42 : parentNodeIndex(parent) | 31 : parentNodeIndex(parent) |
| 43 , matrix(matrix44) | 32 , matrix(matrix44) |
| 44 { | 33 { |
| 45 } | 34 } |
| 46 | 35 |
| 47 bool isRoot() const { return parentNodeIndex == kInvalidIndex; } | 36 bool isRoot() const { return parentNodeIndex == kInvalidIndex; } |
| 48 | 37 |
| 49 // Index of parent in m_nodes (kInvalidIndex for root). | 38 // Index of parent in m_nodes (kInvalidIndex for root). |
| 50 size_t parentNodeIndex; | 39 size_t parentNodeIndex; |
| 51 | 40 |
| 52 // Transformation matrix of this node, relative to its parent. | 41 // Transformation matrix of this node, relative to its parent. |
| 53 SkMatrix44 matrix; | 42 SkMatrix44 matrix; |
| 54 }; | 43 }; |
| 55 | 44 |
| 56 struct RangeRecord { | 45 WebDisplayItemTransformTree(); |
| 57 RangeRecord(size_t beginIndex, size_t endIndex, size_t nodeIndex, const
WebFloatSize& drawingOffset = WebFloatSize()) | |
| 58 : displayListBeginIndex(beginIndex) | |
| 59 , displayListEndIndex(endIndex) | |
| 60 , transformNodeIndex(nodeIndex) | |
| 61 , offset(drawingOffset) | |
| 62 { | |
| 63 } | |
| 64 | |
| 65 bool operator==(const RangeRecord& other) const | |
| 66 { | |
| 67 return displayListBeginIndex == other.displayListBeginIndex | |
| 68 && displayListEndIndex == other.displayListEndIndex | |
| 69 && transformNodeIndex == other.transformNodeIndex | |
| 70 && offset == other.offset; | |
| 71 } | |
| 72 bool operator!=(const RangeRecord& other) const { return !(*this == othe
r); } | |
| 73 | |
| 74 // Index of first affected display item. | |
| 75 size_t displayListBeginIndex; | |
| 76 | |
| 77 // Index of first unaffected display item after |displayListBeginIndex|. | |
| 78 size_t displayListEndIndex; | |
| 79 | |
| 80 // Index of a the applicable transform node (in |m_nodes|). | |
| 81 size_t transformNodeIndex; | |
| 82 | |
| 83 // The offset of this range's drawing in the coordinate space of the | |
| 84 // transform node. | |
| 85 WebFloatSize offset; | |
| 86 }; | |
| 87 | |
| 88 BLINK_PLATFORM_EXPORT WebDisplayItemTransformTree(); | |
| 89 #if INSIDE_BLINK | 46 #if INSIDE_BLINK |
| 90 BLINK_PLATFORM_EXPORT WebDisplayItemTransformTree( | 47 WebDisplayItemTransformTree(const WTF::PassOwnPtr<DisplayItemTransformTree>&
); |
| 91 const WTF::PassOwnPtr<DisplayItemTransformTree>&); | |
| 92 #endif | 48 #endif |
| 93 | 49 |
| 94 BLINK_PLATFORM_EXPORT ~WebDisplayItemTransformTree(); | 50 ~WebDisplayItemTransformTree(); |
| 95 | 51 |
| 96 // Returns the number of nodes in the transform tree. | 52 // Returns the number of nodes in the transform tree. |
| 97 BLINK_PLATFORM_EXPORT size_t nodeCount() const; | 53 size_t nodeCount() const; |
| 98 | 54 |
| 99 // Returns a node in the transform tree by its index (from 0 to nodeCount()
- 1). | 55 // Returns a node in the transform tree by its index (from 0 to nodeCount()
- 1). |
| 100 BLINK_PLATFORM_EXPORT const TransformNode& nodeAt(size_t index) const; | 56 const TransformNode& nodeAt(size_t index) const; |
| 101 | |
| 102 // Returns the parent of the given node. | |
| 103 // Do not call this with the root node. | |
| 104 BLINK_PLATFORM_EXPORT const TransformNode& parentNode(const TransformNode&)
const; | |
| 105 | |
| 106 // Returns the number of display item ranges. | |
| 107 BLINK_PLATFORM_EXPORT size_t rangeRecordCount() const; | |
| 108 | |
| 109 // Returns the requested display item range, sorted by position in the | |
| 110 // display item list. | |
| 111 BLINK_PLATFORM_EXPORT const RangeRecord& rangeRecordAt(size_t index) const; | |
| 112 | 57 |
| 113 private: | 58 private: |
| 114 WebPrivateOwnPtr<const DisplayItemTransformTree> m_private; | 59 WebPrivateOwnPtr<const DisplayItemTransformTree> m_private; |
| 115 }; | 60 }; |
| 116 | 61 |
| 117 } // namespace blink | 62 } // namespace blink |
| 118 | 63 |
| 119 #endif // WebDisplayItemTransformTree_h | 64 #endif // WebDisplayItemTransformTree_h |
| OLD | NEW |