Class: SequenceLogo::LogoCanvas

Inherits:
HorizontalGluingCanvas show all
Defined in:
lib/sequence_logo/canvases/logo_canvas.rb

Instance Attribute Summary collapse

Attributes inherited from GluingCanvas

#i_logo, #size

Instance Method Summary collapse

Methods inherited from HorizontalGluingCanvas

#add_image, #x_size, #y_size

Methods inherited from GluingCanvas

#add_image, #background, #image

Constructor Details

#initialize(canvas_factory) ⇒ LogoCanvas

Returns a new instance of LogoCanvas.



8
9
10
11
# File 'lib/sequence_logo/canvases/logo_canvas.rb', line 8

def initialize(canvas_factory)
  super()
  @canvas_factory = canvas_factory
end

Instance Attribute Details

#canvas_factoryObject (readonly)

Returns the value of attribute canvas_factory.



7
8
9
# File 'lib/sequence_logo/canvases/logo_canvas.rb', line 7

def canvas_factory
  @canvas_factory
end

Instance Method Details

#add_letter(letter) ⇒ Object



32
33
34
# File 'lib/sequence_logo/canvases/logo_canvas.rb', line 32

def add_letter(letter)
  add_image( canvas_factory.letter_image(letter) )
end

#add_position_ordered(ordered_letter_heights) ⇒ Object



36
37
38
# File 'lib/sequence_logo/canvases/logo_canvas.rb', line 36

def add_position_ordered(ordered_letter_heights)
  add_image( canvas_factory.logo_for_ordered_letters(ordered_letter_heights) )
end

#draw_threshold_line(threshold_level) ⇒ Object



13
14
15
16
17
# File 'lib/sequence_logo/canvases/logo_canvas.rb', line 13

def draw_threshold_line(threshold_level)
  # stores threshold levels but doesn't render them because full length of canvas is not known yet,
  # so instantly rendered line would be too short
  @rendering_callbacks.push ->{ render_threshold_line(threshold_level) }
end

#render_threshold_line(threshold_level) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/sequence_logo/canvases/logo_canvas.rb', line 19

def render_threshold_line(threshold_level)
  y_coord = y_size - threshold_level * y_size
  dr = Magick::Draw.new
  dr.fill('transparent')

  dr.stroke_width(y_size / 200.0)
  dr.stroke_dasharray(7,7)

  dr.stroke('silver')
  dr.line(0, y_coord, x_size, y_coord)
  dr.draw(@i_logo)
end