# File lib/rvg/misc.rb, line 480 def self.degrees_to_radians(deg) Math::PI * (deg % 360.0) / 180.0 end
# 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
# 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
# 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
# File lib/rvg/misc.rb, line 539 def font(name) @gc.font(name) @shadow[-1].font = name nil end
# File lib/rvg/misc.rb, line 545 def font_family(name) @gc.font_family(name) @shadow[-1].font_family = name nil end
# File lib/rvg/misc.rb, line 551 def font_size(points) @gc.font_size(points) @shadow[-1].pointsize = points nil end
# 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
# 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
# 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
# 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
# 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
# File lib/rvg/misc.rb, line 591 def inspect @gc.inspect end
# File lib/rvg/misc.rb, line 595 def letter_spacing(value) @text_attrs.letter_spacing = Magick::RVG.convert_one_to_float(value) nil end
# File lib/rvg/misc.rb, line 516 def method_missing(methID, *args, &block) @gc.__send__(methID, *args, &block) end
# File lib/rvg/misc.rb, line 607 def pop @gc.pop @shadow.pop @text_attrs.pop nil end
# File lib/rvg/misc.rb, line 600 def push @gc.push @shadow.push(@shadow.last.dup) @text_attrs.push nil end
# 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
# 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
# File lib/rvg/misc.rb, line 633 def shadow @shadow.last end
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# File lib/rvg/misc.rb, line 696 def word_spacing(value) @text_attrs.word_spacing = Magick::RVG.convert_one_to_float(value) nil end
# File lib/rvg/misc.rb, line 701 def writing_mode(mode) @text_attrs.writing_mode = mode nil end
# 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
# File lib/rvg/misc.rb, line 486 def init_matrix @rx = @ry = 0 @sx = @sy = 1 @tx = @ty = 0 end