テキストの領域を取得する

Siv3D Advent Calendar 2013, 18 日目の記事です。
今日はテキストが描画される領域を計算する機能を紹介します。

Font::region() を使うと、Font::draw() したときにテキストが描かれる領域をあらかじめ RectF で取得できます。領域に応じて、テキストの位置や背景を決めるといった使い方ができます。

# include <Siv3D.hpp>

void Main()
{
	Window::SetPos(770, 386);

	const Font font(16);

	const std::array<String,3> messages =
	{
		L"かがくの ちからって すげー!",
		L"いまや すうじゅうぎょうの\nシープラスプラスの プログラムだけで",
		L"ゲームや おんがくプレイヤーが\nつくれるんだと",
	};

	int count = 0;

	while (System::Update())
	{
		if (Input::MouseL.clicked)
		{
			++count %= messages.size();
		}
		
		Circle(100, 300, 80).draw();

		const String message = messages[count];

		const RectF region = font.region(message);

		const Vec2 pos(150, 150 - region.h);

		(region + pos).stretched(50, 15).draw(Palette::Seagreen);

		Triangle({ 200, 165 }, { 280, 165 }, { 180, 220 })
			.draw(Palette::Seagreen);

		font.draw(message, pos);
	}
}