MyGUI  3.4.0
MyGUI_SharedLayer.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"
9 #include "MyGUI_SharedLayer.h"
10 #include "MyGUI_LayerNode.h"
11 #include "MyGUI_RenderManager.h"
12 
13 namespace MyGUI
14 {
15 
17  mIsPick(false),
18  mChildItem(nullptr),
19  mOutOfDate(false)
20  {
22  }
23 
25  {
26  MYGUI_ASSERT(mChildItem == nullptr, "Layer '" << getName() << "' must be empty before destroy");
27  }
28 
30  {
31  mName = _node->findAttribute("name");
32  if (_version >= Version(1, 2))
33  {
35  while (propert.next("Property"))
36  {
37  const std::string& key = propert->findAttribute("key");
38  const std::string& value = propert->findAttribute("value");
39  if (key == "Pick")
40  setPick(utility::parseValue<bool>(value));
41  }
42  }
43  else if (_version >= Version(1, 0))
44  {
45  setPick(utility::parseBool(_node->findAttribute("pick")));
46  }
47  else
48  {
49  setPick(utility::parseBool(_node->findAttribute("peek")));
50  }
51  }
52 
53  void SharedLayer::setPick(bool _pick)
54  {
55  mIsPick = _pick;
56  }
57 
59  {
60  if (mChildItem == nullptr)
61  mChildItem = new SharedLayerNode(this);
62 
64 
65  mOutOfDate = true;
66 
67  return mChildItem;
68  }
69 
71  {
72  // айтем рутовый, мы удаляем
73  if (mChildItem == _item)
74  {
76  if (0 == mChildItem->countUsing())
77  {
78  delete mChildItem;
79  mChildItem = nullptr;
80  }
81 
82  mOutOfDate = true;
83 
84  return;
85  }
86  //MYGUI_EXCEPT("item node not found");
87  }
88 
90  {
91  // если есть отец, то пусть сам рулит
92  ILayerNode* parent = _item->getParent();
93  if (parent != nullptr)
94  parent->upChildItemNode(_item);
95 
96  mOutOfDate = true;
97  }
98 
99  ILayerItem* SharedLayer::getLayerItemByPoint(int _left, int _top) const
100  {
101  if (!mIsPick)
102  return nullptr;
103 
104  if (mChildItem != nullptr)
105  {
106  ILayerItem* item = mChildItem->getLayerItemByPoint(_left, _top);
107  if (item != nullptr)
108  return item;
109  }
110  return nullptr;
111  }
112 
113  IntPoint SharedLayer::getPosition(int _left, int _top) const
114  {
115  return IntPoint(_left, _top);
116  }
117 
118  void SharedLayer::renderToTarget(IRenderTarget* _target, bool _update)
119  {
120  if (mChildItem != nullptr)
121  mChildItem->renderToTarget(_target, _update);
122 
123  mOutOfDate = false;
124  }
125 
126  void SharedLayer::resizeView(const IntSize& _viewSize)
127  {
128  if (mChildItem != nullptr)
129  mChildItem->resizeView(_viewSize);
130 
131  mViewSize = _viewSize;
132  }
133 
135  {
136  static VectorILayerNode nodes;
137  if (mChildItem == nullptr)
138  {
139  nodes.clear();
140  }
141  else
142  {
143  if (nodes.empty())
144  nodes.push_back(mChildItem);
145  else
146  nodes[0] = mChildItem;
147  }
148 
149  return EnumeratorILayerNode(nodes);
150  }
151 
153  {
154  return mChildItem == nullptr ? 0 : 1;
155  }
156 
158  {
159  size_t count = getLayerNodeCount();
160  MYGUI_ASSERT_RANGE(_index, count, "SharedLayer::getLayerNodeAt");
161 
162  return mChildItem;
163  }
164 
166  {
167  return mViewSize;
168  }
169 
171  {
172  if (mChildItem->isOutOfDate())
173  return true;
174 
175  return mOutOfDate;
176  }
177 
178 } // namespace MyGUI
MyGUI::Singleton< RenderManager >::getInstance
static RenderManager & getInstance()
Definition: MyGUI_Singleton.h:44
MyGUI::SharedLayer::renderToTarget
void renderToTarget(IRenderTarget *_target, bool _update) override
Definition: MyGUI_SharedLayer.cpp:118
MyGUI::utility::parseBool
bool parseBool(const std::string &_value)
Definition: MyGUI_StringUtility.h:189
MyGUI::SharedLayer::getSize
const IntSize & getSize() const override
Definition: MyGUI_SharedLayer.cpp:165
MyGUI_SharedLayer.h
MYGUI_ASSERT_RANGE
#define MYGUI_ASSERT_RANGE(index, size, owner)
Definition: MyGUI_Diagnostic.h:45
MyGUI::ILayerNode::getParent
virtual ILayerNode * getParent() const =0
MyGUI::SharedLayer::~SharedLayer
~SharedLayer() override
Definition: MyGUI_SharedLayer.cpp:24
MyGUI::ILayerNode
Definition: MyGUI_ILayerNode.h:30
MyGUI::SharedLayerNode
Definition: MyGUI_SharedLayerNode.h:18
MyGUI::SharedLayer::getLayerNodeCount
size_t getLayerNodeCount() const override
Definition: MyGUI_SharedLayer.cpp:152
MyGUI_LayerItem.h
MyGUI::types::TPoint< int >
MyGUI::VectorILayerNode
std::vector< ILayerNode * > VectorILayerNode
Definition: MyGUI_ILayerNode.h:23
MyGUI::ILayer::mName
std::string mName
Definition: MyGUI_ILayer.h:67
MyGUI_LayerNode.h
MyGUI::xml::Element
Definition: MyGUI_XmlDocument.h:159
MyGUI::ILayerNode::upChildItemNode
virtual void upChildItemNode(ILayerNode *_node)=0
MyGUI::xml::Element::findAttribute
bool findAttribute(const std::string &_name, std::string &_value)
Definition: MyGUI_XmlDocument.cpp:246
MyGUI::SharedLayer::mChildItem
SharedLayerNode * mChildItem
Definition: MyGUI_SharedLayer.h:62
MyGUI::SharedLayer::getEnumerator
EnumeratorILayerNode getEnumerator() const override
Definition: MyGUI_SharedLayer.cpp:134
MyGUI_Precompiled.h
MyGUI::LayerNode::getLayerItemByPoint
ILayerItem * getLayerItemByPoint(int _left, int _top) const override
Definition: MyGUI_LayerNode.cpp:118
MyGUI::SharedLayer::mIsPick
bool mIsPick
Definition: MyGUI_SharedLayer.h:61
MyGUI::Version
Definition: MyGUI_Version.h:18
MyGUI::SharedLayer::upChildItemNode
void upChildItemNode(ILayerNode *_node) override
Definition: MyGUI_SharedLayer.cpp:89
MyGUI::SharedLayer::mOutOfDate
bool mOutOfDate
Definition: MyGUI_SharedLayer.h:63
MyGUI::SharedLayerNode::countUsing
size_t countUsing() const
Definition: MyGUI_SharedLayerNode.cpp:29
MyGUI::SharedLayer::resizeView
void resizeView(const IntSize &_viewSize) override
Definition: MyGUI_SharedLayer.cpp:126
MyGUI::SharedLayerNode::addUsing
void addUsing()
Definition: MyGUI_SharedLayerNode.cpp:19
MyGUI::xml::ElementEnumerator
Definition: MyGUI_XmlDocument.h:115
MYGUI_ASSERT
#define MYGUI_ASSERT(exp, dest)
Definition: MyGUI_Diagnostic.h:34
MyGUI::SharedLayer::destroyChildItemNode
void destroyChildItemNode(ILayerNode *_node) override
Definition: MyGUI_SharedLayer.cpp:70
MyGUI::SharedLayer::getLayerItemByPoint
ILayerItem * getLayerItemByPoint(int _left, int _top) const override
Definition: MyGUI_SharedLayer.cpp:99
MyGUI::LayerNode::resizeView
void resizeView(const IntSize &_viewSize) override
Definition: MyGUI_LayerNode.cpp:110
MyGUI::SharedLayer::mViewSize
IntSize mViewSize
Definition: MyGUI_SharedLayer.h:64
MyGUI::SharedLayerNode::removeUsing
void removeUsing()
Definition: MyGUI_SharedLayerNode.cpp:24
MyGUI::LayerNode::isOutOfDate
bool isOutOfDate() const
Definition: MyGUI_LayerNode.cpp:322
MyGUI::Enumerator
Definition: MyGUI_Enumerator.h:49
MyGUI::types::TSize< int >
MyGUI::SharedLayer::createChildItemNode
ILayerNode * createChildItemNode() override
Definition: MyGUI_SharedLayer.cpp:58
MyGUI::SharedLayer::deserialization
void deserialization(xml::ElementPtr _node, Version _version) override
Definition: MyGUI_SharedLayer.cpp:29
MyGUI_RenderManager.h
MyGUI::RenderManager::getViewSize
virtual const IntSize & getViewSize() const =0
MyGUI::SharedLayer::getLayerNodeAt
ILayerNode * getLayerNodeAt(size_t _index) const override
Definition: MyGUI_SharedLayer.cpp:157
MyGUI::IntPoint
types::TPoint< int > IntPoint
Definition: MyGUI_Types.h:26
MyGUI::SharedLayer::isOutOfDate
bool isOutOfDate() const
Definition: MyGUI_SharedLayer.cpp:170
MyGUI::SharedLayer::setPick
void setPick(bool _pick)
Definition: MyGUI_SharedLayer.cpp:53
MyGUI::xml::Element::getElementEnumerator
ElementEnumerator getElementEnumerator()
Definition: MyGUI_XmlDocument.cpp:352
MyGUI
Definition: MyGUI_ActionController.h:15
MyGUI::xml::ElementEnumerator::next
bool next()
Definition: MyGUI_XmlDocument.cpp:100
MyGUI::LayerNode::renderToTarget
void renderToTarget(IRenderTarget *_target, bool _update) override
Definition: MyGUI_LayerNode.cpp:86
MyGUI::ILayerItem
Definition: MyGUI_ILayerItem.h:20
MyGUI::IRenderTarget
Definition: MyGUI_IRenderTarget.h:21
MyGUI::ILayer::getName
const std::string & getName() const
Definition: MyGUI_ILayer.h:29
MyGUI::SharedLayer::SharedLayer
SharedLayer()
Definition: MyGUI_SharedLayer.cpp:16
MyGUI::SharedLayer::getPosition
IntPoint getPosition(int _left, int _top) const override
Definition: MyGUI_SharedLayer.cpp:113
MyGUI::EnumeratorILayerNode
Enumerator< VectorILayerNode > EnumeratorILayerNode
Definition: MyGUI_ILayerNode.h:26