#toolkit #sdl2 #language #goal #ui #oo

dardan_ui

基于 SDL2 的简单 GUI 工具包。目标是使其易于使用,类似于面向对象语言中的 GUI 工具包。

2 个版本

使用旧的 Rust 2015

0.1.1 2018 年 2 月 14 日
0.1.0 2018 年 2 月 4 日

#887 in GUI

MIT 许可证

19KB
457 代码行

dardan_ui

Crates.io Crates.io Crates.io

dardan_ui 是一个基于 SDL2 的简单 GUI 工具包。该库应该易于使用,并类似于面向对象语言的 GUI 工具包。

我为什么要创建这个库?

  • 我开始学习 Rust,这是一个提高我技能的好项目。
  • 目前(据我所知)存在的 GUI 库很复杂、复杂或者需要作为服务器运行。
  • (主观)其他库不够直观。
  • (主观)在其他的库中创建自定义 ui 元素 是复杂的。

如何使用 (目标)

这是我打算在库完成时如何使用它。这里有一些简单的用例,但这个想法还不完整。

简单的 UI 应用程序

这是运行应用程序所需的内容,看起来相当简单

extern crate dardan_ui;

use dardan_ui::UiApp;

pub fn main() {
    UiApp::new().run();
}

响应式窗口和侧边栏

extern crate dardan_ui;

use std::rc::Rc;
use std::cell::RefCell;

use dardan_ui::{UiApp, UiColor, UiPair, UiRelSize, UiUnit};
use dardan_ui::combos::UiRowCombo;

pub fn main() {
    let mut app = UiApp::new();

    let mut main_container = UiRowCombo::new();

    let mut sidebar = UiRowCombo::new();
    sidebar.set_background_color(UiColor::salmon());
    main_container.add_child(UiRelSize::Px(200), Rc::new(RefCell::new(sidebar)));

    let mut sector = UiRowCombo::new();
    sector.set_background_color(UiColor::red());
    main_container.add_child(UiRelSize::Max, Rc::new(RefCell::new(sector)));

    app.set_main_element(Rc::new(RefCell::new(main_container)));

    app.run();
}

尽管这并不难理解,但这似乎并不简单。通过使用宏,它可以像这样

extern crate dardan_ui;

ui!( 
    define UiRowCombo : main_container {
        children : [
            UiRowCombo : sidebar {
                size_x : 200 px,
                size_y : Max,
                background_color : salmon
            },
            UiRowCombo : sector {
                size_x : Max,
                size_y : Max,
                background_color : red
            }
        ]
    }
);

pub fn main() {
    let mut app = UiApp::new();

    ui!(set_main app main_container);
    
    app.run();
}

如果我们不想在 main 中指定任何内容,那么我们可以用 ui![run main_container] 来替换整个 main 函数

贡献

因为这是我第一次用 Rust 开发的项目,所以会有很多错误,也有很多你可以改进的地方。其中一些是

  • Rust 最佳实践(我是第一次用 Rust 编程)
  • SDL2 的更好使用和改进(我也是第一次使用 SDL2)
  • 文档(即使是有文档的地方,我的英语也不太好)
  • 如果你发现错误并有新想法,只需为它们创建问题即可
  • 实现问题中的任务

依赖项

~17MB
~356K SLoC