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 |