#druid #reactive #toolkit #declarative

panoramix

Rust中响应式UI的原型实现

3个版本

0.0.3 2021年3月25日
0.0.2 2021年3月4日
0.0.1 2021年3月4日

#845GUI


panoramix-derive 中使用

MIT 许可证

170KB
4.5K SLoC

Panoramix

docs.rs license chat

Panoramix是Rust编程语言的实验性GUI框架。

该框架是数据驱动和声明式的,从React中获得一些灵感,并在Druid工具集之上实现(因此得名)。

它旨在使用简单、符合Rust语法的代码:Panoramix不使用unsafe代码、cells、mutexes或DSL宏。

入门

以下是我们“hello world”示例

use panoramix::elements::{Button, Label};
use panoramix::{component, Column, CompCtx, Element, NoEvent, RootHandler};

#[component]
fn HelloBox(_ctx: &CompCtx, _props: ()) -> impl Element {
    Column!(
        Label::new("Hello world!"),
        Button::new("Say hello").on_click(|_, _| {
            println!("Hello world");
        })
    )
}

fn main() -> Result<(), panoramix::PlatformError> {
    RootHandler::new(HelloBox::new(()))
        .with_tracing(true)
        .launch()
}

有关详细信息,请参阅文档,以及编写新组件教程。

贡献

欢迎提出问题和提交PR。

特别欢迎添加“基本块”小部件的PR。

有关提交PR时应遵循的规则,请参阅CONTRIBUTING.md。问题没有强制格式,但如果您提交了一个问题,请遵循常识性规则:要有礼貌,要专业,要有计划消灭您遇到的每个人,如果您有问题,请包括详细的复现步骤。

有关项目代码的高级展示,请参阅ARCHITECTURE.md

要提问和讨论开发工作,请访问Druid的Zulip聊天中的#panoramix频道。

用法

在您的Cargo.toml中添加以下内容

panoramix = "0.1.0"

如果您想使用最新版本,请添加以下内容代替

panoramix = { git = "https://github.com/PoignardAzur/panoramix.git" }

注意Linux用户:Panoramix是基于Druid构建的,使用GTK后端,需要GTK3的开发版本。有关安装信息,请参阅GTK安装页面

例如,在基于Ubuntu的发行版中,您应该运行sudo apt install libgtk-3-dev

路线图

短期路线图如下

  • 编写更多测试,并尝试使我们所使用的每项功能都更具可测试性(特别是Druid)。
  • 编写基准测试。
  • 改进错误处理,并编写辅助宏。
  • 尽可能简化常见、简单的任务(例如编写任务列表、编写菜单等)。

从长远来看,有两个主要目标

  • 实现与React的功能兼容。
  • 使用Panoramix构建一个类似chrome-devtools的调试框架。 TODO - 编写关于此的博客文章。

有关详细信息,请参阅ROADMAP.md

作者

这个crate几乎全部由Olivier FAURE编写。任何其他贡献者都将添加到AUTHORS.md

本项目得以实现得益于Raph Levien和Colin Rofls极其整洁且易于接近的工作,以及他们的一些指导,以及与Druid社区的互动。特别是,Panoramix受到Crochet的启发。

依赖项

~10–18MB
~226K SLoC