60 lines
		
	
	
		
			994 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			994 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package termbox
 | |
| 
 | |
| // private API, common OS agnostic part
 | |
| 
 | |
| type cellbuf struct {
 | |
| 	width  int
 | |
| 	height int
 | |
| 	cells  []Cell
 | |
| }
 | |
| 
 | |
| func (this *cellbuf) init(width, height int) {
 | |
| 	this.width = width
 | |
| 	this.height = height
 | |
| 	this.cells = make([]Cell, width*height)
 | |
| }
 | |
| 
 | |
| func (this *cellbuf) resize(width, height int) {
 | |
| 	if this.width == width && this.height == height {
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	oldw := this.width
 | |
| 	oldh := this.height
 | |
| 	oldcells := this.cells
 | |
| 
 | |
| 	this.init(width, height)
 | |
| 	this.clear()
 | |
| 
 | |
| 	minw, minh := oldw, oldh
 | |
| 
 | |
| 	if width < minw {
 | |
| 		minw = width
 | |
| 	}
 | |
| 	if height < minh {
 | |
| 		minh = height
 | |
| 	}
 | |
| 
 | |
| 	for i := 0; i < minh; i++ {
 | |
| 		srco, dsto := i*oldw, i*width
 | |
| 		src := oldcells[srco : srco+minw]
 | |
| 		dst := this.cells[dsto : dsto+minw]
 | |
| 		copy(dst, src)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (this *cellbuf) clear() {
 | |
| 	for i := range this.cells {
 | |
| 		c := &this.cells[i]
 | |
| 		c.Ch = ' '
 | |
| 		c.Fg = foreground
 | |
| 		c.Bg = background
 | |
| 	}
 | |
| }
 | |
| 
 | |
| const cursor_hidden = -1
 | |
| 
 | |
| func is_cursor_hidden(x, y int) bool {
 | |
| 	return x == cursor_hidden || y == cursor_hidden
 | |
| }
 |