class Magick::RVG::Utility::TBTextStrategy
Public Instance Methods
get_letter_spacing(glyph)
click to toggle source
# File lib/rvg/misc.rb, line 229 def get_letter_spacing(glyph) gx, gy = glyph_metrics(@ctx.text_attrs.glyph_orientation_vertical, glyph) [gx, gy + @ctx.text_attrs.letter_spacing] end
get_word_spacing()
click to toggle source
# File lib/rvg/misc.rb, line 224 def get_word_spacing @word_space ||= glyph_metrics(@ctx.text_attrs.glyph_orientation_vertical, ' ')[1] [0, @word_space + @ctx.text_attrs.word_spacing] end
render(x, y, text)
click to toggle source
# File lib/rvg/misc.rb, line 234 def render(x, y, text) x_rel_coords, y_rel_coords = text_rel_coords(text) dx = x_rel_coords.max dy = y_rel_coords.sum # We're handling the anchoring. @ctx.gc.push @ctx.gc.text_anchor(Magick::StartAnchor) if @ctx.text_attrs.text_anchor == :end y -= dy elsif @ctx.text_attrs.text_anchor == :middle y -= dy / 2 end # Align the first glyph such that its center # is aligned on x and its top is aligned on y. case @ctx.text_attrs.glyph_orientation_vertical when 0 x -= x_rel_coords.max / 2 y += y_rel_coords[0] when 90 x -= x_rel_coords.max / 2 when 180 x += x_rel_coords.max / 2 when 270 x += x_rel_coords.max / 2 y += y_rel_coords.shift y_rel_coords << 0 # since we used an element we need to add a dummy end x -= shift_baseline(@ctx.text_attrs.glyph_orientation_vertical, text[0, 1]) first_word = true text.split(::Magick::RVG::WORD_SEP).each do |word| unless first_word y += y_rel_coords.shift x_rel_coords.shift end first_word = false word.chars.each do |glyph| case @ctx.text_attrs.glyph_orientation_vertical.to_i when 0, 90, 270 x_shift = (dx - x_rel_coords.shift) / 2 when 180 x_shift = -(dx - x_rel_coords.shift) / 2 end render_glyph(@ctx.text_attrs.glyph_orientation_vertical, x + x_shift, y, glyph) y += y_rel_coords.shift end end @ctx.gc.pop [0, dy] end