# File lib/rvg/misc.rb, line 509 def GraphicContext.degrees_to_radians(deg) Math::PI * (deg % 360.0) / 180.0 end
# File lib/rvg/misc.rb, line 537 def initialize() @gc = Magick::Draw.new @shadow = Array.new @shadow << Magick::Draw.new @text_attrs = TextAttributes.new init_matrix() end
# File lib/rvg/misc.rb, line 549 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
# File lib/rvg/misc.rb, line 556 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
# File lib/rvg/misc.rb, line 568 def font(name) @gc.font(name) @shadow[-1].font = name nil end
# File lib/rvg/misc.rb, line 574 def font_family(name) @gc.font_family(name) @shadow[-1].font_family = name nil end
# File lib/rvg/misc.rb, line 580 def font_size(points) @gc.font_size(points) @shadow[-1].pointsize = points nil end
# File lib/rvg/misc.rb, line 586 def font_stretch(stretch) stretch = FONT_STRETCH.fetch(stretch.intern, Magick::NormalStretch) @gc.font_stretch(stretch) @shadow[-1].font_stretch = stretch nil end
# File lib/rvg/misc.rb, line 593 def font_style(style) style = FONT_STYLE.fetch(style.intern, Magick::NormalStyle) @gc.font_style(style) @shadow[-1].font_style = style nil end
# File lib/rvg/misc.rb, line 600 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
# File lib/rvg/misc.rb, line 608 def glyph_orientation_horizontal(deg) deg = Magick::RVG.convert_one_to_float(deg) @text_attrs.glyph_orientation_horizontal = (deg % 360) / 90 * 90 nil end
# File lib/rvg/misc.rb, line 614 def glyph_orientation_vertical(deg) deg = Magick::RVG.convert_one_to_float(deg) @text_attrs.glyph_orientation_vertical = (deg % 360) / 90 * 90 nil end
# File lib/rvg/misc.rb, line 620 def inspect() @gc.inspect end
# File lib/rvg/misc.rb, line 624 def letter_spacing(value) @text_attrs.letter_spacing = Magick::RVG.convert_one_to_float(value) nil end
# File lib/rvg/misc.rb, line 545 def method_missing(methID, *args, &block) @gc.__send__(methID, *args, &block) end
# File lib/rvg/misc.rb, line 636 def pop() @gc.pop @shadow.pop @text_attrs.pop nil end
# File lib/rvg/misc.rb, line 629 def push() @gc.push @shadow.push(@shadow.last.dup) @text_attrs.push nil end
# File lib/rvg/misc.rb, line 643 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
# File lib/rvg/misc.rb, line 654 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
# File lib/rvg/misc.rb, line 662 def shadow() @shadow.last end
# File lib/rvg/misc.rb, line 666 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
# File lib/rvg/misc.rb, line 674 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
# File lib/rvg/misc.rb, line 682 def stroke_width(width) width = Magick::RVG.convert_one_to_float(width) @gc.stroke_width(width) @shadow[-1].stroke_width = width nil end
# File lib/rvg/misc.rb, line 689 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 return text_renderer.render(x, y, text) end
# File lib/rvg/misc.rb, line 700 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
# File lib/rvg/misc.rb, line 710 def text_decoration(decoration) decoration = TEXT_DECORATION.fetch(decoration.intern, Magick::NoDecoration) @gc.decorate(decoration) @shadow[-1].decorate = decoration nil end
# File lib/rvg/misc.rb, line 717 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
# File lib/rvg/misc.rb, line 725 def word_spacing(value) @text_attrs.word_spacing = Magick::RVG.convert_one_to_float(value) nil end
# File lib/rvg/misc.rb, line 730 def writing_mode(mode) @text_attrs.writing_mode = mode nil end
# File lib/rvg/misc.rb, line 521 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
# File lib/rvg/misc.rb, line 515 def init_matrix() @rx = @ry = 0 @sx = @sy = 1 @tx = @ty = 0 end