def redraw
@display.driver.cursor = false if @display.active_control == self
row = y1
return unless data
data[@offset, height].each_with_index do |line, index|
line = line.to_s
number = index + @offset + 1
line = "#{number.to_s.rjust 2}. #{line}" if @numbering
print @display.color '1;34' if number == @index + 1
length = line.size
offset = 0
while offset < length || offset == 0
@display.place row, x1, ((' ' * ((offset > 0) ? @hanging_indent : 0)) + line[offset, width - ((offset > 0) ? @hanging_indent : 0)]).ljust(width, ' ')
row += 1
offset += width - ((offset > 0) ? @hanging_indent : 0)
if row >= y2
print @display.color '0' if number == @index + 1
break
end
end
print @display.color '0' if number == @index + 1
break if row >= y2
end
until row >= y2
@display.place row, x1, ' ' * width
row += 1
end
end