跳到主要内容

文本(Text)

使用运行时的整形器(shaper)对带样式的文本 run 进行整形与排版,因此脚本可以获得真实的换行和双向排序。追加 run、设置文本框,然后一次调用绘制全部内容,或遍历其行与字形自行绘制。码点索引从 1 开始,与 utf8.offset 一致。

type Label = {
text: Text,
paint: Paint,
}

function init(self: Label, context: Context): boolean
local font = context:font('IBM Plex Sans Arabic')
self.text:append('مرحبا بالعالم', { font = font, size = 32, paint = self.paint })
self.text.sizing = 'fixed'
self.text.maxWidth = 240
self.text.align = 'start'
return true
end

function draw(self: Label, renderer: Renderer)
self.text:draw(renderer)
end

字段(Fields)​

sizing​

尺寸模式,见 文本尺寸(TextSizing)。

overflow​

溢出处理,见 文本溢出(TextOverflow)。

align​

对齐方式,见 文本对齐(TextAlign)。

wrap​

换行方式,见 文本换行(TextWrap)。

wordBreak​

断词方式,见 文本断词(TextWordBreak)。

origin​

原点,见 文本原点(TextOrigin)。

direction​

书写方向,见 文本方向(TextDirection)。

maxWidth​

当尺寸模式不是 'autoWidth' 时的换行宽度。

maxHeight​

当尺寸模式为 'fixed' 时,文本发生溢出的高度。

paragraphSpacing​

由换行分隔的段落之间的间距。

length​

已追加的码点数量。

isEmpty​

文本是否为空。

lineCount​

行数。

构造器(Constructors)​

new​

new() -> Text

创建空文本。

方法(Methods)​

append​

append(text: string, style: TextRunStyle) -> ()

追加一段带样式的 run。各 run 会拼成同一字符串;换行会开始新段落。

clear​

clear() -> ()

移除全部 run。

draw​

draw(renderer: Renderer, paint: Paint?) -> ()

用各自的画笔绘制每一段 run;若传入画笔,则全部使用该画笔绘制。

bounds​

bounds() -> (Vector, Vector)

已排版文本的最小角与最大角。

line​

line(index: number) -> TextLine

按从上到下、从 1 开始的索引返回该行。

lines​

lines() -> {TextLine}

全部行,从上到下。

hitTest​

hitTest(position: Vector) -> number

文本局部坐标系中最接近给定点的码点索引。

caret​

caret(index: number) -> (number, number, number)

该码点索引之前的插入符:其 x、顶部与底部。文本为空时返回 nil。

selectionRects​

selectionRects(from: number, to: number) -> {{min: Vector, max: Vector}}

覆盖从一个索引到另一个索引的码点的矩形,每个字形一个。

看完还有疑问?进群交流下!
与众多 Rive 创作者、开发者一起交流探讨与答疑解惑。
加入交流群