豫言 / 豫言操作系统显示 @ 0.1.0

已授显示面、像素呈现和基本输入事件的接口规范。

源码浏览已生成;不能解析的文件以纯文本展示,不表示通过类型检查。

规范.汉语.md

# 显示接口规范 0.1.0

本包仅用于有可见显示面的宿主。CF Worker 无显示面时不得宣称实现本包;它仍可用普通豫言库在 CPU 上生成图像字节。应用依赖本包即要求宿主实现它,具体显示面还须由宿主授予。

- `取得已授显示面` 按本次运行授予的名称取得显示面。名称未获授权返回 `未获授权`,已授权但暂时无显示面返回 `资源暂不可用`。
- 尺寸以物理像素数返回,先宽后高;暂时无法提供正尺寸时,`读取显示面尺寸` 返回 `资源暂不可用`,不得成功返回零尺寸。尺寸可在两次调用间变化。提交宽高必须为正,字节数必须精确等于宽×高×4;乘法溢出、零尺寸或字节长度不合返回 `输入无效`。提交时的宽高若与显示面当时的尺寸不同,返回 `资源暂不可用`,调用者应重新读取尺寸并绘制;宿主不得暗中缩放或裁切后报告成功。
- 画面像素按行优先、左上起点、每像素 RGBA8 四字节排列,通道范围零至二百五十五;RGB 使用 sRGB 编码,透明度为直通未预乘值。宿主可转换到自身显示格式,但不得改变应用提交的逻辑画面。物理显示与周围窗口背景的合成方式不属此包的可移植结果;需要一致外观的应用应提交透明度 255 的不透明像素。`画面已提交` 表示宿主已接收画面,不保证扫描输出或刷新完成。
- 输入坐标以同一显示面的左上角为原点,整数像素,向右为 x 正、向下为 y 正。指针事件的第三个整数为按钮编号:零主键、一辅助键、二次要键;其他编号由以后版本定义。按键名使用语义键名,首版固定 `左`、`右`、`上`、`下`、`回车`、`退格`、`空格`,并允许单个 Unicode 标量值;应用不得靠按键事件拼接中文输入法的文字。已提交的文本以 `文字输入` 事件交付,字符串可含多个 Unicode 标量值;按键事件和文字输入事件可以针对同一次用户操作分别出现,应用应只以 `文字输入` 更新文本内容。预编辑组合态与修饰键细节留待独立能力或以后版本。
- `等待输入事件` 可以挂起。同一显示面的事件按宿主观察顺序交付;不同显示面之间不承诺全局顺序。显示面关闭后先返回一次 `显示面已关闭`,再调用返回 `资源已失效`。首版同一显示面只允许一个等候者;第二个并发等候调用返回 `输入无效`,不夺走第一个等候者的事件。

规范样例须覆盖:错误尺寸、嵌零像素、透明通道、坐标方向、按键事件、关闭后使用及未授权显示面。GPU 加速不属于本包的先决条件。

规范.文言.md

# 显示接口规范

显示面须宿主所授;云工无面,不得称行此包。尺寸先宽后高,以像素计,可随时变。所交画面须宽高皆正,字数恰宽乘高乘四;提交尺寸异于面之现尺寸,则返暂不可用,客当重读重绘,不得暗缩裁而称成。逐行自左上,像素红绿蓝透各一字;红绿蓝循 sRGB,透值未预乘。实屏与窗外背景之合成不属可移之约,欲外观同则透值取二百五十五。宿主既受画面,可返已交;非谓已扫屏。

输入坐标以左上为原点,向右为横正,向下为纵正。键名定左、右、上、下、回车、退格、空格,亦可单通字符。输入法成文以「文字输入」事交,其文可兼多通字符;键事与文字事可同次皆有,客改文本惟据文字事,不得拼键以成汉字。候事可挂起;同面之事依所见序而交。面闭先告一度,后用则报失效;同面首版惟一候者。详约与验例见[汉语稿](规范.汉语.md)。