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.
82
83
84
85
|
# File 'lib/rvg/misc.rb', line 82
def initialize(context)
@ctx = context
@ctx.shadow.affine = @ctx.text_attrs.affine
end
|
Instance Method Details
#enquote(text) ⇒ Object
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
# File 'lib/rvg/misc.rb', line 87
def enquote(text)
if text.length > 2 && /\A(?:\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})\z/.match(text)
return text
elsif !text['\'']
text = '\''+text+'\''
return text
elsif !text['"']
text = '"'+text+'"'
return text
elsif !(text['{'] || text['}'])
text = '{'+text+'}'
return text
end
text.gsub!(/[}]/) { |b| '\\' + b }
return '{' + text + '}'
end
|
#glyph_metrics(glyph_orientation, glyph) ⇒ Object
106
107
108
109
110
111
112
113
114
115
116
|
# File 'lib/rvg/misc.rb', line 106
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 == 0 || glyph_orientation == 180
[w, h]
else
[h, w]
end
end
|
#render_glyph(glyph_orientation, x, y, glyph) ⇒ Object
162
163
164
165
166
167
168
169
170
171
172
173
|
# File 'lib/rvg/misc.rb', line 162
def render_glyph(glyph_orientation, x, y, glyph)
if glyph_orientation == 0
@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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
# File 'lib/rvg/misc.rb', line 139
def shift_baseline(glyph_orientation, glyph)
glyph_dimensions = @ctx.shadow.get_type_metrics(glyph)
if glyph_orientation == 0 || glyph_orientation == 180
x = glyph_dimensions.width
else
x = 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 = $1 == '-' ? -1.0 : 1.0
x = (m * x * $1.to_f / 100.0)
else
x = -@ctx.text_attrs.baseline_shift
end
return x
end
|
#text_rel_coords(text) ⇒ Object
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
# File 'lib/rvg/misc.rb', line 118
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
|