Class | Magick::RVG::Utility::GraphicContext |
In: |
lib/rvg/misc.rb
|
Parent: | Object |
FONT_STRETCH | = | {:normal => Magick::NormalStretch, :ultra_condensed => Magick::UltraCondensedStretch, :extra_condensed => Magick::ExtraCondensedStretch, :condensed => Magick::CondensedStretch, :semi_condensed => Magick::SemiCondensedStretch, :semi_expanded => Magick::SemiExpandedStretch, :expanded => Magick::ExpandedStretch, :extra_expanded => Magick::ExtraExpandedStretch, :ultra_expanded => Magick::UltraExpandedStretch} |
FONT_STYLE | = | {:normal => Magick::NormalStyle, :italic => Magick::ItalicStyle, :oblique => Magick::ObliqueStyle} |
FONT_WEIGHT | = | {'normal' => Magick::NormalWeight, 'bold' => Magick::BoldWeight, 'bolder' => Magick::BolderWeight, 'lighter' => Magick::LighterWeight} |
TEXT_ANCHOR | = | {:start => Magick::StartAnchor, :middle => Magick::MiddleAnchor, :end => Magick::EndAnchor} |
ANCHOR_TO_ALIGN | = | {:start => Magick::LeftAlign, :middle => Magick::CenterAlign, :end => Magick::RightAlign} |
TEXT_DECORATION | = | {:none => Magick::NoDecoration, :underline => Magick::UnderlineDecoration, :overline => Magick::OverlineDecoration, :line_through => Magick::LineThroughDecoration} |
TEXT_STRATEGIES | = | {'lr-tb'=>LRTextStrategy, 'lr'=>LRTextStrategy, 'rt-tb'=>RLTextStrategy, 'rl'=>RLTextStrategy, 'tb-rl'=>TBTextStrategy, 'tb'=>TBTextStrategy} |
gc | [R] | |
text_attrs | [R] |
# File lib/rvg/misc.rb, line 508 508: def GraphicContext.degrees_to_radians(deg) 509: Math::PI * (deg % 360.0) / 180.0 510: end
# File lib/rvg/misc.rb, line 536 536: def initialize() 537: @gc = Magick::Draw.new 538: @shadow = Array.new 539: @shadow << Magick::Draw.new 540: @text_attrs = TextAttributes.new 541: init_matrix() 542: end
# File lib/rvg/misc.rb, line 548 548: def affine(sx, rx, ry, sy, tx, ty) 549: sx, rx, ry, sy, tx, ty = Magick::RVG.convert_to_float(sx, rx, ry, sy, tx, ty) 550: @gc.affine(sx, rx, ry, sy, tx, ty) 551: @text_attrs.set_affine(sx, rx, ry, sy, tx, ty) 552: nil 553: end
# File lib/rvg/misc.rb, line 555 555: def baseline_shift(value) 556: @text_attrs.baseline_shift = case value 557: when 'baseline', 'sub', 'super' 558: value.intern 559: when /[-+]?\d+%/, Numeric 560: value 561: else 562: :baseline 563: end 564: nil 565: end
# File lib/rvg/misc.rb, line 567 567: def font(name) 568: @gc.font(name) 569: @shadow[-1].font = name 570: nil 571: end
# File lib/rvg/misc.rb, line 573 573: def font_family(name) 574: @gc.font_family(name) 575: @shadow[-1].font_family = name 576: nil 577: end
# File lib/rvg/misc.rb, line 579 579: def font_size(points) 580: @gc.font_size(points) 581: @shadow[-1].pointsize = points 582: nil 583: end
# File lib/rvg/misc.rb, line 585 585: def font_stretch(stretch) 586: stretch = FONT_STRETCH.fetch(stretch.intern, Magick::NormalStretch) 587: @gc.font_stretch(stretch) 588: @shadow[-1].font_stretch = stretch 589: nil 590: end
# File lib/rvg/misc.rb, line 592 592: def font_style(style) 593: style = FONT_STYLE.fetch(style.intern, Magick::NormalStyle) 594: @gc.font_style(style) 595: @shadow[-1].font_style = style 596: nil 597: end
# File lib/rvg/misc.rb, line 599 599: def font_weight(weight) 600: # If the arg is not in the hash use it directly. Handles numeric values. 601: weight = FONT_WEIGHT.fetch(weight) {|key| key} 602: @gc.font_weight(weight) 603: @shadow[-1].font_weight = weight 604: nil 605: end
# File lib/rvg/misc.rb, line 607 607: def glyph_orientation_horizontal(deg) 608: deg = Magick::RVG.convert_one_to_float(deg) 609: @text_attrs.glyph_orientation_horizontal = (deg % 360) / 90 * 90 610: nil 611: end
# File lib/rvg/misc.rb, line 613 613: def glyph_orientation_vertical(deg) 614: deg = Magick::RVG.convert_one_to_float(deg) 615: @text_attrs.glyph_orientation_vertical = (deg % 360) / 90 * 90 616: nil 617: end
# File lib/rvg/misc.rb, line 623 623: def letter_spacing(value) 624: @text_attrs.letter_spacing = Magick::RVG.convert_one_to_float(value) 625: nil 626: end
# File lib/rvg/misc.rb, line 544 544: def method_missing(methID, *args, &block) 545: @gc.__send__(methID, *args, &block) 546: end
# File lib/rvg/misc.rb, line 635 635: def pop() 636: @gc.pop 637: @shadow.pop 638: @text_attrs.pop 639: nil 640: end
# File lib/rvg/misc.rb, line 628 628: def push() 629: @gc.push 630: @shadow.push(@shadow.last.dup) 631: @text_attrs.push 632: nil 633: end
# File lib/rvg/misc.rb, line 642 642: def rotate(degrees) 643: degrees = Magick::RVG.convert_one_to_float(degrees) 644: @gc.rotate(degrees) 645: @sx = Math.cos(GraphicContext.degrees_to_radians(degrees)) 646: @rx = Math.sin(GraphicContext.degrees_to_radians(degrees)) 647: @ry = -Math.sin(GraphicContext.degrees_to_radians(degrees)) 648: @sy = Math.cos(GraphicContext.degrees_to_radians(degrees)) 649: concat_matrix() 650: nil 651: end
# File lib/rvg/misc.rb, line 653 653: def scale(sx, sy) 654: sx, sy = Magick::RVG.convert_to_float(sx, sy) 655: @gc.scale(sx, sy) 656: @sx, @sy = sx, sy 657: concat_matrix() 658: nil 659: end
# File lib/rvg/misc.rb, line 665 665: def skewX(degrees) 666: degrees = Magick::RVG.convert_one_to_float(degrees) 667: @gc.skewX(degrees) 668: @ry = Math.tan(GraphicContext.degrees_to_radians(degrees)) 669: concat_matrix() 670: nil 671: end
# File lib/rvg/misc.rb, line 673 673: def skewY(degrees) 674: degrees = Magick::RVG.convert_one_to_float(degrees) 675: @gc.skewY(degrees) 676: @rx = Math.tan(GraphicContext.degrees_to_radians(degrees)) 677: concat_matrix() 678: nil 679: end
# File lib/rvg/misc.rb, line 681 681: def stroke_width(width) 682: width = Magick::RVG.convert_one_to_float(width) 683: @gc.stroke_width(width) 684: @shadow[-1].stroke_width = width 685: nil 686: end
# File lib/rvg/misc.rb, line 688 688: def text(x, y, text) 689: return if text.length == 0 690: if @text_attrs.non_default? 691: text_renderer = TEXT_STRATEGIES[@text_attrs.writing_mode].new(self) 692: else 693: text_renderer = DefaultTextStrategy.new(self) 694: end 695: 696: return text_renderer.render(x, y, text) 697: end
# File lib/rvg/misc.rb, line 699 699: def text_anchor(anchor) 700: anchor = anchor.intern 701: anchor_enum = TEXT_ANCHOR.fetch(anchor, Magick::StartAnchor) 702: @gc.text_anchor(anchor_enum) 703: align = ANCHOR_TO_ALIGN.fetch(anchor, Magick::LeftAlign) 704: @shadow[-1].align = align 705: @text_attrs.text_anchor = anchor 706: nil 707: end
# File lib/rvg/misc.rb, line 709 709: def text_decoration(decoration) 710: decoration = TEXT_DECORATION.fetch(decoration.intern, Magick::NoDecoration) 711: @gc.decorate(decoration) 712: @shadow[-1].decorate = decoration 713: nil 714: end
# File lib/rvg/misc.rb, line 716 716: def translate(tx, ty) 717: tx, ty = Magick::RVG.convert_to_float(tx, ty) 718: @gc.translate(tx, ty) 719: @tx, @ty = tx, ty 720: concat_matrix() 721: nil 722: end
# File lib/rvg/misc.rb, line 724 724: def word_spacing(value) 725: @text_attrs.word_spacing = Magick::RVG.convert_one_to_float(value) 726: nil 727: end
# File lib/rvg/misc.rb, line 729 729: def writing_mode(mode) 730: @text_attrs.writing_mode = mode 731: nil 732: end
# File lib/rvg/misc.rb, line 520 520: def concat_matrix() 521: curr = @text_attrs.affine 522: sx = curr.sx * @sx + curr.ry * @rx 523: rx = curr.rx * @sx + curr.sy * @rx 524: ry = curr.sx * @ry + curr.ry * @sy 525: sy = curr.rx * @ry + curr.sy * @sy 526: tx = curr.sx * @tx + curr.ry * @ty + curr.tx 527: ty = curr.rx * @tx + curr.sy * @ty + curr.ty 528: @text_attrs.set_affine(sx, rx, ry, sy, tx, ty) 529: init_matrix() 530: end