class Bash_Visual::Scroll

Constants

BACKWARD
BEGINNING
ENDING
FORWARD

Attributes

console[R]

Public Class Methods

form_block(text, size, fixate = false) click to toggle source
# File lib/bash-visual/scroll.rb, line 86
def form_block(text, size, fixate = false)
  width, height = size
  result        = []

  height.times do |i|
    line = text[i * width, width]

    unless line
      break unless fixate
      result.fill(' ' * width, i, height - i)
      break
    end

    result << line.ljust(width)
  end

  result
end
new(options) click to toggle source

@param [Hash] options

options = {

position: [x, y],
size: [width, height],
font: Font.new (:bold)
start: Scroll::ENDING,
adapt_size_message: true,
prefix: -> { '>' }
separator: '-'

}

# File lib/bash-visual/scroll.rb, line 28
def initialize(options)

  unless  options[:position] && options[:size]
    raise "Minimum needs: :size and :position"
  end

  @width, @height = options[:size]
  @x, @y          = options[:position]
  @prefix         = options[:prefix]
  @adapt          = options[:adapt].nil? ? true : options[:adapt]
  @separator      = options[:separator]

  @max_message_block_size   = options[:max_message_block_size]
  @fixed_message_block_size = options[:fixed_message_block_size]

  @start = options[:start] ? ENDING : BEGINNING
  @font  = options[:font] ? options[:font] : Font.new

  @stack     = []
  @stateless = false

  @console = Console.new @font, Console::OUTPUT_STRING
  @mutex   = Mutex.new

end

Public Instance Methods

add(message, font = @font) click to toggle source

@param [String] message @param [Bash_Visual::Font] font

# File lib/bash-visual/scroll.rb, line 60
def add(message, font = @font)

  unless font.background
    font = Font.new font.types, font.foreground, @font.background
  end

  @stack << {message: prefix() + message.to_s, font: font}

  clear
  redraw

  nil
end
prefix() click to toggle source
# File lib/bash-visual/scroll.rb, line 80
def prefix
  return @prefix[].to_s if (defined? @prefix.call)
  ''
end
prefix=(prefix) click to toggle source

@param [Proc] prefix

# File lib/bash-visual/scroll.rb, line 76
def prefix= (prefix)
  @prefix = prefix
end
scroll(positions = 1, direction = @direction * positions) click to toggle source
# File lib/bash-visual/scroll.rb, line 54
def scroll(positions = 1, direction = @direction * positions)

end

Private Instance Methods

clear(font = @font) click to toggle source

Clear scroll’s area

# File lib/bash-visual/scroll.rb, line 138
def clear(font = @font)
  print @console.draw_filled_rectangle([@x, @y], [@width, @height], font.background)
end
redraw() click to toggle source
# File lib/bash-visual/scroll.rb, line 108
def redraw
  avail_area = [@width, @height]
  @stack.reverse.each do |item|

    message    = item[:message]
    font       = item[:font]
    avail_area = print_message(message, font, avail_area)

    return nil if avail_area[0] <= 0 or avail_area[1] <= 0
  end
end
write(x, y, message, font) click to toggle source

@param [Integer] x @param [Integer] y @param [Array] message @param [Bash_Visual::Font] font

# File lib/bash-visual/scroll.rb, line 124
def write(x, y, message, font)
  string = ''
  message.each_with_index { |text, i|
    string << @console.write_to_position(x, y + i, text, font)
  }

  @mutex.synchronize {
    print string
  }
end