From: Masafumi Y. <my...@gm...> - 2014-10-28 03:58:06
|
はじめまして、Ruby-GNOME2プロジェクトチームの横山です。 2014年10月27日 12:04 Hiroyuki Sato <hir...@gm...>: > 皆様初めまして > 佐藤と申します。 > > 最近cairoを使い始めました。テキストレイアウトをするにはpangoを使うとうことを知りました。 > そのため、pangoも使い始めました。 rcairoやRuby/Pangoを使っていただきありがとうございます。うれしいです あまりPangoには詳しくないのですが、一応できたので以下に回答します。 > (1) pangoで縦方向を中央揃えにする方法 > > 縦方向は中央揃えなどがなく、Pango::AttrRise.new(10)?を使って > 指定するのでしょうか?、サンプルなどありますでしょうか? 縦位置はcairo側で指定するのが無難かと思います。 Pangoでもできるのかもしれませんが、私はわかりませんでした。 Cairo::Context#move_toを使って開始位置を真ん中あたりにしてから 描画するのはどうでしょうか。 context.move_to(0, height * 0.5) # この行を追加 context.show_pango_layout(layout) > (2) フォント描画時の縦横サイズ取得方法 > これはpangoとは関係ないかもしれませんがもしご存知でしたら > 教えていただけると助かります。 > > pangoでフォントサイズ16の文字「佐藤博之」を記述した場合 > 縦、横のサイズはXXXと取得してその値でCairoのキャンパス > を作成することは可能でしょうか? Pango::Layout#extentsや、Cairo::Context#text_extentsというメソッドで テキストの範囲を取得することができます。 https://developer.gnome.org/pango/stable/pango-Layout-Objects.html#pango-layout-get-extents http://rcairo.github.io/doc/ja/cairo-context.html#label-118 こんな感じで使います。 extents_rect = layout.extents[1] text_width = extents_rect.width / Pango::SCALE text_height = extents_rect.height / Pango::SCALE この値を使って、再度ImageSurfaceを作ればよさそうです。 また、この値を使えば、先ほどの縦位置がもっと正確に出せます。 context.move_to(0, height * 0.5 - text_height * 0.5) わかりづらいところがあれば追加でご質問くださいませ。 |