package system import "git.tebibyte.media/tomo/tomo" import "git.tebibyte.media/tomo/tomo/canvas" type canvasBox struct { *box userDrawer canvas.Drawer } func (this *System) NewCanvasBox () tomo.CanvasBox { box := &canvasBox { } box.box = this.newBox(box) box.drawer = box return box } func (this *canvasBox) SetDrawer (drawer canvas.Drawer) { this.userDrawer = drawer this.invalidateDraw() } func (this *canvasBox) Invalidate () { this.invalidateDraw() } func (this *canvasBox) Draw (can canvas.Canvas) { if can == nil { return } this.box.Draw(can) if this.userDrawer != nil { padding := tomo.Inset(this.attrPadding.Value()) this.userDrawer.Draw ( can.SubCanvas(padding.Apply(this.innerClippingBounds))) } }