使用旧的Rust 2015
0.2.0 |
|
---|
#40 in #skia
400KB
7.5K SLoC
Sciter的Rust绑定
查看此页面了解其他语言绑定(Delphi / D / Go / .NET / Python / Rust)。
简介
Sciter是一个可嵌入的跨平台 HTML/CSS/script 引擎,具有GPU加速渲染,旨在渲染现代桌面应用程序UI。它是一个紧凑的单个dll/dylib/so文件(4-8 mb)引擎,没有其他依赖项。
屏幕截图
查看桌面UI示例的截图画廊以及通过Rust GFX的DirectX UI集成。
描述
Sciter实际上是一个单库,包含以下内容
- HTML和CSS渲染引擎,基于在HTMLayout中使用的H-SMILE核心,
- Sciter.JS中的JavaScript,
- 类似JavaScript的脚本引擎 – TIScript的核心,它本身基于c-smile引擎,
- 持久数据库(也称为JSON DB),基于Konstantin Knizhnik的优秀数据库产品。
- 图形模块,使用由支持的平台提供的本地图形原语:Windows 7及更高版本的Direct2D,Windows XP的GDI+,MacOS的CoreGraphics,Linux/GTK的Cairo。但每个平台都可选择使用内置的Skia/OpenGL后端。
- 网络通信模块,它依赖于平台的HTTP客户端原语和/或Libcurl。
内部包含以下模块
- CSS – CSS解析器和解析的CSS规则集合等。
- HTML DOM – HTML解析器和DOM树实现。
- 布局管理器 – 一系列布局管理器 – 文本布局、默认块布局、弹性布局。也支持定位浮动元素。此模块负责布局计算的重头戏。此模块还负责布局的渲染。
- 输入行为 – 内置行为的集合 – “活动”DOM元素的代码:
<input>
、<select>
、<textarea>
等。 - 脚本模块 – 字节码编译器和虚拟机(VM)与压缩垃圾收集器(GC)。此模块还包含标准类和对象的运行时实现:数组、对象、函数等。
- 脚本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 - 由工具
sdk/bin/packfolder
生成的Sciter压缩归档。 - sciter::msg - 与后端无关的输入事件处理。
- sciter::om - Sciter对象模型,通过原生代码扩展Sciter。
- NSE - 原生Sciter扩展。
平台
- Windows
- OSX
- Linux
- Raspberry Pi
许可证
绑定库采用MIT许可证。Sciter引擎有自己的许可证条款和SDK使用最终用户许可协议。
依赖项
~115–420KB