テキストの領域を取得する
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); } }