| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef DisplayItemTransformTreeBuilder_h | |
| 6 #define DisplayItemTransformTreeBuilder_h | |
| 7 | |
| 8 #include "platform/PlatformExport.h" | |
| 9 #include "platform/geometry/FloatSize.h" | |
| 10 #include "wtf/OwnPtr.h" | |
| 11 #include "wtf/PassOwnPtr.h" | |
| 12 #include "wtf/Vector.h" | |
| 13 | |
| 14 namespace blink { | |
| 15 | |
| 16 class DisplayItem; | |
| 17 class DisplayItemTransformTree; | |
| 18 | |
| 19 class PLATFORM_EXPORT DisplayItemTransformTreeBuilder { | |
| 20 public: | |
| 21 DisplayItemTransformTreeBuilder(); | |
| 22 ~DisplayItemTransformTreeBuilder(); | |
| 23 | |
| 24 // Detach the built transform tree. | |
| 25 // This can be used to construct a WebDisplayItemTransformTree. | |
| 26 PassOwnPtr<DisplayItemTransformTree> releaseTransformTree(); | |
| 27 | |
| 28 // Process another display item from the list. | |
| 29 void processDisplayItem(const DisplayItem&); | |
| 30 | |
| 31 private: | |
| 32 struct CurrentTransformNodeData { | |
| 33 CurrentTransformNodeData(size_t nodeIndex, const FloatSize& offsetFromOr
igin) | |
| 34 : transformNode(nodeIndex), offset(offsetFromOrigin), ignoredBeginCo
unt(0) { } | |
| 35 | |
| 36 // Index of the current transform node. | |
| 37 size_t transformNode; | |
| 38 | |
| 39 // Offset of the current origin (i.e. where a drawing at (0, 0) would | |
| 40 // be) from that node's origin. | |
| 41 FloatSize offset; | |
| 42 | |
| 43 // Number of "begin" display items that have been ignored, whose | |
| 44 // corresponding "end" display items should be skipped. | |
| 45 unsigned ignoredBeginCount; | |
| 46 }; | |
| 47 | |
| 48 // Emit a range record, unless it would be empty. | |
| 49 void finishRange(); | |
| 50 | |
| 51 // Used to manipulate the current transform node stack. | |
| 52 CurrentTransformNodeData& currentTransformNodeData() { return m_currentTrans
formNodeStack.last(); } | |
| 53 void pushCurrentTransformNode(size_t nodeIndex, const FloatSize& offsetFromO
rigin) | |
| 54 { | |
| 55 m_currentTransformNodeStack.append(CurrentTransformNodeData(nodeIndex, o
ffsetFromOrigin)); | |
| 56 } | |
| 57 void popCurrentTransformNode() { m_currentTransformNodeStack.removeLast(); } | |
| 58 | |
| 59 OwnPtr<DisplayItemTransformTree> m_transformTree; | |
| 60 Vector<CurrentTransformNodeData, 16> m_currentTransformNodeStack; | |
| 61 size_t m_rangeBeginIndex; | |
| 62 size_t m_currentIndex; | |
| 63 }; | |
| 64 | |
| 65 } // namespace | |
| 66 | |
| 67 #endif // DisplayItemTransformTreeBuilder_h | |
| OLD | NEW |