22 lines
1.5 KiB
Plaintext
22 lines
1.5 KiB
Plaintext
// 全局名称依赖示例:paint 读取 color 这个具体名字,而非依赖整个 globals 字典版本。
|
|
// Console 求值 42 仅改变最后结果 _,不应重绘;给 color 赋新值才使绘制失效。
|
|
color = "#ED6A5A"
|
|
// 保持原生几何,覆盖颜色策略,使示例只观察全局读取的依赖粒度。
|
|
class GlobalPaint: RectBlock {
|
|
// 调用原生基类产出新命令,读取当前 color 并写到新命令;不在只读阶段修改全局。
|
|
function paint(self: GlobalPaint, mount: Mount, geometry: Bounds): DisplayList {
|
|
// source_paint 在当前出现绘制时调用;基类用本轮 geometry 构造新的 DisplayList 和矩形命令。
|
|
drawing = RectBlock.paint(self,mount,geometry)
|
|
// 右侧按全局名称读取 color,左侧只修改本次新结果;不是写 self.color,也不修改已有业务对象。
|
|
drawing.commands.at(0).color = color
|
|
// 宿主解码校验返回命令后缓存绘制结果;缓存失效观察上面真实发生的全局 color 读取。
|
|
return drawing
|
|
}
|
|
}
|
|
// 显示固定大小矩形和操作提示,后续通过 Console 改同一个会话的 color。
|
|
rect = GlobalPaint(480,120,12,"#DDEEFF")
|
|
// 构造颜色是原生载荷,但每轮源 paint 会用全局 color 覆盖返回命令,所以初次可见颜色来自 #ED6A5A。
|
|
page = Page()
|
|
page.title = "全局名字依赖"
|
|
page.render(Column(24,16,TextBlock("在 REPL 求值 42 不重绘;修改 color 会更新矩形颜色",2),rect))
|