MyGUI 3.4.3
MyGUI_OverlappedLayer.cpp
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#include "MyGUI_Precompiled.h"
8#include "MyGUI_LayerItem.h"
10#include "MyGUI_LayerNode.h"
11#include "MyGUI_RenderManager.h"
12
13namespace MyGUI
14{
15
20
22 {
23 if (!mChildItems.empty())
24 MYGUI_LOG(Critical, "Layer '" << getName() << "' must be empty before destroy");
25 }
26
28 {
29 mName = _node->findAttribute("name");
30 if (_version >= Version(1, 2))
31 {
33 while (propert.next("Property"))
34 {
35 std::string_view key = propert->findAttribute("key");
36 std::string_view value = propert->findAttribute("value");
37 if (key == "Pick")
39 }
40 }
41 else if (_version >= Version(1, 0))
42 {
44 }
45 else
46 {
48 }
49 }
50
51 void OverlappedLayer::setPick(bool _pick)
52 {
53 mIsPick = _pick;
54 }
55
57 {
58 // создаем рутовый айтем
59 ILayerNode* node = new LayerNode(this);
60 mChildItems.push_back(node);
61
62 mOutOfDate = true;
63
64 return node;
65 }
66
68 {
69 // если есть отец, то русть сам и удаляет
70 ILayerNode* parent = _item->getParent();
71 if (parent)
72 {
73 parent->destroyChildItemNode(_item);
74
75 mOutOfDate = true;
76
77 return;
78 }
79
80 // айтем рутовый, мы удаляем
81 for (VectorILayerNode::iterator iter = mChildItems.begin(); iter != mChildItems.end(); ++iter)
82 {
83 if ((*iter) == _item)
84 {
85 delete _item;
86 mChildItems.erase(iter);
87
88 mOutOfDate = true;
89
90 return;
91 }
92 }
93
94 MYGUI_EXCEPT("item node not found");
95 }
96
98 {
99 // если есть отец, то пусть сам рулит
100 ILayerNode* parent = _item->getParent();
101 if (parent != nullptr)
102 {
103 parent->upChildItemNode(_item);
104
105 mOutOfDate = true;
106
107 return;
108 }
109
110 if ((2 > mChildItems.size()) || (mChildItems.back() == _item))
111 return;
112
113 for (VectorILayerNode::iterator iter = mChildItems.begin(); iter != mChildItems.end(); ++iter)
114 {
115 if ((*iter) == _item)
116 {
117 mChildItems.erase(iter);
118 mChildItems.push_back(_item);
119
120 mOutOfDate = true;
121
122 return;
123 }
124 }
125
126 MYGUI_EXCEPT("item node not found");
127 }
128
130 {
131 if (!mIsPick)
132 return nullptr;
133
134 VectorILayerNode::const_reverse_iterator iter = mChildItems.rbegin();
135 while (iter != mChildItems.rend())
136 {
137 ILayerItem* item = (*iter)->getLayerItemByPoint(_left, _top);
138 if (item != nullptr)
139 return item;
140 ++iter;
141 }
142 return nullptr;
143 }
144
145 IntPoint OverlappedLayer::getPosition(int _left, int _top) const
146 {
147 return {_left, _top};
148 }
149
151 {
152 for (auto& childItem : mChildItems)
153 childItem->renderToTarget(_target, _update);
154
155 mOutOfDate = false;
156 }
157
159 {
160 for (auto& childItem : mChildItems)
161 childItem->resizeView(_viewSize);
162
163 mViewSize = _viewSize;
164 }
165
170
172 {
173 return mChildItems.size();
174 }
175
177 {
178 MYGUI_ASSERT_RANGE(_index, mChildItems.size(), "OverlappedLayer::getLayerNodeAt");
179
180 return mChildItems[_index];
181 }
182
184 {
185 return mViewSize;
186 }
187
189 {
190 for (const auto& childItem : mChildItems)
191 {
192 if (static_cast<const LayerNode*>(childItem)->isOutOfDate())
193 return true;
194 }
195
196 return mOutOfDate;
197 }
198
199} // namespace MyGUI
#define MYGUI_EXCEPT(dest)
#define MYGUI_ASSERT_RANGE(index, size, owner)
#define MYGUI_LOG(level, text)
const std::string & getName() const
std::string mName
virtual ILayerItem * getLayerItemByPoint(int _left, int _top) const =0
virtual ILayerNode * getParent() const =0
virtual void destroyChildItemNode(ILayerNode *_node)=0
virtual void upChildItemNode(ILayerNode *_item)=0
const IntSize & getSize() const override
void deserialization(xml::ElementPtr _node, Version _version) override
EnumeratorILayerNode getEnumerator() const override
ILayerNode * getLayerNodeAt(size_t _index) const override
void resizeView(const IntSize &_viewSize) override
IntPoint getPosition(int _left, int _top) const override
ILayerItem * getLayerItemByPoint(int _left, int _top) const override
void destroyChildItemNode(ILayerNode *_item) override
ILayerNode * createChildItemNode() override
void renderToTarget(IRenderTarget *_target, bool _update) override
void upChildItemNode(ILayerNode *_item) override
size_t getLayerNodeCount() const override
virtual const IntSize & getViewSize() const =0
static RenderManager & getInstance()
bool findAttribute(std::string_view _name, std::string &_value)
ElementEnumerator getElementEnumerator()
bool parseBool(std::string_view _value)
T parseValue(std::string_view _value)
Element * ElementPtr
Enumerator< VectorILayerNode > EnumeratorILayerNode
types::TPoint< int > IntPoint
Definition MyGUI_Types.h:27
types::TSize< int > IntSize
Definition MyGUI_Types.h:30