diff --git a/screen.go b/screen.go index 1159dfa..fcc2e42 100644 --- a/screen.go +++ b/screen.go @@ -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 } } @@ -121,10 +121,9 @@ func (screen *Screen) ScrollBottom(max int) { func (screen *Screen) DrawOldQuotes(quotes *Quotes) { screen.draw(screen.layout.Quotes(quotes), true) - termbox.Flush() + termbox.Flush() } - // Draw accepts variable number of arguments and knows how to display the // market data, stock quotes, current time, and an arbitrary string. func (screen *Screen) Draw(objects ...interface{}) *Screen { @@ -148,40 +147,22 @@ func (screen *Screen) Draw(objects ...interface{}) *Screen { } } - termbox.Flush() + termbox.Flush() return screen } // DrawLine takes the incoming string, tokenizes it to extract markup // elements, and displays it all starting at (x,y) location. -func (screen *Screen) DrawLine(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 - } +// DrawLineFlush gives the option to flush screen after drawing - // 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) - } - } - termbox.Flush() +// wrapper for DrawLineFlush +func (screen *Screen) DrawLine(x int, y int, str string) { + screen.DrawLineFlush(x, y, str, true) } -// 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) { +func (screen *Screen) DrawLineFlush(x int, y int, str string, flush bool) { start, column := 0, 0 for _, token := range screen.markup.Tokenize(str) { @@ -201,6 +182,9 @@ func (screen *Screen) DrawLineWithoutFlush(x int, y int, str string) { termbox.SetCell(start, y, char, screen.markup.Foreground, screen.markup.Background) } } + if flush { + termbox.Flush() + } } // Underlying workhorse function that takes multiline string, splits it into @@ -230,7 +214,7 @@ func (screen *Screen) draw(str string, offset bool) { strings.Contains(allLines[row], "Change") { drewHeading = true screen.headerLine = row - screen.DrawLineWithoutFlush(0, row, allLines[row]) + screen.DrawLine(0, row, allLines[row]) // move on to the point to offset to row += screen.offset } @@ -238,13 +222,13 @@ func (screen *Screen) draw(str string, offset bool) { // only write the necessary lines if row <= len(allLines) && row > screen.headerLine { - screen.DrawLineWithoutFlush(0, row-screen.offset, allLines[row]) + screen.DrawLineFlush(0, row-screen.offset, allLines[row], false) } else if row > len(allLines) { row = len(allLines) } } } else { - screen.DrawLineWithoutFlush(0, row, allLines[row]) + screen.DrawLineFlush(0, row, allLines[row], false) } } // If the quotes lines in this cycle are shorter than in the previous @@ -260,10 +244,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++ { - if i > screen.headerLine { - 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) + } } } }