正在设计实现一个GUI框架,大家如果感兴趣,请参与讨论吧

zwcloud 发布于 2016/12/23 22:08
阅读 351
收藏 0

框架已经断断续续写了1年多。名叫Hello ImGui(暂定),使用语言是C#。去年曾经在开源中国发帖子提到过

关于ImGui大家可以去看看dear ImGui这个C++写的IMGUI库, 以及这篇知乎的答案

主要是想要大家一起来看看API的设计如何。 请多多批评指正。

API的规范文档在这里(不是全部,但是我想初版要暴露的API应该是类似这些的):
https://github.com/zwcloud/ImGui-Spec/wiki/IMGUI-API-spec

这个贴可能没有说清楚,请大家指出有什么缺少的,有什么还应该写清楚的。(可惜开源中国的问答不能再次编辑,后面补充吧。)

(如果需要实时交流请将邮箱私聊发给我,我联系您。)

附上一个例程:

using ImGui;

namespace LayoutDemo
{
    public partial class Form1 : Form
    {
        public Form1()
            : base(new Point(400, 300), new Size(800, 600))
		{
		}

        public override void Dispose()
        {
        }

        protected override void OnGUI()
        {
            GUILayout.BeginVertical(Skin.current.Box);
            {
                GUILayout.Label("auto-sized");
                GUILayout.Button("Top Button");
                GUILayout.BeginHorizontal();
                {
                    GUILayout.Button("Middle Button##1");
                    GUILayout.Button("Middle Button##2");
                    GUILayout.Button("Middle Button##3");
                }
                GUILayout.EndHorizontal();
                GUILayout.Button("Bottom Button");
            }
            GUILayout.EndVertical();
            GUILayout.Space(10);
            GUILayout.BeginVertical(Skin.current.Box);
            {
                GUILayout.Label("fixed-size");
                GUILayout.BeginHorizontal();
                {
                    GUILayout.Button("Width:200", GUILayout.Width(200));
                    GUILayout.Button("Width:100", GUILayout.Width(100));
                    GUILayout.Button("Width:300", GUILayout.Width(300));
                }
                GUILayout.EndHorizontal();
            }
            GUILayout.EndVertical();
            GUILayout.Space(10);
            GUILayout.BeginVertical(Skin.current.Box);
            {
                GUILayout.Label("stretched: evenly spaced");
                GUILayout.BeginHorizontal();
                {
                    GUILayout.Button("Button0", GUILayout.ExpandWidth(true));
                    GUILayout.Button("Button1", GUILayout.ExpandWidth(true));
                    GUILayout.Button("Button2", GUILayout.ExpandWidth(true));
                }
                GUILayout.EndHorizontal();
            }
            GUILayout.EndVertical();
            GUILayout.Space(10);
            GUILayout.BeginVertical(Skin.current.Box);
            {
                GUILayout.Label("stretched: spaced with factors");
                GUILayout.BeginHorizontal(GUILayout.Width(500));
                {
                    GUILayout.Button("Stretch:1", GUILayout.StretchWidth(1));
                    GUILayout.Button("Stretch:2", GUILayout.StretchWidth(2));
                    GUILayout.Button("Stretch:3", GUILayout.StretchWidth(3));
                }
                GUILayout.EndHorizontal();
            }
            GUILayout.EndVertical();
        }
    }
}

结果(字体的抗锯齿显示还没做,现在比较丑

主要是想要大家一起来看看API的设计如何。不讨论其他类型的GUI框架,不进行比较。

已在知乎发表问题: https://www.zhihu.com/question/53979466

加载中
0
乌龟壳
乌龟壳
fui这种东西html是一个好例子,至少支持xml配置界面和属性会方便很多吧
快速开发师
快速开发师
回复 @乌龟壳 : 数据库表也不错哈,关键在于方便地及时调试,及时录入,数据库表配置比起其它的东西来要好的多,但就是不方便维护,因为不是源代码,也不方便传输
乌龟壳
乌龟壳
回复 @zwcloud : gui打错了一个字母,我是说支持通过xml配置生成界面有时候比代码更方便
zwcloud
zwcloud
fui是? 抱歉,此贴不讨论其他类型的GUI,不作比较,只讨论ImGui的API的设计。
返回顶部
顶部