节点文件格式 [src]
GSK 渲染节点可以使用诸如 gsk_render_node_serialize()
和 gsk_render_node_deserialize()
等 API 序列号化和反序列号化。使用此功能的目的是进行开发,主要用于 GTK 的开发,方法是创建测试套件和基准测试、在错误报告中交换节点等。 GTK 包含 gtk4-node-editor
应用程序,用于创建此类测试文件。
该格式是一种文本格式,遵循 CSS 语法规则。具体而言,这意味着当解析时,每个字节数组都将生成一个渲染节点,因为有一个定义的错误恢复方法。有关错误处理的更多详细信息,请参阅解析 API 的文档。
使用 CSS 值定义语法的 节点文本表示法的语法如下所示
document: <@-rule>*<node>
@-rule: `cicp` "name" { <property>* }
node: container [ "name" ] { <document> } | <node-type> [ "name" ] { <property>* } | "name"
property: <property-name>: <node> | <value> ;
每个节点有其自己的 <node-type>
,并支持自定义属性集,每个属性集有其自己的 <property-name>
和语法。以下段落记录了每个节点及其属性。
序列号化时,如果属性值等于默认值,则不会序列号化此值。序列号化的目的是尽可能生成更小的输出。
要在字符串中嵌入换行符,请使用 \A。要将一个长字符串拆分为多行,请使用转义符 . 来转义新行。
名称
节点
可以通过在其定义中 <node-type>
后面添加字符串来给节点一个名称。可以在文档的稍后部分使用仅指定标识节点的名称来使用该节点。
纹理
就像节点一样,可以通过名称引用纹理。定义已命名纹理时,名称必须放在 URL 之前。
颜色状态
颜色状态由一个标识符(用于内置标识符)或一个字符串(用于自定义标识符)表示。
color-state: <ident> | <string>
可以使用 @cicp 规则在文档开头定义自定义颜色状态。
@cicp 规则的格式为:
@cicp "name" {
...
}
可以为自定义颜色状态设置以下属性:
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
原色 | <整数> |
2 | 始终 |
传输 | <整数> |
2 | 始终 |
矩阵 | <整数> |
2 | 始终 |
范围 | <范围> |
完全 | 非默认值 |
请注意,始终需要指定原色、传输和矩阵属性,因为 GTK 不允许创建已将这些属性设置为 2(==未指定)的颜色状态对象。
范围可以具有以下值:
range: narrow | full
颜色
可以使用 CSS 颜色语法的变体来指定颜色:
color(<color-state> <number> <number> <number> ["/" <number>])
用于 sRGB 颜色的传统语法仍然有效:
rgba(<number>, <number>, <number>, <number)
rgb(<number, <number>, <number>)
矩形
可以通过四个整数(x、y、宽和高)来指定矩形
rect: <number> <number> <number> <number>
圆角矩形使用类似 CSS 的语法:
rounded-rect: <rect> [ "/" <number>{1,4} [ "/" <number>{1,4} ] ]
节点
容器
container 节点是一个特殊节点,它允许指定子节点列表。其内容遵循与空文档相同的规则。
混合
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
底部 | <node> |
颜色 { } | 始终 |
模式 | <混合模式> |
正常 | 非默认值 |
顶部 | <node> |
颜色 { } | 始终 |
使用指定属性创建类似于 gsk_blend_node_new()
的节点。
模式属性的值可能为
blend-mode: normal | multiply | screen | overlay | darken |
lighten | color-dodge | color-burn | hard-light |
soft-light | difference | exclusion | color |
hue | saturation | luminosity
模糊
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
模糊 | <数字> |
1 | 非默认值 |
子级 | <node> |
颜色 { } | 始终 |
使用指定属性创建类似于 gsk_blur_node_new()
的节点。
边框
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
颜色 | <颜色>{1,4} |
黑色 | 非默认值 |
轮廓 | <圆角矩形> |
50 | 始终 |
宽度 | <数字>{1,4} |
1 | 非默认值 |
使用指定属性创建类似于 gsk_border_node_new()
的节点。
关于颜色和宽度属性,这些值遵循典型的 CSS 顺序:顶部、右侧、底部、左侧。如果未给出最后一个/左侧的值,则使用第二个/右侧的值。如果未给出第三个/底部的值,则使用第一个/顶部的值。并且如果未给出第二个/右侧的值,则对每 4 个值使用第一个/顶部的值。
开罗
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
边界 | <矩形> |
无 | 始终 |
像素 | <url> |
无 | 非默认值 |
脚本 | <url> |
无 | 非默认值 |
像素是 png 数据的 base64 编码数据 url。脚本是开罗脚本的 base64 编码数据 url。
剪辑
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
子级 | <node> |
颜色 { } | 始终 |
剪辑 | <圆角矩形> |
50 | 始终 |
使用指定属性创建类似于 gsk_clip_node_new()
的节点。
作为扩展,此节点允许为剪辑属性指定圆角矩形。如果该矩形确实是圆形的,则将创建类似于 gsk_rounded_clip_node_new()
的节点。
颜色
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
边界 | <矩形> |
50 | 始终 |
颜色 | <颜色> |
FF00CC |
始终 |
使用指定属性创建类似于 gsk_color_node_new()
的节点。
此颜色选择为错误粉红色,以便使其可见,同时提醒人们更改。
颜色矩阵
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
子级 | <node> |
颜色 { } | 始终 |
矩阵 | <转换> |
无 | 非默认值 |
偏移量 | <数字>{4} |
0 0 0 0 | 非默认值 |
使用指定属性创建类似于 gsk_color_matrix_node_new()
的节点。
矩阵属性接受一个matrix3d()
制作来单独指定所有 16 个值。
圆锥梯度
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
边界 | <矩形> |
50 | 始终 |
中心 | <点> |
25, 25 | 始终 |
旋转 | <数字> |
0 | 始终 |
停止 | <颜色停止> |
0 AF0 ,1 F0C |
始终 |
插值 | <颜色状态> |
srgb | 非默认值 |
色调插值 | <色调内插> |
较短 | 非默认值 |
使用指定属性创建类似于 gsk_conic_gradient_node_new()
的节点。
色调插值属性的值可能为
hue-interpolation: shorter | longer | increasing | decreasing
交叉淡化
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
结束 | <node> |
颜色 { } | 始终 |
进度 | <数字> |
0.5 | 非默认值 |
开始 | <node> |
颜色 { } | 始终 |
使用指定属性创建类似于 gsk_cross_fade_node_new()
的节点。
调试
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
子级 | <node> |
颜色 { } | 始终 |
信息 | <字符串> |
“” | 非默认值 |
使用指定属性创建类似于 gsk_debug_node_new()
的节点。
填充
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
子级 | <node> |
见下方 | 始终 |
路径 | <字符串> |
“” | 始终 |
填充规则 | <填充规则> |
绕线 | 始终 |
使用给定属性创建一个节点,如 gsk_fill_node_new()
。
默认子节点为默认颜色节点,但它是由路径边界创建的。
填充规则属性的可能值为
fill-rule: winding | even-odd
glshader
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
边界 | <矩形> |
50 | 始终 |
源代码 | <字符串> |
“” | 始终 |
参数 | <uniform 值> |
无 | 非默认值 |
child1 | <node> |
无 | 非默认值 |
child2 | <node> |
无 | 非默认值 |
child3 | <node> |
无 | 非默认值 |
child4 | <node> |
无 | 非默认值 |
创建一个 GLShader 节点。sourcecode
必须是 GLSL 片段着色器。args
必须与该着色器中声明的简单类型的 uniforms 相匹配,且按顺序用逗号分隔。child
属性必须与着色器中的采样器 uniforms 相匹配。
inset-shadow
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
模糊 | <数字> |
0 | 非默认值 |
颜色 | <颜色> |
黑色 | 非默认值 |
dx | <数字> |
1 | 非默认值 |
dy | <数字> |
1 | 非默认值 |
轮廓 | <圆角矩形> |
50 | 始终 |
spread | <数字> |
0 | 非默认值 |
使用给定属性创建一个节点,如 gsk_inset_shadow_node_new()
。
linear-gradient
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
边界 | <矩形> |
50 | 始终 |
开始 | <点> |
0 0 | 始终 |
结束 | <点> |
0 50 | 始终 |
停止 | <颜色停止> |
0 AF0 ,1 F0C |
始终 |
插值 | <颜色状态> |
srgb | 非默认值 |
色调插值 | <色调内插> |
较短 | 非默认值 |
使用给定属性创建一个节点,如 gsk_linear_gradient_node_new()
。
mask
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
source | <node> |
颜色 { } | 始终 |
模式 | <mask-mode> |
alpha | 非默认值 |
mask | <node> |
颜色 { } | 始终 |
创建一个节点,如 gsk_mask_node_new()
,并使用给定的属性。
模式属性的值可能为
mask-mode: alpha | inverted-alpha | luminance | inverted-luminance
opacity
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
子级 | <node> |
颜色 { } | 始终 |
opacity | <数字> |
0.5 | 非默认值 |
使用给定属性创建一个节点,如 gsk_transform_node_new()
。
outset-shadow
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
模糊 | <数字> |
0 | 非默认值 |
颜色 | <颜色> |
黑色 | 非默认值 |
dx | <数字> |
1 | 非默认值 |
dy | <数字> |
1 | 非默认值 |
轮廓 | <圆角矩形> |
50 | 始终 |
spread | <数字> |
0 | 非默认值 |
使用给定属性创建一个节点,如 gsk_outset_shadow_node_new()
。
radial-gradient
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
边界 | <矩形> |
50 | 始终 |
中心 | <点> |
25 25 | 始终 |
hradius | <数字> |
25 | 始终 |
vradius | <数字> |
25 | 始终 |
开始 | <数字> |
0 | 始终 |
结束 | <数字> |
1 | 始终 |
停止 | <颜色停止> |
0 AF0 ,1 F0C |
始终 |
插值 | <颜色状态> |
srgb | 非默认值 |
色调插值 | <色调内插> |
较短 | 非默认值 |
使用给定属性创建一个节点,如 gsk_radial_gradient_node_new()
。
repeat
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
边界 | <矩形> |
子节点的边界 | 非默认值 |
子级 | <node> |
颜色 { } | 始终 |
child-bounds | <矩形> |
子节点的边界 | 非默认值 |
使用给定属性创建一个节点,如 gsk_repeat_node_new()
。
repeating-linear-gradient
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
边界 | <矩形> |
50 | 始终 |
开始 | <点> |
0 0 | 始终 |
结束 | <点> |
0 50 | 始终 |
停止 | <颜色停止> |
0 AF0 ,1 F0C |
始终 |
使用给定属性创建一个节点,如 gsk_repeating_linear_gradient_node_new()
。
repeating radial-gradient
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
边界 | <矩形> |
50 | 始终 |
中心 | <点> |
25 25 | 始终 |
hradius | <数字> |
25 | 始终 |
vradius | <数字> |
25 | 始终 |
开始 | <数字> |
0 | 始终 |
结束 | <数字> |
1 | 始终 |
停止 | <颜色停止> |
0 AF0 ,1 F0C |
始终 |
使用给定属性创建一个节点,如 gsk_repeating_radial_gradient_node_new()
。
rounded-clip
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
子级 | <node> |
颜色 { } | 始终 |
剪辑 | <圆角矩形> |
50 | 始终 |
使用给定属性创建一个节点,如 gsk_rounded_clip_node_new()
。
shadow
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
子级 | <node> |
颜色 { } | 始终 |
shadows | <shadow> |
black 1 1 | 始终 |
使用给定属性创建一个节点,如 gsk_shadow_node_new()
。
stroke
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
子级 | <node> |
见下方 | 始终 |
路径 | <字符串> |
“” | 始终 |
line-width | <数字> |
0 | 非默认值 |
line-cap | <line-cap> |
butt | 始终 |
line-join | <line-join> |
miter | 始终 |
miter-limit | <数字> |
4 | 非默认值 |
dash | <number>{+}|none |
无 | 非默认值 |
dash-offset | <数字> |
0 | 非默认值 |
使用给定属性创建一个节点,如 gsk_stroke_node_new()
。
默认子节点为默认颜色节点,但它是由路径的描边边界创建的。
line-cap 属性的可能值为
line-cap: butt | round | square
line-join 属性的可能值为
line-join: miter | round | bevel
text
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
颜色 | <颜色> |
黑色 | 非默认值 |
font | <string> <url> ? |
“Cantarell 15px” | 始终 |
glyphs | <glyphs> |
“Hello” | 始终 |
偏移量 | <点> |
0 0 | 非默认值 |
hint-style | <hint-style> |
slight | 非默认值 |
antialias | <antialias> |
gray | 非默认值 |
hint-metrics | <hint-metrics> |
off | 非默认值 |
使用给定属性创建一个节点,如 gsk_text_node_new()
。
如果为字体指定了一个 url,它必须指向字符串中指定的字体的字体文件。它可以包含一个 base64 编码字体文件的数据 url,或者指向一个字体文件的常规 url。
字形可以指定为 ASCII 字符串或逗号分隔的字形 ID 列表。此外,还可以指定前进宽度、X 和 Y 偏移量和标志,如下所示:40 10 0 0 颜色。
如果指定的字体不存在或给定字体中的指定字形无效,将返回一个错误节点。
提示样式属性的可能值是
hint-style: none | slight | full
抗锯齿属性的可能值是
antialias: none | gray
提示度量的可能值是
hint-metrics: on | off
纹理
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
边界 | <矩形> |
50 | 始终 |
纹理 | <字符串> ?<网址> ? |
见下方 | 始终 |
使用给定的属性创建一个类似于 gsk_texture_node_new()
的节点。
如果为纹理指定了一个字符串,它将用作文本的名称。可以通过指定先前使用的纹理的名称来复用纹理。在那种情况下,可以省略网址。
默认纹理是一个 10x10 的棋盘格,左上和右下 5x5 的部分为颜色 FF00CC
,其他部分为透明。此纹理的一个可能表示形式为 url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABmJLR0QA/wD/AP+gvaeTAAAAKUlEQVQYlWP8z3DmPwMaYGQwYUQXY0IXwAUGUCGGoxkYGBiweXAoeAYAz44F3e3U1xUAAAAASUVORK5CYII=")
。
纹理比例
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
边界 | <矩形> |
50 | 始终 |
纹理 | <url> |
见下方 | 始终 |
滤镜 | 滤镜 |
线性 | 非默认值 |
使用给定的属性创建一个类似于 gsk_texture_scale_node_new()
的节点。
默认纹理是一个 10x10 的棋盘格,就像对于纹理。一样。
滤镜属性的可能值是
filter: linear | nearest | trilinear
转换
属性 | 语法 | 默认值 | 已打印 |
---|---|---|---|
子级 | <node> |
颜色 { } | 始终 |
转换 | <转换> |
无 | 非默认值 |
使用给定属性创建一个节点,如 gsk_transform_node_new()
。