[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

In This Thread

Prev Next