MyGUI 3.4.3
MyGUI_LayerNode.h
Go to the documentation of this file.
1/*
2 * This source file is part of MyGUI. For the latest info, see http://mygui.info/
3 * Distributed under the MIT License
4 * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
5 */
6
7#ifndef MYGUI_LAYER_NODE_H_
8#define MYGUI_LAYER_NODE_H_
9
10#include "MyGUI_Prerequest.h"
11#include "MyGUI_ILayer.h"
12#include "MyGUI_ILayerNode.h"
13#include "MyGUI_RenderItem.h"
14
15namespace MyGUI
16{
17
18 class LayerItem;
19 using VectorRenderItem = std::vector<RenderItem*>;
20 using VectorLayerItem = std::vector<ILayerItem*>;
21
23 {
25
26 public:
27 explicit LayerNode(ILayer* _layer, ILayerNode* _parent = nullptr);
28 ~LayerNode() override;
29
30 // леер, которому мы принадлежим
31 ILayer* getLayer() const override;
32
33 // возвращает отца или nullptr
34 ILayerNode* getParent() const override;
35
36 ILayerNode* createChildItemNode() override;
37 void destroyChildItemNode(ILayerNode* _node) override;
38
39 // up child item (make it draw and pick above others)
40 void upChildItemNode(ILayerNode* _item) override;
41
42 // child items list
43 EnumeratorILayerNode getEnumerator() const override;
44
45 size_t getLayerNodeCount() const override;
46
47 ILayerNode* getLayerNodeAt(size_t _index) const override;
48
49 // добавляем айтем к ноду
50 void attachLayerItem(ILayerItem* _item) override;
51 // удаляем айтем из нода
52 void detachLayerItem(ILayerItem* _item) override;
53
54 // добавляет саб айтем и возвращает рендер айтем
55 RenderItem* addToRenderItem(ITexture* _texture, bool _firstQueue, bool _manualRender) override;
56 // необходимо обновление нода
57 void outOfDate(RenderItem* _item) override;
58
59 // возвращает виджет по позиции
60 ILayerItem* getLayerItemByPoint(int _left, int _top) const override;
61
62 // рисует леер
63 void renderToTarget(IRenderTarget* _target, bool _update) override;
64
65 void resizeView(const IntSize& _viewSize) override;
66
67 float getNodeDepth() const override;
68
69 bool isOutOfDate() const;
70
71 protected:
72 // push all empty buffers to the end of buffers list
73 void updateCompression();
74 RenderItem* addToRenderItemFirstQueue(ITexture* _texture, bool _manualRender);
75 RenderItem* addToRenderItemSecondQueue(ITexture* _texture, bool _manualRender);
76
77 protected:
78 // two render queues, for subskins and text
79 // first queue keep render order based on order of creation
80 // second queue ignore creation order and always merge render items with same texture
83
84 size_t mLastNotEmptyItem{0};
85
86 // root widgets list
87 // overlapping layers have only one item here
89
91
94 bool mOutOfDate{false};
95 bool mOutOfDateCompression{false};
96 float mDepth{0.0f};
97 };
98
99} // namespace MyGUI
100
101#endif // MYGUI_LAYER_NODE_H_
#define MYGUI_EXPORT
#define MYGUI_RTTI_DERIVED(DerivedType)
Definition MyGUI_RTTI.h:69
VectorRenderItem mSecondRenderItems
VectorLayerItem mLayerItems
VectorRenderItem mFirstRenderItems
ILayerNode * mParent
VectorILayerNode mChildItems
std::vector< ILayerItem * > VectorLayerItem
std::vector< RenderItem * > VectorRenderItem
std::vector< ILayerNode * > VectorILayerNode