文章目录
- MyGUI探索(三)MyGUI页面布局
- 一、layout文件
- 二、Layer的类型
一、layout文件
先上案例
MyGUI中的页面布局会调用layout文件,格式为XML。
Widget标签中包含了一个窗口界面的信息,type类型,skin皮肤,position位置,layer层级,name名字等,其中position有四个参数,从左到右依次是X,Y,W,H,界面中坐标系原点位于屏幕左上角,左上角向右为X轴正方向,向下为Y轴正方向,w为界面的宽度,H为界面的高度。
详细的规则可以看MyGUI中MyGUI_Media目录下的文件,里面包含了所有MyGUI中使用的xml文件。下面说一下layer。
二、Layer的类型layer有两种类型:Shared和Overlapped。
我们看源码进行一个对比
首先,Shared比Overlapped的默认构造函数中多了一个mChildItem(nullptr)
OverlappedLayer::OverlappedLayer() : mIsPick(false), mOutOfDate(false) { mViewSize = RenderManager::getInstance().getViewSize(); }
SharedLayer::SharedLayer() : mIsPick(false), mChildItem(nullptr), mOutOfDate(false) { mViewSize = RenderManager::getInstance().getViewSize(); }
再来看各自的createChildItemNode()
ILayerNode* SharedLayer::createChildItemNode() { if (mChildItem == nullptr) mChildItem = new SharedLayerNode(this); mChildItem->addUsing(); mOutOfDate = true; return mChildItem; }
ILayerNode* OverlappedLayer::createChildItemNode() { // создаем рутовый айтем ILayerNode* node = new LayerNode(this); mChildItems.push_back(node); mOutOfDate = true; return node; }
OverLapped中新建的节点通过push_back()依次从后面插入,因此OverLapped是有序的。
Shared则不同,使用的是addUsing()
void SharedLayerNode::addUsing() { mCountUsing++; }
发现这是一个计数器,只统计数量,是无序的。
再看
void OverlappedLayer::upChildItemNode(ILayerNode* _item) { // если есть отец, то пусть сам рулит ILayerNode* parent = _item->getParent(); if (parent != nullptr) { parent->upChildItemNode(_item); mOutOfDate = true; return; } if ((2 > mChildItems.size()) || (mChildItems.back() == _item)) return; for (VectorILayerNode::iterator iter = mChildItems.begin(); iter != mChildItems.end(); ++iter) { if ((*iter) == _item) { mChildItems.erase(iter); mChildItems.push_back(_item); mOutOfDate = true; return; } } MYGUI_EXCEPT("item node not found"); }
void SharedLayer::upChildItemNode(ILayerNode* _item) { // если есть отец, то пусть сам рулит // if there is a father, then let him steer ILayerNode* parent = _item->getParent(); if (parent != nullptr) parent->upChildItemNode(_item); mOutOfDate = true; }
可以看出
OverLapped把ChildItemNode都放在一个vector容器中,通过迭代器进行插入和删除的 *** 作,每个Child之间有对应关系。
Shared则是直接指向上一层的父节点。一个父节点可以有多个Child,因此是个一对多或者一对一的关系,跟OverLapped相比,层级关系显得较为混乱。
因此可以认为,OverLapped是有层级的,Shared是没有层级的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)