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 500 500: def GraphicContext.degrees_to_radians(deg) 501: Math::PI * (deg % 360.0) / 180.0 502: end
# File lib/rvg/misc.rb, line 528 528: def initialize() 529: @gc = Magick::Draw.new 530: @shadow = Array.new 531: @shadow << Magick::Draw.new 532: @text_attrs = TextAttributes.new 533: init_matrix() 534: end
# File lib/rvg/misc.rb, line 540 540: def affine(sx, rx, ry, sy, tx, ty) 541: sx, rx, ry, sy, tx, ty = Magick::RVG.convert_to_float(sx, rx, ry, sy, tx, ty) 542: @gc.affine(sx, rx, ry, sy, tx, ty) 543: @text_attrs.set_affine(sx, rx, ry, sy, tx, ty) 544: nil 545: end
# File lib/rvg/misc.rb, line 547 547: def baseline_shift(value) 548: @text_attrs.baseline_shift = case value 549: when 'baseline', 'sub', 'super' 550: value.intern 551: when /[-+]?\d+%/, Numeric 552: value 553: else 554: :baseline 555: end 556: nil 557: end
# File lib/rvg/misc.rb, line 559 559: def font(name) 560: @gc.font(name) 561: @shadow[-1].font = name 562: nil 563: end
# File lib/rvg/misc.rb, line 565 565: def font_family(name) 566: @gc.font_family(name) 567: @shadow[-1].font_family = name 568: nil 569: end
# File lib/rvg/misc.rb, line 571 571: def font_size(points) 572: @gc.font_size(points) 573: @shadow[-1].pointsize = points 574: nil 575: end
# File lib/rvg/misc.rb, line 577 577: def font_stretch(stretch) 578: stretch = FONT_STRETCH.fetch(stretch.intern, Magick::NormalStretch) 579: @gc.font_stretch(stretch) 580: @shadow[-1].font_stretch = stretch 581: nil 582: end
# File lib/rvg/misc.rb, line 584 584: def font_style(style) 585: style = FONT_STYLE.fetch(style.intern, Magick::NormalStyle) 586: @gc.font_style(style) 587: @shadow[-1].font_style = style 588: nil 589: end
# File lib/rvg/misc.rb, line 591 591: def font_weight(weight) 592: # If the arg is not in the hash use it directly. Handles numeric values. 593: weight = FONT_WEIGHT.fetch(weight) {|key| key} 594: @gc.font_weight(weight) 595: @shadow[-1].font_weight = weight 596: nil 597: end
# File lib/rvg/misc.rb, line 599 599: def glyph_orientation_horizontal(deg) 600: deg = Magick::RVG.convert_one_to_float(deg) 601: @text_attrs.glyph_orientation_horizontal = (deg % 360) / 90 * 90 602: nil 603: end
# File lib/rvg/misc.rb, line 605 605: def glyph_orientation_vertical(deg) 606: deg = Magick::RVG.convert_one_to_float(deg) 607: @text_attrs.glyph_orientation_vertical = (deg % 360) / 90 * 90 608: nil 609: end
# File lib/rvg/misc.rb, line 615 615: def letter_spacing(value) 616: @text_attrs.letter_spacing = Magick::RVG.convert_one_to_float(value) 617: nil 618: end
# File lib/rvg/misc.rb, line 536 536: def method_missing(methID, *args, &block) 537: @gc.__send__(methID, *args, &block) 538: end
# File lib/rvg/misc.rb, line 627 627: def pop() 628: @gc.pop 629: @shadow.pop 630: @text_attrs.pop 631: nil 632: end
# File lib/rvg/misc.rb, line 620 620: def push() 621: @gc.push 622: @shadow.push(@shadow.last.dup) 623: @text_attrs.push 624: nil 625: end
# File lib/rvg/misc.rb, line 634 634: def rotate(degrees) 635: degrees = Magick::RVG.convert_one_to_float(degrees) 636: @gc.rotate(degrees) 637: @sx = Math.cos(GraphicContext.degrees_to_radians(degrees)) 638: @rx = Math.sin(GraphicContext.degrees_to_radians(degrees)) 639: @ry = -Math.sin(GraphicContext.degrees_to_radians(degrees)) 640: @sy = Math.cos(GraphicContext.degrees_to_radians(degrees)) 641: concat_matrix() 642: nil 643: end
# File lib/rvg/misc.rb, line 645 645: def scale(sx, sy) 646: sx, sy = Magick::RVG.convert_to_float(sx, sy) 647: @gc.scale(sx, sy) 648: @sx, @sy = sx, sy 649: concat_matrix() 650: nil 651: end
# File lib/rvg/misc.rb, line 657 657: def skewX(degrees) 658: degrees = Magick::RVG.convert_one_to_float(degrees) 659: @gc.skewX(degrees) 660: @ry = Math.tan(GraphicContext.degrees_to_radians(degrees)) 661: concat_matrix() 662: nil 663: end
# File lib/rvg/misc.rb, line 665 665: def skewY(degrees) 666: degrees = Magick::RVG.convert_one_to_float(degrees) 667: @gc.skewY(degrees) 668: @rx = Math.tan(GraphicContext.degrees_to_radians(degrees)) 669: concat_matrix() 670: nil 671: end
# File lib/rvg/misc.rb, line 673 673: def stroke_width(width) 674: width = Magick::RVG.convert_one_to_float(width) 675: @gc.stroke_width(width) 676: @shadow[-1].stroke_width = width 677: nil 678: end
# File lib/rvg/misc.rb, line 680 680: def text(x, y, text) 681: return if text.length == 0 682: if @text_attrs.non_default? 683: text_renderer = TEXT_STRATEGIES[@text_attrs.writing_mode].new(self) 684: else 685: text_renderer = DefaultTextStrategy.new(self) 686: end 687: 688: return text_renderer.render(x, y, text) 689: end
# File lib/rvg/misc.rb, line 691 691: def text_anchor(anchor) 692: anchor = anchor.intern 693: anchor_enum = TEXT_ANCHOR.fetch(anchor, Magick::StartAnchor) 694: @gc.text_anchor(anchor_enum) 695: align = ANCHOR_TO_ALIGN.fetch(anchor, Magick::LeftAlign) 696: @shadow[-1].align = align 697: @text_attrs.text_anchor = anchor 698: nil 699: end
# File lib/rvg/misc.rb, line 701 701: def text_decoration(decoration) 702: decoration = TEXT_DECORATION.fetch(decoration.intern, Magick::NoDecoration) 703: @gc.decorate(decoration) 704: @shadow[-1].decorate = decoration 705: nil 706: end
# File lib/rvg/misc.rb, line 708 708: def translate(tx, ty) 709: tx, ty = Magick::RVG.convert_to_float(tx, ty) 710: @gc.translate(tx, ty) 711: @tx, @ty = tx, ty 712: concat_matrix() 713: nil 714: end
# File lib/rvg/misc.rb, line 716 716: def word_spacing(value) 717: @text_attrs.word_spacing = Magick::RVG.convert_one_to_float(value) 718: nil 719: end
# File lib/rvg/misc.rb, line 721 721: def writing_mode(mode) 722: @text_attrs.writing_mode = mode 723: nil 724: end
# File lib/rvg/misc.rb, line 512 512: def concat_matrix() 513: curr = @text_attrs.affine 514: sx = curr.sx * @sx + curr.ry * @rx 515: rx = curr.rx * @sx + curr.sy * @rx 516: ry = curr.sx * @ry + curr.ry * @sy 517: sy = curr.rx * @ry + curr.sy * @sy 518: tx = curr.sx * @tx + curr.ry * @ty + curr.tx 519: ty = curr.rx * @tx + curr.sy * @ty + curr.ty 520: @text_attrs.set_affine(sx, rx, ry, sy, tx, ty) 521: init_matrix() 522: end