# Clat GUI
高性能、跨平台的Rust桌面端GUI框架。
## 特点
- **高性能渲染**:基于wgpu实现的现代图形渲染管道
- **跨平台兼容**:支持Windows、macOS和Linux等主流桌面平台
- **简洁易用的API**:提供直观、符合Rust习惯的API接口
- **灵活的布局系统**:支持水平布局、垂直布局和网格布局
- **可定制的组件**:提供基础UI组件,并支持自定义组件开发
- **响应式设计**:自动适应窗口大小变化
## 安装
将以下内容添加到你的`Cargo.toml`文件中:
```toml
[dependencies]
clat_gui = "0.1.0"
```
## 快速开始
以下是一个简单的示例,展示如何创建一个基本窗口:
```rust
use clat_gui::Application;
use anyhow::Result;
fn main() -> Result<()> {
// 创建应用程序实例
let mut app = Application::new();
// 创建窗口
app.create_window("Clat Desktop", 800, 600)?;
// 运行应用程序
app.run();
}
```
## 基本组件
### 按钮
```rust
use clat_gui::components::button::Button;
// 创建按钮
let mut button = Button::new(100.0, 100.0, 200.0, 50.0, "点击我");
// 设置点击事件处理
});
```
### 标签
```rust
use clat_gui::components::label::Label;
// 创建标签
let mut label = Label::new(100.0, 200.0, "这是一个标签");
// 设置文本颜色
label.set_color([1.0, 0.0, 0.0, 1.0]); // 红色文本
// 设置字体大小
label.set_font_size(20.0);
```
## 布局系统
### 水平布局
```rust
use clat_gui::layout::{LayoutManager, LayoutConstraints};
use clat_gui::layout::containers::HorizontalLayout;
// 创建布局管理器
let mut layout_manager = LayoutManager::new();
// 生成容器ID
let container_id = layout_manager.generate_id();
// 创建水平布局容器
let mut horizontal_layout = HorizontalLayout::new(10.0, 20.0); // 间距10,内边距20
// 注册布局策略
layout_manager.register_strategy(container_id, Box::new(horizontal_layout));
// 添加子组件
layout_manager.add_child(container_id, child_id_1, 1.0); // 权重1.0
layout_manager.add_child(container_id, child_id_2, 2.0); // 权重2.0
// 计算布局
let constraints = LayoutConstraints::default();
layout_manager.calculate_layout(container_id, constraints);
```
### 垂直布局
```rust
use clat_gui::layout::containers::VerticalLayout;
// 创建垂直布局容器
let mut vertical_layout = VerticalLayout::new(10.0, 20.0); // 间距10,内边距20
// 注册布局策略并添加子组件(与水平布局类似)
```
### 网格布局
```rust
use clat_gui::layout::containers::GridLayout;
// 创建网格布局容器
let mut grid_layout = GridLayout::new(3, 3, 100.0, 50.0, 5.0, 10.0); // 3x3网格,单元格大小100x50,间距5,内边距10
// 设置单元格跨度
grid_layout.set_cell_span(child_id, 0, 0, 1, 2); // 第0行第0列,跨越1行2列
```
## 渲染系统
```rust
use clat_gui::render::Renderer;
// 创建渲染器(通常由Application内部管理)
let renderer = Renderer::new(device, queue, surface, config);
// 开始渲染帧
let (output, view, mut encoder) = renderer.begin_frame()?;
// 创建渲染通道
let mut render_pass = renderer.create_render_pass(&mut encoder, &view, Some(wgpu::Color {
r: 0.1,
g: 0.2,
b: 0.3,
a: 1.0,
}));
// 绘制基本图形
renderer.draw_rect(&mut render_pass, 100.0, 100.0, 200.0, 100.0, [1.0, 0.0, 0.0, 1.0]);
renderer.draw_circle(&mut render_pass, 400.0, 200.0, 50.0, [0.0, 1.0, 0.0, 1.0]);
// 结束渲染帧
renderer.end_frame(output, encoder);
```
## 开发说明
### 构建项目
```bash
cargo build
```
### 运行示例
```bash
cargo run --example simple_app
```
### 运行测试
```bash
cargo test
```
## 许可证
本项目采用MIT许可证,详情请查看LICENSE文件。
## 贡献
欢迎提交问题和Pull Request来帮助改进这个项目!