class Magick::RVG::Utility::LRTextStrategy

Public Instance Methods

get_letter_spacing(glyph) click to toggle source
# File lib/rvg/misc.rb, line 169
def get_letter_spacing(glyph)
  gx, gy = glyph_metrics(@ctx.text_attrs.glyph_orientation_horizontal, glyph)
  [gx + @ctx.text_attrs.letter_spacing, gy]
end
get_word_spacing() click to toggle source
# File lib/rvg/misc.rb, line 164
def get_word_spacing
  @word_space ||= glyph_metrics(@ctx.text_attrs.glyph_orientation_horizontal, ' ')[0]
  [@word_space + @ctx.text_attrs.word_spacing, 0]
end
render(x, y, text) click to toggle source
# File lib/rvg/misc.rb, line 174
def render(x, y, text)
  x_rel_coords, y_rel_coords = text_rel_coords(text)
  dx = x_rel_coords.reduce(0) { |sum, a| sum + a }
  dy = y_rel_coords.max

  # We're handling the anchoring.
  @ctx.gc.push
  @ctx.gc.text_anchor(Magick::StartAnchor)
  if @ctx.text_attrs.text_anchor == :end
    x -= dx
  elsif @ctx.text_attrs.text_anchor == :middle
    x -= dx / 2
  end

  # Align the first glyph
  case @ctx.text_attrs.glyph_orientation_horizontal
  when 90
    y -= dy
  when 180
    x += x_rel_coords.shift
    x_rel_coords << 0
    y -= dy
  when 270
    x += x_rel_coords[0]
  end

  y += shift_baseline(@ctx.text_attrs.glyph_orientation_horizontal, text[0, 1])

  first_word = true
  text.split(::Magick::RVG::WORD_SEP).each do |word|
    x += x_rel_coords.shift unless first_word
    first_word = false
    word.split('').each do |glyph|
      render_glyph(@ctx.text_attrs.glyph_orientation_horizontal, x, y, glyph)
      x += x_rel_coords.shift
    end
  end

  @ctx.gc.pop
  [dx, 0]
end