#gtk #serde #skia #opengl #api-bindings

已撤回 serde_sciter

Sciter引擎的Serde支持

使用旧的Rust 2015

0.2.0 2018年3月19日

#40 in #skia

MIT 许可证

400KB
7.5K SLoC

Sciter的Rust绑定

GHA status AppVeyor status Travis status Minimum supported Rust version Documentation License Join the forums at https://sciter.com/forums

查看此页面了解其他语言绑定(Delphi / D / Go / .NET / Python / Rust)。


简介

Sciter是一个可嵌入的跨平台 HTML/CSS/script 引擎,具有GPU加速渲染,旨在渲染现代桌面应用程序UI。它是一个紧凑的单个dll/dylib/so文件(4-8 mb)引擎,没有其他依赖项。

屏幕截图

查看桌面UI示例的截图画廊以及通过Rust GFXDirectX 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检查器、脚本调试器和文档查看器的“浏览器”演示。

Sciter tools

请查看 https://sciter.com 网站及其 文档资源,以了解更多关于引擎原理和架构的信息。

入门指南

  1. 下载 Sciter.TIS 或 Sciter.JS SDK 并将其解压到某个位置。
  2. 将相应的目标平台二进制文件添加到PATH(bin.winbin.osxbin.lnx)。
  3. 如果您尚未安装,您需要安装GTK 3开发工具才能继续:sudo apt-get install libgtk-3-dev
  4. 构建crate并运行一个最小的sciter示例:cargo run --example minimal
  5. 对于您的应用程序,请将以下依赖项添加到Cargo.toml:sciter-rs = "*"

简要概述

这是一个最小的sciter应用程序

extern crate sciter;

fn main() {
    let mut frame = sciter::Window::new();
    frame.load_file("minimal.htm");
    frame.run_app();
}

它看起来像这样

Minimal sciter sample

互操作性

关于 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 文件夹以获取更复杂的用法.

库文档.

目前支持的功能

平台

  • Windows
  • OSX
  • Linux
  • Raspberry Pi

许可证

绑定库采用MIT许可证。Sciter引擎有自己的许可证条款SDK使用最终用户许可协议

依赖项

~115–420KB