Files
2026-10-21 16:33:35 +08:00

41 lines
1.3 KiB
Plaintext

class WidthModel {
width: Number
function expand(self: WidthModel, event: Event): Unit {
self.width = 260
}
}
class Tint {
color: String
function blue(self: Tint, event: Event): Unit {
self.color = "#526AC7"
}
}
class CachedRect: RectBlock {
dimensions: WidthModel
tint: Tint
function measure(self: CachedRect, mount: Mount, constraints: Constraints): MeasureResult {
return MeasureResult(self.dimensions.width, 60)
}
function paint(self: CachedRect, mount: Mount, geometry: Bounds): DisplayList {
drawing = RectBlock.paint(self, mount, geometry)
drawing.commands.at(0).color = self.tint.color
return drawing
}
}
class ViewportBand: RectBlock {
function measure(self: ViewportBand, mount: Mount, constraints: Constraints): MeasureResult {
return MeasureResult(ui.viewport().width, 24)
}
}
dimensions = WidthModel(200)
tint = Tint("#ED6A5A")
rect = CachedRect(80, 20, 0, "#ED6A5A", dimensions, tint)
band = ViewportBand(80, 24, 0, "#237A45")
blue = Button("只改绘制颜色")
expand = Button("修改测量依赖")
blueConnection = blue.on("click", tint.blue)
expandConnection = expand.on("click", dimensions.expand)
root = Column(24, 16, TextBlock("改变颜色保留测量缓存;改变宽度重新测量"), band, rect, blue, expand)
page = Page()
page.render(root)