41 lines
1.3 KiB
Plaintext
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)
|