るいもの戯れ言

テキスト描画自体は、cairo::Contextにshow_textというのがあるので簡単だ。


context.move_to(100f64, 200f64);
context.set_source_rgb(0.0, 0.0, 0.0);
context.set_font_size(200.0);
context.show_text("Help");
context.stroke();

再描画の時のために描画領域を求める方法だが、cairo::Contextにtext_extentsがあって、これで得られる。ここには、width, height, x bearing, y bearing, x advance, y advanceが含まれている。このうちx advanceとy advanceが良く分からないが、残りの4つのパラメータで描画領域は計算できるようだ。

始点をx, yとすると、描画域は以下で得られるようだ。

左上: (x + x bearing, y + y bearing)
右上: (x + x bearing + width, y + y bearing)
右下: (x + x bearing + width, y + y bearing + height)
左下: (x + x bearing, y + y bearing + height)

サンプルは、GitHubに置いておいた。