Class: Magick::RVG::Utility::GraphicContext

Inherits:
Object
  • Object
show all
Defined in:
lib/rvg/misc.rb

Overview

class TextAttributes

Constant Summary collapse

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}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeGraphicContext

Returns a new instance of GraphicContext.



537
538
539
540
541
542
543
# 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

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(methID, *args, &block) ⇒ Object



545
546
547
# File 'lib/rvg/misc.rb', line 545

def method_missing(methID, *args, &block)
    @gc.__send__(methID, *args, &block)
end

Instance Attribute Details

#gcObject (readonly)

Returns the value of attribute gc.



535
536
537
# File 'lib/rvg/misc.rb', line 535

def gc
  @gc
end

#text_attrsObject (readonly)

Returns the value of attribute text_attrs.



535
536
537
# File 'lib/rvg/misc.rb', line 535

def text_attrs
  @text_attrs
end

Class Method Details

.degrees_to_radians(deg) ⇒ Object



509
510
511
# File 'lib/rvg/misc.rb', line 509

def GraphicContext.degrees_to_radians(deg)
    Math::PI * (deg % 360.0) / 180.0
end

Instance Method Details

#affine(sx, rx, ry, sy, tx, ty) ⇒ Object



549
550
551
552
553
554
# 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

#baseline_shift(value) ⇒ Object



556
557
558
559
560
561
562
563
564
565
566
# 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

#font(name) ⇒ Object



568
569
570
571
572
# File 'lib/rvg/misc.rb', line 568

def font(name)
    @gc.font(name)
    @shadow[-1].font = name
    nil
end

#font_family(name) ⇒ Object



574
575
576
577
578
# File 'lib/rvg/misc.rb', line 574

def font_family(name)
    @gc.font_family(name)
    @shadow[-1].font_family = name
    nil
end

#font_size(points) ⇒ Object



580
581
582
583
584
# File 'lib/rvg/misc.rb', line 580

def font_size(points)
    @gc.font_size(points)
    @shadow[-1].pointsize = points
    nil
end

#font_stretch(stretch) ⇒ Object



586
587
588
589
590
591
# 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

#font_style(style) ⇒ Object



593
594
595
596
597
598
# 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

#font_weight(weight) ⇒ Object



600
601
602
603
604
605
606
# 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

#glyph_orientation_horizontal(deg) ⇒ Object



608
609
610
611
612
# 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

#glyph_orientation_vertical(deg) ⇒ Object



614
615
616
617
618
# 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

#inspectObject



620
621
622
# File 'lib/rvg/misc.rb', line 620

def inspect()
    @gc.inspect
end

#letter_spacing(value) ⇒ Object



624
625
626
627
# File 'lib/rvg/misc.rb', line 624

def letter_spacing(value)
    @text_attrs.letter_spacing = Magick::RVG.convert_one_to_float(value)
    nil
end

#popObject



636
637
638
639
640
641
# File 'lib/rvg/misc.rb', line 636

def pop()
    @gc.pop
    @shadow.pop
    @text_attrs.pop
    nil
end

#pushObject



629
630
631
632
633
634
# File 'lib/rvg/misc.rb', line 629

def push()
    @gc.push
    @shadow.push(@shadow.last.dup)
    @text_attrs.push
    nil
end

#rotate(degrees) ⇒ Object



643
644
645
646
647
648
649
650
651
652
# 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

#scale(sx, sy) ⇒ Object



654
655
656
657
658
659
660
# 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

#shadowObject



662
663
664
# File 'lib/rvg/misc.rb', line 662

def shadow()
    @shadow.last
end

#skewX(degrees) ⇒ Object



666
667
668
669
670
671
672
# 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

#skewY(degrees) ⇒ Object



674
675
676
677
678
679
680
# 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

#stroke_width(width) ⇒ Object



682
683
684
685
686
687
# 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

#text(x, y, text) ⇒ Object



689
690
691
692
693
694
695
696
697
698
# 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

#text_anchor(anchor) ⇒ Object



700
701
702
703
704
705
706
707
708
# 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

#text_decoration(decoration) ⇒ Object



710
711
712
713
714
715
# 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

#translate(tx, ty) ⇒ Object



717
718
719
720
721
722
723
# 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

#word_spacing(value) ⇒ Object



725
726
727
728
# File 'lib/rvg/misc.rb', line 725

def word_spacing(value)
    @text_attrs.word_spacing = Magick::RVG.convert_one_to_float(value)
    nil
end

#writing_mode(mode) ⇒ Object



730
731
732
733
# File 'lib/rvg/misc.rb', line 730

def writing_mode(mode)
    @text_attrs.writing_mode = mode
    nil
end