43 个版本
使用旧的 Rust 2015
0.5.58 | 2022年2月21日 |
---|---|
0.5.57 | 2021年7月3日 |
0.5.56 | 2021年4月28日 |
0.5.55 | 2021年3月29日 |
0.4.16 | 2017年3月13日 |
#68 in 图形API
150 每月下载量
在 3 crates 中使用
375KB
7K SLoC
Sciter 的 Rust 绑定
查看 此页面 以获取其他语言绑定(Delphi / D / Go / .NET / Python / Rust)。
简介
Sciter 是一个可嵌入的多平台 HTML/CSS/script 引擎,具有GPU加速渲染功能,旨在渲染现代桌面应用程序UI。它是一个紧凑的单个dll/dylib/so文件引擎,无需任何其他依赖项。
屏幕截图
查看桌面UI示例的 截图画廊 和通过 Rust GFX 的 DirectX UI集成。
描述
实际上,Sciter 是一个单库,包含以下内容
- 基于 H-SMILE 核心(在 HTMLayout 中使用)的 HTML 和 CSS 渲染引擎,
- Sciter.JS 中的 JavaScript
- JavaScript 类似的 脚本引擎 – TIScript 的核心,它本身基于 c-smile 引擎,
- 基于 Konstantin Knizhnik 的优秀数据库产品的持久 数据库(即 JSON DB)。
- 使用支持的平台提供的本地图形原语实现的图形模块:Windows 7及以上版本的Direct2D,Windows XP的GDI+,MacOS的CoreGraphics,Linux/GTK的Cairo。每个平台还可以选择使用内置的Skia/OpenGL后端。
- 网络通信模块,它依赖于平台HTTP客户端原语和/或Libcurl。
内部包含以下模块:
- CSS – CSS解析器和解析的CSS规则集合等。
- HTML DOM – HTML解析器和DOM树实现。
- 布局管理器 – 包含各种布局管理器 – 文本布局、默认块布局、弹性布局。还支持定位浮动元素。此模块负责进行布局计算。此模块还负责布局的渲染。
- 输入行为 – 内置行为的集合 – “活动”DOM元素背后的代码:例如,输入、选择、文本区域等。
- 脚本模块 – 源到字节码编译器和具有压缩垃圾回收器的虚拟机(VM)。此模块还包含标准类和对象的运行时实现:数组、对象、函数等。
- 脚本DOM – 运行时类,将DOM和DOM视图(即窗口)暴露给脚本。
- 图形抽象层 – 抽象图形实现,将上述模块与特定平台细节隔离开。
- Direct2D/DirectWrite图形后端(Windows);
- GDI+图形后端(Windows);
- CoreGraphics后端(Mac OS X);
- Cairo后端(所有Linux平台的GTK);
- Skia/OpenGL后端(所有平台)
- 核心原语 – 常用原语集合:字符串、数组、哈希图等。
Sciter支持HTML5规范中定义的所有标准元素,并有所扩展。CSS扩展以更好地支持桌面UI开发,例如流和弹性单位、垂直和水平对齐、操作系统主题。
Sciter SDK附带一个内置DOM检查器、脚本调试器和文档查看器的“浏览器”演示。
请访问https://sciter.com网站及其文档资源,了解更多关于引擎原理、架构等信息。
入门指南
- 下载Sciter.TIS或Sciter.JS SDK并将其提取到某个位置。
- 将相应的目标平台二进制文件添加到PATH(
bin.win
、bin.osx
或bin.lnx
)。 - 如果您尚未安装,您需要安装GTK 3开发工具才能继续:sudo apt-get install libgtk-3-dev
- 构建crate并运行一个最小的sciter示例:
cargo run --example minimal
。 - 对于您的应用程序,在Cargo.toml中添加以下依赖项:
sciter-rs = "*"
。
简要概述
以下是一个最小的sciter应用程序
extern crate sciter;
fn main() {
let mut frame = sciter::Window::new();
frame.load_file("minimal.htm");
frame.run_app();
}
它看起来像这样
互操作性
关于 tiscript 或 JavaScript 函数的调用
use sciter::{Element, Value};
let root = Element::from_window(hwnd);
let result: Value = root.call_function("namespace.name", &make_args!(1,"2",3));
从脚本中调用 Rust 可以实现如下
struct Handler;
impl Handler {
fn calc_sum(&self, a: i32, b: i32) -> i32 {
a + b
}
}
impl sciter::EventHandler for Handler {
dispatch_script_call! {
fn calc_sum(i32, i32);
}
}
我们还可以从 TIScript 访问此函数
// `view` represents the window where this script is running.
// `stdout` stream is a standard output stream (shell or debugger console, for example)
stdout.printf("2 + 3 = %d\n", view.calc_sum(2, 3));
或从 JavaScript
// `Window.this` represents the window where this script is running.
console.log("2 + 3", Window.this.xcall("calc_sum", 2, 3));
有关更复杂的使用,请查看 rust-sciter/examples 文件夹.
库文档.
目前支持什么
- sciter::window 结合了窗口创建、宿主和事件处理器。
- sciter::host 具有基本的事件处理,需要重新设计。
- sciter::event_handler 具有事件处理和自动将脚本调用分发到原生代码。
- sciter::dom 用于 HTML DOM 访问和操作方法。
- sciter::value Rust 封装。
- sciter::behavior_factory - 原生行为的全局工厂。
- sciter::graphics - 平台无关的图形原生接口(可以在原生行为中使用)。
- sciter::request - 资源请求对象,用于自定义资源下载和处理。
- sciter::video - 自定义视频渲染。
- sciter::archive - Sciter 的压缩归档,由
sdk/bin/packfolder
工具生成。 - sciter::msg - 与后端无关的输入事件处理。
- sciter::om - Sciter 对象模型,通过原生代码扩展 Sciter。
- NSE - 原生 Sciter 扩展。
平台
- Windows
- OSX
- Linux
- Raspberry Pi
许可
绑定库在 MIT 许可证 下授权。Sciter 引擎有自己的 许可证条款 和 SDK 使用最终用户许可协议。