MyGUI  3.2.1
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 
15 namespace MyGUI
16 {
17 
18  class LayerItem;
19  typedef std::vector<RenderItem*> VectorRenderItem;
20  typedef std::vector<ILayerItem*> VectorLayerItem;
21 
23  public ILayerNode
24  {
26 
27  public:
28  explicit LayerNode(ILayer* _layer, ILayerNode* _parent = nullptr);
29  virtual ~LayerNode();
30 
31  // леер, которому мы принадлежим
32  virtual ILayer* getLayer() const;
33 
34  // возвращает отца или nullptr
35  virtual ILayerNode* getParent() const;
36 
37  // создаем дочерний нод
38  virtual ILayerNode* createChildItemNode();
39  // удаляем дочерний нод
40  virtual void destroyChildItemNode(ILayerNode* _node);
41 
42  // поднимаем дочерний нод
43  virtual void upChildItemNode(ILayerNode* _node);
44 
45  // список детей
46  virtual EnumeratorILayerNode getEnumerator() const;
47 
48  virtual size_t getLayerNodeCount() const;
49 
50  virtual ILayerNode* getLayerNodeAt(size_t _index) const;
51 
52  // добавляем айтем к ноду
53  virtual void attachLayerItem(ILayerItem* _item);
54  // удаляем айтем из нода
55  virtual void detachLayerItem(ILayerItem* _item);
56 
57  // добавляет саб айтем и возвращает рендер айтем
58  virtual RenderItem* addToRenderItem(ITexture* _texture, bool _firstQueue, bool _manualRender);
59  // необходимо обновление нода
60  virtual void outOfDate(RenderItem* _item);
61 
62  // возвращает виджет по позиции
63  virtual ILayerItem* getLayerItemByPoint(int _left, int _top) const;
64 
65  // рисует леер
66  virtual void renderToTarget(IRenderTarget* _target, bool _update);
67 
68  virtual void resizeView(const IntSize& _viewSize);
69 
70  virtual float getNodeDepth();
71 
72  bool isOutOfDate() const;
73 
74  protected:
75  void updateCompression();
76 
77  protected:
78  // список двух очередей отрисовки, для сабскинов и текста
79  VectorRenderItem mFirstRenderItems;
80  VectorRenderItem mSecondRenderItems;
81 
82  // список всех рутовых виджетов
83  // у перекрывающегося слоя здесь только один
84  VectorLayerItem mLayerItems;
85 
86  // список такиж как мы, для построения дерева
87  VectorILayerNode mChildItems;
88 
89  ILayerNode* mParent;
90  ILayer* mLayer;
91  bool mOutOfDate;
92  float mDepth;
93  };
94 
95 } // namespace MyGUI
96 
97 #endif // __MYGUI_LAYER_NODE_H__