7
This file is part of MyGUI.
9
MyGUI is free software: you can redistribute it and/or modify
10
it under the terms of the GNU Lesser General Public License as published by
11
the Free Software Foundation, either version 3 of the License, or
12
(at your option) any later version.
14
MyGUI is distributed in the hope that it will be useful,
15
but WITHOUT ANY WARRANTY; without even the implied warranty of
16
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
GNU Lesser General Public License for more details.
19
You should have received a copy of the GNU Lesser General Public License
20
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
23
#include "MyGUI_Precompiled.h"
24
#include "MyGUI_LayerItem.h"
25
#include "MyGUI_OverlappedLayer.h"
26
#include "MyGUI_LayerNode.h"
27
#include "MyGUI_RenderManager.h"
32
OverlappedLayer::OverlappedLayer() :
36
mViewSize = RenderManager::getInstance().getViewSize();
39
OverlappedLayer::~OverlappedLayer()
41
MYGUI_ASSERT(mChildItems.empty(), "Layer '" << getName() << "' must be empty before destroy");
44
void OverlappedLayer::deserialization(xml::ElementPtr _node, Version _version)
46
mName = _node->findAttribute("name");
47
if (_version >= Version(1, 2))
49
MyGUI::xml::ElementEnumerator propert = _node->getElementEnumerator();
50
while (propert.next("Property"))
52
const std::string& key = propert->findAttribute("key");
53
const std::string& value = propert->findAttribute("value");
55
mIsPick = utility::parseValue<bool>(value);
58
else if (_version >= Version(1, 0))
60
mIsPick = utility::parseBool(_node->findAttribute("pick"));
64
mIsPick = utility::parseBool(_node->findAttribute("peek"));
68
ILayerNode* OverlappedLayer::createChildItemNode()
70
// создаем рутовый айтем
71
ILayerNode* node = new LayerNode(this);
72
mChildItems.push_back(node);
79
void OverlappedLayer::destroyChildItemNode(ILayerNode* _item)
81
// если есть отец, то русть сам и удаляет
82
ILayerNode* parent = _item->getParent();
85
parent->destroyChildItemNode(_item);
92
// айтем рутовый, мы удаляем
93
for (VectorILayerNode::iterator iter = mChildItems.begin(); iter != mChildItems.end(); ++iter)
98
mChildItems.erase(iter);
106
MYGUI_EXCEPT("item node not found");
109
void OverlappedLayer::upChildItemNode(ILayerNode* _item)
111
// если есть отец, то пусть сам рулит
112
ILayerNode* parent = _item->getParent();
113
if (parent != nullptr)
115
parent->upChildItemNode(_item);
122
if ((2 > mChildItems.size()) || (mChildItems.back() == _item))
125
for (VectorILayerNode::iterator iter = mChildItems.begin(); iter != mChildItems.end(); ++iter)
127
if ((*iter) == _item)
129
mChildItems.erase(iter);
130
mChildItems.push_back(_item);
138
MYGUI_EXCEPT("item node not found");
141
ILayerItem* OverlappedLayer::getLayerItemByPoint(int _left, int _top) const
146
VectorILayerNode::const_reverse_iterator iter = mChildItems.rbegin();
147
while (iter != mChildItems.rend())
149
ILayerItem* item = (*iter)->getLayerItemByPoint(_left, _top);
157
IntPoint OverlappedLayer::getPosition(int _left, int _top) const
159
return IntPoint(_left, _top);
162
void OverlappedLayer::renderToTarget(IRenderTarget* _target, bool _update)
164
for (VectorILayerNode::iterator iter = mChildItems.begin(); iter != mChildItems.end(); ++iter)
165
(*iter)->renderToTarget(_target, _update);
170
void OverlappedLayer::resizeView(const IntSize& _viewSize)
172
for (VectorILayerNode::iterator iter = mChildItems.begin(); iter != mChildItems.end(); ++iter)
173
(*iter)->resizeView(_viewSize);
175
mViewSize = _viewSize;
178
EnumeratorILayerNode OverlappedLayer::getEnumerator() const
180
return EnumeratorILayerNode(mChildItems);
183
const IntSize& OverlappedLayer::getSize() const
188
bool OverlappedLayer::isOutOfDate() const
190
for (VectorILayerNode::const_iterator iter = mChildItems.begin(); iter != mChildItems.end(); ++iter)
192
if (static_cast<const LayerNode*>(*iter)->isOutOfDate())
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)
7
#include "MyGUI_Precompiled.h"
8
#include "MyGUI_LayerItem.h"
9
#include "MyGUI_OverlappedLayer.h"
10
#include "MyGUI_LayerNode.h"
11
#include "MyGUI_RenderManager.h"
16
OverlappedLayer::OverlappedLayer() :
20
mViewSize = RenderManager::getInstance().getViewSize();
23
OverlappedLayer::~OverlappedLayer()
25
MYGUI_ASSERT(mChildItems.empty(), "Layer '" << getName() << "' must be empty before destroy");
28
void OverlappedLayer::deserialization(xml::ElementPtr _node, Version _version)
30
mName = _node->findAttribute("name");
31
if (_version >= Version(1, 2))
33
MyGUI::xml::ElementEnumerator propert = _node->getElementEnumerator();
34
while (propert.next("Property"))
36
const std::string& key = propert->findAttribute("key");
37
const std::string& value = propert->findAttribute("value");
39
mIsPick = utility::parseValue<bool>(value);
42
else if (_version >= Version(1, 0))
44
mIsPick = utility::parseBool(_node->findAttribute("pick"));
48
mIsPick = utility::parseBool(_node->findAttribute("peek"));
52
ILayerNode* OverlappedLayer::createChildItemNode()
54
// создаем рутовый айтем
55
ILayerNode* node = new LayerNode(this);
56
mChildItems.push_back(node);
63
void OverlappedLayer::destroyChildItemNode(ILayerNode* _item)
65
// если есть отец, то русть сам и удаляет
66
ILayerNode* parent = _item->getParent();
69
parent->destroyChildItemNode(_item);
76
// айтем рутовый, мы удаляем
77
for (VectorILayerNode::iterator iter = mChildItems.begin(); iter != mChildItems.end(); ++iter)
82
mChildItems.erase(iter);
90
MYGUI_EXCEPT("item node not found");
93
void OverlappedLayer::upChildItemNode(ILayerNode* _item)
95
// если есть отец, то пусть сам рулит
96
ILayerNode* parent = _item->getParent();
97
if (parent != nullptr)
99
parent->upChildItemNode(_item);
106
if ((2 > mChildItems.size()) || (mChildItems.back() == _item))
109
for (VectorILayerNode::iterator iter = mChildItems.begin(); iter != mChildItems.end(); ++iter)
111
if ((*iter) == _item)
113
mChildItems.erase(iter);
114
mChildItems.push_back(_item);
122
MYGUI_EXCEPT("item node not found");
125
ILayerItem* OverlappedLayer::getLayerItemByPoint(int _left, int _top) const
130
VectorILayerNode::const_reverse_iterator iter = mChildItems.rbegin();
131
while (iter != mChildItems.rend())
133
ILayerItem* item = (*iter)->getLayerItemByPoint(_left, _top);
141
IntPoint OverlappedLayer::getPosition(int _left, int _top) const
143
return IntPoint(_left, _top);
146
void OverlappedLayer::renderToTarget(IRenderTarget* _target, bool _update)
148
for (VectorILayerNode::iterator iter = mChildItems.begin(); iter != mChildItems.end(); ++iter)
149
(*iter)->renderToTarget(_target, _update);
154
void OverlappedLayer::resizeView(const IntSize& _viewSize)
156
for (VectorILayerNode::iterator iter = mChildItems.begin(); iter != mChildItems.end(); ++iter)
157
(*iter)->resizeView(_viewSize);
159
mViewSize = _viewSize;
162
EnumeratorILayerNode OverlappedLayer::getEnumerator() const
164
return EnumeratorILayerNode(mChildItems);
167
size_t OverlappedLayer::getLayerNodeCount() const
169
return mChildItems.size();
172
ILayerNode* OverlappedLayer::getLayerNodeAt(size_t _index) const
174
MYGUI_ASSERT_RANGE(_index, mChildItems.size(), "OverlappedLayer::getLayerNodeAt");
176
return mChildItems[_index];
179
const IntSize& OverlappedLayer::getSize() const
184
bool OverlappedLayer::isOutOfDate() const
186
for (VectorILayerNode::const_iterator iter = mChildItems.begin(); iter != mChildItems.end(); ++iter)
188
if (static_cast<const LayerNode*>(*iter)->isOutOfDate())