Fixed transparent boxes not redrawing sometimes
This commit is contained in:
		
							parent
							
								
									0c0b8ae475
								
							
						
					
					
						commit
						db2ed06daf
					
				| @ -1,6 +1,7 @@ | |||||||
| package x | package x | ||||||
| 
 | 
 | ||||||
| import "image" | import "image" | ||||||
|  | import "image/color" | ||||||
| import "git.tebibyte.media/tomo/tomo" | import "git.tebibyte.media/tomo/tomo" | ||||||
| import "git.tebibyte.media/tomo/tomo/event" | import "git.tebibyte.media/tomo/tomo/event" | ||||||
| import "git.tebibyte.media/tomo/tomo/canvas" | import "git.tebibyte.media/tomo/tomo/canvas" | ||||||
| @ -29,6 +30,16 @@ func (backend *Backend) NewContainerBox() tomo.ContainerBox { | |||||||
| 	return this | 	return this | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (this *containerBox) SetColor (c color.Color) { | ||||||
|  | 	this.box.SetColor(c) | ||||||
|  | 	this.invalidateTransparentChildren() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (this *containerBox) SetTexture (texture canvas.Texture) { | ||||||
|  | 	this.box.SetTexture(texture) | ||||||
|  | 	this.invalidateTransparentChildren() | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (this *containerBox) SetOverflow (horizontal, vertical bool) { | func (this *containerBox) SetOverflow (horizontal, vertical bool) { | ||||||
| 	if this.hOverflow == horizontal && this.vOverflow == vertical { return } | 	if this.hOverflow == horizontal && this.vOverflow == vertical { return } | ||||||
| 	this.hOverflow = horizontal | 	this.hOverflow = horizontal | ||||||
| @ -162,6 +173,17 @@ func (this *containerBox) drawBackgroundPart (can canvas.Canvas) { | |||||||
| 	pen.Rectangle(this.innerClippingBounds) | 	pen.Rectangle(this.innerClippingBounds) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (this *containerBox) invalidateTransparentChildren () { | ||||||
|  | 	window := this.window() | ||||||
|  | 	if this.window == nil { return } | ||||||
|  | 	for _, box := range this.children { | ||||||
|  | 		box := assertAnyBox(box) | ||||||
|  | 		if box.transparent() { | ||||||
|  | 			window.invalidateDraw(box) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (this *containerBox) flushActionQueue () { | func (this *containerBox) flushActionQueue () { | ||||||
| 	for _, box := range this.children { | 	for _, box := range this.children { | ||||||
| 		box.(anyBox).flushActionQueue() | 		box.(anyBox).flushActionQueue() | ||||||
|  | |||||||
| @ -52,6 +52,7 @@ type anyBox interface { | |||||||
| 	recursiveRedo    () | 	recursiveRedo    () | ||||||
| 	canBeFocused     () bool | 	canBeFocused     () bool | ||||||
| 	boxUnder         (image.Point) anyBox | 	boxUnder         (image.Point) anyBox | ||||||
|  | 	transparent      () bool | ||||||
| 
 | 
 | ||||||
| 	propagate    (func (anyBox) bool) bool | 	propagate    (func (anyBox) bool) bool | ||||||
| 	propagateAlt (func (anyBox) bool) bool | 	propagateAlt (func (anyBox) bool) bool | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user