在3.2.0发现了一个好消息,MyGUI终于传出架构文档。
坏消息是文档是俄文的。恨得我想学俄语。
不过幸好有goolge翻译,决定结合源代码将文档啃出来。
友情支持,google翻译:
******************************************************************************************************
MyGUI 功能与架构
Widget 控件
GUI窗口小部件的基本构建块。 widget是一个矩形区域,一些属性和与用户交互的逻辑。部件支持创建一个更复杂的部件的层次,加载XML和其他功能:
•支持阿尔法管理的透明度。
•支持对齐。单一的控件可以和父控件,附加到父控件结构上。类似于设计模式上的组合
•支持面罩(面罩是任何图片)来控制鼠标采摘,即有能力来创建任意形状的部件,如圆形。注,这个面罩的意思应该是一个类似于任意形状的包容盒,可以建立起鼠标相应区。
•支持任意光标悬停在widget时,光标将采取指定的形式。
•支持视窗提示(工具提示)。不缝合的小部件窗口提示,但是当你想显示的窗口和隐藏widget可以告诉。因此,它是可以建造任何窗口上的提示。
不缝合的小部件窗口提示的意思可能是讲,Widget不予提示工具绑定,如果需要可以让widget创建。
•支持分离和附加到一个层次。这使浮动板的建设。
MyGUI 的layer 功能还是不错的。运用的gof上的flyweight 模式。
•独立的层次是一个层次rendringa。然而,对于复杂的部件,如客户区窗口(窗口,滚动等)或有一个弹出式的部件儿童(组合)使用逻辑的孩子不配合物理,他们像真正的孩子。例如,如果你隐藏在ComboBox,它隐藏在儿童名单的窗口的下拉列表是那些儿童,我们已经加入,虽然他们身体上的客户端部件。
这段说的意思是,widget组合模式。
•支持动态改变皮肤(皮肤)。 google 翻译对小短句分析的还是挺精确的!
•支持动态风格的变化(行为方式)。例如,任何孩子都可以做的流行,它不会切断父的大小,或重叠,重叠与其他孩子。
应该是laerNode 节点
事实上,小部件是虚拟的,它并没有出现,不知道如何做到这一点。widget部件有的sabvidzhetov列表,在于逻辑和显示其肩膀上。 sabvidzhety,它也是矩形区域,但内构件,它们也可以对齐并占据了内构件的任意位置。 sabvidzhety通过工厂创建,并可能有不同的类型。类型和设置在一个具体的皮肤sabvidzhetov名单。当我们指定了皮肤一个部件,它创建适当的sabvidzhety和输入列表部件。
sabvidzhety目前核心:
•MainSkin - sabvidzhet在它的纹理和矩形,在widget的顶部延伸。
•SubSkin - sabvidzhet表现质感和它的矩形,可能在widget的任意位置。
•TileRect - sabvidzhet在它的纹理和矩形,可在任意方向和任意大小的平铺自己。在XML中定义的参数。
•RawRect - sabvidzhet其顶部提供接入,从外部控制。可用于实现自定义部件。
•RotatingSkin - sabvidzhet显示纹理和矩形,它是可能的相对任意点到任意角度旋转。
的SimpleText - sabvidzhet显示文本。
EditText上 - sabvidzhet显示文字,支持文字,文字换行(自动换行),选择和光标位置的转变。
所以,还有什么可以做与sabvidzhetov。事实上,非常多,例如:
•Sabvidzhet绘图几何文字,而不是纹理。
•Sabvidzhet显示数字或其他复杂的几何形状(开罗时,Flash,SVG)。
•纹理的映射Sabvidzhet blitingom(GUI可以实现没有任何3D API)
Sabvidzhet显示复杂的数据(如HTML或RTF输出)
状态(状态,)
每个都有,命名集的数据sabvidzhet steyt,史泰登名单。默认情况下,状态“默认”。每个国家可指定纹理坐标,文字的位移,文字的颜色,或任何其他任意数据的不同数据。
用于显示widget的不同状态,例如,采取的关键。在一个简单的按钮,通常是4种状态:
- 禁用
- 正常
- 掠过
- 按下
每个sabvidzhet描述为所需steyt的数据,部件改变其状态时,它去所有sabvidzhetam,并设置当前状态。例如在Staten禁用的文字,通常做一个暗或灰压在Staten文本通常是向下移动一个或两个像素。
Layer (Леер,уровень)
层是一个抽象的概念,一个层,那里可能有一个或一组部件。此外,护栏可能是空的。为简单起见,我们可以想像,当我们在看监视器,看我们在层蛋糕的顶部。蛋糕的每一层将对应唯一的一条生命线。层是负责的行为和显示部件连接到这个命脉。每个层有一个类型,并通过工厂,即创建可以创建自己的风格和影响在这条生命线的部件包括显示屏或行为。什么样的尺轨目前使用的是在指定的XML,可以指定额外的数据为命脉。
层的核心:
•OverlappedLayer -层所有部件都在层的容器中,可能会重叠,可以提高到构件上方,按一下就可以了。
•SharedLayer - 层的所有部件有一个单一的层,每一个新的部件没有单独的缓冲区。这一层是用于优化,基本的应用,将永远不会相交的部件,如HUD元素。类似于脏矩阵?
可用于其他任务,如读层:
•Otrendrit部件呈现在质地的生命线,然后申请,纹理的3D对象。
•一些质地Otrendrit芸香部件和动画。
•Otrendrit芸香个别部件的纹理和显示,而不是部件(缓存)。
控制器(Controller)
控制器是用来改变任何部件的性能,取决于所用的时间的对象。控制器有不同的类型,并通过工厂创建的,它允许你创建任意控制器。它可以指定在任何部件的控制器所需的XML。是在编辑器的支持。
本控制器的核心是:
•ControllerPosition - 生产中的地位部件的变化,根据指定的功能。
•ControllerFadeAlpha - 变化的阿尔法。
•ControllerEdgeHide - 从窗口边缘移除的部件。
控制器可以用来改变任何属性的部件,一切都在你的想象力的限制。例如在ProgressBar的平稳变化,退信头模拟印刷等
资源(资源)
所有正在运行的GUI资源的数据。资源是不同类型的,也可以创建自己的类型。资源是一个对象本身的数据存储。
核心资源现状:
•ResourceImageSet - 描述一组图像动画和团体的支持。
•ResourceSkin - widget的皮肤(皮肤)的说明。
•ResourceImageSetPointer - 支持动画光标的说明。
•ResourceManualPointer - 光标在它的纹理和矩形区域的一个简单的描述。
•ResourceManualFont - 描述字体的纹理和字符的坐标。
•ResourceTrueTypeFont - 字体的描述产生FreeType库。
一些资源使用中的核心接口,它提供了一个机会,写自己的资源,如不同的字体,或使用更复杂的动画游标库代版本。
当然是MyGUI的重中之重Delegate
委托(委托)
委托是一个裹成一个对象的一个函数的指针。这使得函数调用类型安全和简单。无需使用图,表和回调接口。委托维护功能以下类型的指针:
•全局(静态)函数。
•静态类的方法。
•对象的方法。
•对象的虚方法。
其他特点
•独立的渲染器。它有可能使其他平台,或修改为所需的目的,如优化现有的书面。
•支持Unicode - UTF8的,UTF16,UTF32
•支持拖放
•W32剪贴板使用系统剪贴板的支持。
•支持HTML中的颜色标记,如一个字符串的推导,«#0000FFblue»,将被写入«蓝»蓝。
•快速系统的RTTI。
抽象数据类型。你可以使用zip档案,如自定义数据流。
•支持XML资源类型的版本。为了保持旧的格式。
外部工具和组件
·表格编辑(LayoutEditor)dlyaoblegcheniya“设计。
·发电机FreeType库的字体资源。
·简单的图像浏览器资源ImageSet。
·发电机vraperov,ispolzuetsyadlya生成托管的C ++和C#的包装。此外,您还可以配置成其他语言。
·为demonstratsiivozmozhnostey和技术使用GUI设置的演示。
·设置单元测试,测试一些关键的部件,或证明slozhnyhmetodik。