@ -92,7 +92,7 @@ func (screen *Screen) ClearLine(x int, y int) *Screen {
// Increase the offset for scrolling feature by n
// Takes number of tickers as max, so not scrolling down forever
func ( screen * Screen ) IncreaseOffset ( n int , max int ) {
if screen . offset + n + 1 < max {
if screen . offset + n + 1 < max {
screen . offset += n
}
}
@ -142,6 +142,8 @@ func (screen *Screen) Draw(objects ...interface{}) *Screen {
}
}
termbox . Flush ( )
return screen
}
@ -170,6 +172,31 @@ func (screen *Screen) DrawLine(x int, y int, str string) {
termbox . Flush ( )
}
// Identical to DrawLine, no flush at the end perhaps should be a part
// of DrawLine, with a flush parameter, or a wrapper function could be
// used
func ( screen * Screen ) DrawLineWithoutFlush ( x int , y int , str string ) {
start , column := 0 , 0
for _ , token := range screen . markup . Tokenize ( str ) {
// First check if it's a tag. Tags are eaten up and not displayed.
if screen . markup . IsTag ( token ) {
continue
}
// Here comes the actual text: display it one character at a time.
for i , char := range token {
if ! screen . markup . RightAligned {
start = x + column
column ++
} else {
start = screen . width - len ( token ) + i
}
termbox . SetCell ( start , y , char , screen . markup . Foreground , screen . markup . Background )
}
}
}
// Underlying workhorse function that takes multiline string, splits it into
// lines, and displays them row by row.
func ( screen * Screen ) draw ( str string , offset bool ) {
@ -197,7 +224,7 @@ func (screen *Screen) draw(str string, offset bool) {
strings . Contains ( allLines [ row ] , "Change" ) {
drewHeading = true
screen . headerLine = row
screen . DrawLine ( 0 , row , allLines [ row ] )
screen . DrawLineWithoutFlush ( 0 , row , allLines [ row ] )
// move on to the point to offset to
row += screen . offset
}
@ -205,13 +232,13 @@ func (screen *Screen) draw(str string, offset bool) {
// only write the necessary lines
if row <= len ( allLines ) &&
row > screen . headerLine {
screen . DrawLine ( 0 , row - screen . offset , allLines [ row ] )
screen . DrawLineWithoutFlush ( 0 , row - screen . offset , allLines [ row ] )
} else if row > len ( allLines ) {
row = len ( allLines )
}
}
} else {
screen . DrawLine ( 0 , row , allLines [ row ] )
screen . DrawLineWithoutFlush ( 0 , row , allLines [ row ] )
}
}
// If the quotes lines in this cycle are shorter than in the previous
@ -227,8 +254,10 @@ func (screen *Screen) draw(str string, offset bool) {
// cycle. In that case, padding with blank lines would overwrite the
// stocks list.)
if drewHeading {
for i := len ( allLines ) - 1 - screen . offset ; i < screen . height ; i ++ {
screen . DrawLine ( 0 , i , blankLine )
for i := len ( allLines ) - 1 - screen . offset ; i < screen . height ; i ++ {
if i > screen . headerLine {
screen . DrawLine ( 0 , i , blankLine )
}
}
}
}