Class: Magick::RVG::Utility::TextStrategy
- Inherits:
-
Object
- Object
- Magick::RVG::Utility::TextStrategy
show all
- Defined in:
- lib/rvg/misc.rb
Instance Method Summary
collapse
Constructor Details
Returns a new instance of TextStrategy.
69
70
71
72
|
# File 'lib/rvg/misc.rb', line 69
def initialize(context)
@ctx = context
@ctx.shadow.affine = @ctx.text_attrs.affine
end
|
Instance Method Details
#enquote(text) ⇒ Object
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/rvg/misc.rb', line 74
def enquote(text)
return text if text.length > 2 && /\A(?:\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})\z/.match(text)
if !text['\'']
text = '\'' + text + '\''
return text
elsif !text['"']
text = '"' + text + '"'
return text
elsif !(text['{'] || text['}'])
text = '{' + text + '}'
return text
end
text.gsub!(/[}]/) { |b| '\\' + b }
'{' + text + '}'
end
|
#glyph_metrics(glyph_orientation, glyph) ⇒ Object
93
94
95
96
97
98
99
100
101
102
103
|
# File 'lib/rvg/misc.rb', line 93
def glyph_metrics(glyph_orientation, glyph)
gm = @ctx.shadow.get_type_metrics('a' + glyph + 'a')
gm2 = @ctx.shadow.get_type_metrics('aa')
h = (gm.ascent - gm.descent + 0.5).to_i
w = gm.width - gm2.width
if glyph_orientation.zero? || glyph_orientation == 180
[w, h]
else
[h, w]
end
end
|
#render_glyph(glyph_orientation, x, y, glyph) ⇒ Object
149
150
151
152
153
154
155
156
157
158
159
160
|
# File 'lib/rvg/misc.rb', line 149
def render_glyph(glyph_orientation, x, y, glyph)
if glyph_orientation.zero?
@ctx.gc.text(x, y, enquote(glyph))
else
@ctx.gc.push
@ctx.gc.translate(x, y)
@ctx.gc.rotate(glyph_orientation)
@ctx.gc.translate(-x, -y)
@ctx.gc.text(x, y, enquote(glyph))
@ctx.gc.pop
end
end
|
#shift_baseline(glyph_orientation, glyph) ⇒ Object
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
# File 'lib/rvg/misc.rb', line 126
def shift_baseline(glyph_orientation, glyph)
glyph_dimensions = @ctx.shadow.get_type_metrics(glyph)
x = if glyph_orientation.zero? || glyph_orientation == 180
glyph_dimensions.width
else
glyph_dimensions.ascent - glyph_dimensions.descent
end
case @ctx.text_attrs.baseline_shift
when :baseline
x = 0
when :sub
when :super
x = -x
when /[-+]?(\d+)%/
m = Regexp.last_match(1) == '-' ? -1.0 : 1.0
x = (m * x * Regexp.last_match(1).to_f / 100.0)
else
x = -@ctx.text_attrs.baseline_shift
end
x
end
|
#text_rel_coords(text) ⇒ Object
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/rvg/misc.rb', line 105
def text_rel_coords(text)
y_rel_coords = []
x_rel_coords = []
first_word = true
words = text.split(::Magick::RVG::WORD_SEP)
words.each do |word|
unless first_word
wx, wy = get_word_spacing
x_rel_coords << wx
y_rel_coords << wy
end
first_word = false
word.split('').each do |glyph|
wx, wy = get_letter_spacing(glyph)
x_rel_coords << wx
y_rel_coords << wy
end
end
[x_rel_coords, y_rel_coords]
end
|