[ruby-list:50292] Windows の Pango でフォントサイズが丸められる
From:
"5.5" <5.5@...>
Date:
2016-03-28 03:00:51 UTC
List:
ruby-list #50292
5.5 です。
既出かどうか分かりませんが,Windows の Pango でフォントサイズ
が丸められる現象があります。
たとえば,5.5 pt にしようと思って 5.5 * Pango::SCALE * 0.75
を指定してやると,実際には 6 pt の大きさになってしまいます。
いろいろ実験すると,どうも pt 単位で四捨五入されるようです。
以下の環境で現象を確認しました。
Windows 7
ruby 2.2.4p230 (2015-12-16 revision 53155) [i386-mingw32]
cairo (1.14.3 x86-mingw32)
pango (3.0.7 x86-mingw32, 2.2.5 x86-mingw32)
一方,以下の環境では起こりませんでした。
CentOS release 6.7 (Final)
cairo (1.14.1)
pango (2.2.5)
※Ruby バージョンは記録を忘れましたが,2.1.5 あたりだったと
思います。
再現コードは下記のとおりです。
Cairo::Context#show_text と Pango とを比較しています。
Pango のほうは丸めが起こっているが一目瞭然です。
require 'pango'
Pango::CairoFontMap.default = Pango::CairoFontMap.create(:freetype)
surface = Cairo::PDFSurface.new __FILE__+".pdf", 500, 500
context = Cairo::Context.new surface
str = "春夏秋冬東西南北"
font = "IPAexGothic"
context.select_font_face font
context.translate 50, 50
x1 = 30 # show_text の X 座標
x2 = 120 # show_pango_layout の X 座標
8.step(10, 0.125).with_index do |font_size, i|
y = 20 * i
layout = context.create_pango_layout
pango_size = (font_size * Pango::SCALE * 0.75).round
attr_list, text =
Pango.parse_markup %|<span size="#{pango_size}"
face="#{font}">#{str}</span>|
layout.attributes = attr_list
layout.text = text
# フォントサイズを表示
context.set_font_size 8
context.move_to 0, y + 7
context.show_text font_size.to_s
# show_text 版
context.move_to x1, y + font_size * 0.88
context.set_font_size font_size
context.show_text str
# Pango 版
context.move_to x2, y
context.show_pango_layout layout
end
surface.finish
--
5.5@moji.gr.jp