class Magick::RVG::Utility::GraphicContext

Constants

ANCHOR_TO_ALIGN
FONT_STRETCH
FONT_STYLE
FONT_WEIGHT
TEXT_ANCHOR
TEXT_DECORATION
TEXT_STRATEGIES

Attributes

gc[R]
text_attrs[R]

Public Class Methods

degrees_to_radians(deg) click to toggle source
# File lib/rvg/misc.rb, line 480
def self.degrees_to_radians(deg)
    Math::PI * (deg % 360.0) / 180.0
end
new() click to toggle source
# File lib/rvg/misc.rb, line 508
def initialize
    @gc = Magick::Draw.new
    @shadow = []
    @shadow << Magick::Draw.new
    @text_attrs = TextAttributes.new
    init_matrix
end

Public Instance Methods

affine(sx, rx, ry, sy, tx, ty) click to toggle source
# File lib/rvg/misc.rb, line 520
def affine(sx, rx, ry, sy, tx, ty)
    sx, rx, ry, sy, tx, ty = Magick::RVG.convert_to_float(sx, rx, ry, sy, tx, ty)
    @gc.affine(sx, rx, ry, sy, tx, ty)
    @text_attrs.set_affine(sx, rx, ry, sy, tx, ty)
    nil
end
baseline_shift(value) click to toggle source
# File lib/rvg/misc.rb, line 527
def baseline_shift(value)
    @text_attrs.baseline_shift = case value
        when 'baseline', 'sub', 'super'
            value.intern
        when /[-+]?\d+%/, Numeric
            value
        else
            :baseline
        end
    nil
end
font(name) click to toggle source
# File lib/rvg/misc.rb, line 539
def font(name)
    @gc.font(name)
    @shadow[-1].font = name
    nil
end
font_family(name) click to toggle source
# File lib/rvg/misc.rb, line 545
def font_family(name)
    @gc.font_family(name)
    @shadow[-1].font_family = name
    nil
end
font_size(points) click to toggle source
# File lib/rvg/misc.rb, line 551
def font_size(points)
    @gc.font_size(points)
    @shadow[-1].pointsize = points
    nil
end
font_stretch(stretch) click to toggle source
# File lib/rvg/misc.rb, line 557
def font_stretch(stretch)
    stretch = FONT_STRETCH.fetch(stretch.intern, Magick::NormalStretch)
    @gc.font_stretch(stretch)
    @shadow[-1].font_stretch = stretch
    nil
end
font_style(style) click to toggle source
# File lib/rvg/misc.rb, line 564
def font_style(style)
    style = FONT_STYLE.fetch(style.intern, Magick::NormalStyle)
    @gc.font_style(style)
    @shadow[-1].font_style = style
    nil
end
font_weight(weight) click to toggle source
# File lib/rvg/misc.rb, line 571
def font_weight(weight)
    # If the arg is not in the hash use it directly. Handles numeric values.
    weight = FONT_WEIGHT.fetch(weight) {|key| key}
    @gc.font_weight(weight)
    @shadow[-1].font_weight = weight
    nil
end
glyph_orientation_horizontal(deg) click to toggle source
# File lib/rvg/misc.rb, line 579
def glyph_orientation_horizontal(deg)
    deg = Magick::RVG.convert_one_to_float(deg)
    @text_attrs.glyph_orientation_horizontal = (deg % 360) / 90 * 90
    nil
end
glyph_orientation_vertical(deg) click to toggle source
# File lib/rvg/misc.rb, line 585
def glyph_orientation_vertical(deg)
    deg = Magick::RVG.convert_one_to_float(deg)
    @text_attrs.glyph_orientation_vertical = (deg % 360) / 90 * 90
    nil
end
inspect() click to toggle source
# File lib/rvg/misc.rb, line 591
def inspect
    @gc.inspect
end
letter_spacing(value) click to toggle source
# File lib/rvg/misc.rb, line 595
def letter_spacing(value)
    @text_attrs.letter_spacing = Magick::RVG.convert_one_to_float(value)
    nil
end
method_missing(methID, *args, &block) click to toggle source
# File lib/rvg/misc.rb, line 516
def method_missing(methID, *args, &block)
    @gc.__send__(methID, *args, &block)
end
pop() click to toggle source
# File lib/rvg/misc.rb, line 607
def pop
    @gc.pop
    @shadow.pop
    @text_attrs.pop
    nil
end
push() click to toggle source
# File lib/rvg/misc.rb, line 600
def push
    @gc.push
    @shadow.push(@shadow.last.dup)
    @text_attrs.push
    nil
end
rotate(degrees) click to toggle source
# File lib/rvg/misc.rb, line 614
def rotate(degrees)
    degrees = Magick::RVG.convert_one_to_float(degrees)
    @gc.rotate(degrees)
    @sx =  Math.cos(GraphicContext.degrees_to_radians(degrees))
    @rx =  Math.sin(GraphicContext.degrees_to_radians(degrees))
    @ry = -Math.sin(GraphicContext.degrees_to_radians(degrees))
    @sy =  Math.cos(GraphicContext.degrees_to_radians(degrees))
    concat_matrix
    nil
end
scale(sx, sy) click to toggle source
# File lib/rvg/misc.rb, line 625
def scale(sx, sy)
    sx, sy = Magick::RVG.convert_to_float(sx, sy)
    @gc.scale(sx, sy)
    @sx, @sy = sx, sy
    concat_matrix
    nil
end
shadow() click to toggle source
# File lib/rvg/misc.rb, line 633
def shadow
    @shadow.last
end
skewX(degrees) click to toggle source
# File lib/rvg/misc.rb, line 637
def skewX(degrees)
    degrees = Magick::RVG.convert_one_to_float(degrees)
    @gc.skewX(degrees)
    @ry = Math.tan(GraphicContext.degrees_to_radians(degrees))
    concat_matrix
    nil
end
skewY(degrees) click to toggle source
# File lib/rvg/misc.rb, line 645
def skewY(degrees)
    degrees = Magick::RVG.convert_one_to_float(degrees)
    @gc.skewY(degrees)
    @rx = Math.tan(GraphicContext.degrees_to_radians(degrees))
    concat_matrix
    nil
end
stroke_width(width) click to toggle source
# File lib/rvg/misc.rb, line 653
def stroke_width(width)
    width = Magick::RVG.convert_one_to_float(width)
    @gc.stroke_width(width)
    @shadow[-1].stroke_width = width
    nil
end
text(x, y, text) click to toggle source
# File lib/rvg/misc.rb, line 660
def text(x, y, text)
    return if text.length == 0
    if @text_attrs.non_default?
        text_renderer = TEXT_STRATEGIES[@text_attrs.writing_mode].new(self)
    else
        text_renderer = DefaultTextStrategy.new(self)
    end

    text_renderer.render(x, y, text)
end
text_anchor(anchor) click to toggle source
# File lib/rvg/misc.rb, line 671
def text_anchor(anchor)
    anchor = anchor.intern
    anchor_enum = TEXT_ANCHOR.fetch(anchor, Magick::StartAnchor)
    @gc.text_anchor(anchor_enum)
    align = ANCHOR_TO_ALIGN.fetch(anchor, Magick::LeftAlign)
    @shadow[-1].align = align
    @text_attrs.text_anchor = anchor
    nil
end
text_decoration(decoration) click to toggle source
# File lib/rvg/misc.rb, line 681
def text_decoration(decoration)
    decoration = TEXT_DECORATION.fetch(decoration.intern, Magick::NoDecoration)
    @gc.decorate(decoration)
    @shadow[-1].decorate = decoration
    nil
end
translate(tx, ty) click to toggle source
# File lib/rvg/misc.rb, line 688
def translate(tx, ty)
    tx, ty = Magick::RVG.convert_to_float(tx, ty)
    @gc.translate(tx, ty)
    @tx, @ty = tx, ty
    concat_matrix
    nil
end
word_spacing(value) click to toggle source
# File lib/rvg/misc.rb, line 696
def word_spacing(value)
    @text_attrs.word_spacing = Magick::RVG.convert_one_to_float(value)
    nil
end
writing_mode(mode) click to toggle source
# File lib/rvg/misc.rb, line 701
def writing_mode(mode)
    @text_attrs.writing_mode = mode
    nil
end

Private Instance Methods

concat_matrix() click to toggle source
# File lib/rvg/misc.rb, line 492
def concat_matrix
    curr = @text_attrs.affine
    sx = curr.sx * @sx + curr.ry * @rx
    rx = curr.rx * @sx + curr.sy * @rx
    ry = curr.sx * @ry + curr.ry * @sy
    sy = curr.rx * @ry + curr.sy * @sy
    tx = curr.sx * @tx + curr.ry * @ty + curr.tx
    ty = curr.rx * @tx + curr.sy * @ty + curr.ty
    @text_attrs.set_affine(sx, rx, ry, sy, tx, ty)
    init_matrix
end
init_matrix() click to toggle source
# File lib/rvg/misc.rb, line 486
def init_matrix
    @rx = @ry = 0
    @sx = @sy = 1
    @tx = @ty = 0
end