2 个版本
0.3.4 | 2021 年 4 月 15 日 |
---|---|
0.3.3 | 2020 年 10 月 13 日 |
#553 在 GUI 中
每月 25 次下载
用于 titik
105KB
2K SLoC
Expanse
Expanse 是 stretch 的分支,发布了最新的代码和一些额外的改进
Expanse
Expanse 是用 Rust 编写的 Flexbox 实现。
目标
在开始使用或为 stretch 贡献之前,了解项目的核心目标是有好处的。这些是我们正在努力实现的目标,不一定是我们目前支持的功能。
- 高性能
- 跨平台
- 小型二进制大小
- 支持多个布局系统
- 多线程布局
- 对大多数语言的编程语言绑定
使用
# Cargo.toml
[dependencies]
expanse = "0.3.3"
// main.rs
use expanse::geometry::Size;
use expanse::style::*;
fn main() -> Result<(), expanse::Error> {
let mut stretch = expanse::node::Stretch::new();
let child = stretch.new_node(
Style { size: Size { width: Dimension::Percent(0.5), height: Dimension::Auto }, ..Default::default() },
vec![],
)?;
let node = stretch.new_node(
Style {
size: Size { width: Dimension::Points(100.0), height: Dimension::Points(100.0) },
justify_content: JustifyContent::Center,
..Default::default()
},
vec![child],
)?;
stretch.compute_layout(node, Size::undefined())?;
dbg!(stretch.layout(node)?);
}
贡献
欢迎贡献。虽然我们要求你在编写代码之前尽早打开问题或拉取请求(以便我们可以在实现之前讨论解决方案和添加),但我们非常乐意接收以下特定领域的贡献。
- 减少二进制大小
- 运行时性能
- 确保构建/测试环境在非 macOS 平台上运行良好
- 备用布局系统(例如网格布局?)
- Web 兼容性测试
- RTL 支持
- 平台绑定
- API 改进
- 文档 & 示例
安装
如果你还没有安装 Rust,你首先需要安装它以及我们使用的某些组件。有关 Rust 的更多信息,请参阅其 网站。
curl https://sh.rustup.rs -sSf | sh
rustup component add rustfmt
rustup component add clippy
完成这些后,您可以克隆仓库并进行一些基本的检查,以确保一切正常工作。
git clone https://github.com/ivanceras/expanse.git
cd expanse
cargo test
如果您对 API 进行了任何更改,还应更新并运行位于 /bindings/*
中的所有平台绑定的测试。
测试
Expanse 通过验证在 Expanse 中编写的布局与 Chrome 中的布局相同来测试 Expanse。这是通过在 HTML 中渲染等效布局并生成一个 Rust 测试用例来完成的,该测试用例断言当通过 stretch 运行时结果布局相同。
您可以在不设置webdriver环境的情况下运行这些测试,但如果您想添加任何测试用例,则需要安装chromedriver。如果您在macOS上进行开发,可以通过brew轻松完成。
brew tap homebrew/cask
brew cask install chromedriver
一旦您已安装chromedriver并将其添加到PATH
中,您可以通过运行以下命令重新生成所有测试:cargo run --package gentest
。
要添加新的测试用例,请将另一个HTML文件添加到/test_fixtures
,按照当前测试作为新测试的模板。
基准测试
基准测试建立在与测试相同的基础设施之上,实际上基准测试是自动从测试固定值中生成的,就像测试一样。运行cargo bench
在本地运行基准测试。
与Yoga的关系
Yoga是用C语言编写的跨平台Flexbox实现。Yoga是一个出色的项目,但存在一些基本问题,我们希望解决。与Yoga相比,我们旨在更严格地遵循Web标准,最终支持多个布局算法的灵活架构,以及包括多线程布局在内的未来性能改进。除此之外,我们旨在使用更安全的语言,以及更现代的代码库。
许可
Copyright (c) 2020 Jovansonlee Cesar
Copyright (c) 2018 Visly Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
依赖关系
~2–2.7MB
~59K SLoC