class Magick::RVG::Utility::TBTextStrategy

Public Instance Methods

get_letter_spacing(glyph) click to toggle source
# File lib/rvg/misc.rb, line 235
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 230
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 240
def render(x, y, text)
    x_rel_coords, y_rel_coords = text_rel_coords(text)
    dx = x_rel_coords.max
    dy = y_rel_coords.inject(0) {|sum, a| sum + a}

    # 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.split('').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