文字表示
ぁーそうえいば文字表示が無かったなぁ(致命的)ということで作りました.
#include <afc/gui.hpp> using namespace afc::gui; window wnd; screen scr; // 初期化略 // これが文字表示 printer_holder<wchar_t, int> ph; // 有効化 scr.assign(ph); // これをしなきゃらならないのは煩わしいなぁ // 設定 ph.init(L"MS 明朝", 32, 0x00ff0000); // MS明朝,32ポイント,赤 // 描画 ph.write(L"描画しまっす"); // 上の方法だと描画時に読込んで重いので,文字を事前に読込むこともできる ph.preload(L"にみ"); ph.preload(L"事前読込"); // 読込みはしていない(「しまっす」は既に読込んである) ph.write(L"事前に読込みしまっす"); // フィールドを設定できます // このフィールドからは,はみ出しません // はみ出そうものなら途中で改行,それでもダメならあきらめます ph.field(50, 100, 150, 200); // x, y, w, h // 長いとで途中で表示が打ち切られます ph.write(L"あいうえお…わをん"); // 一つのprinter_holder<>に複数の書体,複数のフォントサイズ,複数の色は持たせられません // 一つでもパラメータが違う場合はもう一個作る必要があります printer_holder<wchar_t, int> ph2; ph2.init(L"MS 明朝", 32, 0x000000ff); // これは青 // printer_holder<>は中身を共有できます // ただしフィールドは変えられます printer_holder<wchar_t, int> ph3(ph); // phと共有 // 共有する場合は一つを初期化すればよい(shared_ptr<>のような感じ) ph3.field(300, 100, 500, 200); // ただしfieldは変えられる ph3.write(L"abc...");
本当は少し違って
afc::gui::directx::printer<>という文字表示クラスがあります.
printer_holer<>はこのprinter<>に対して以下のことができます.
- printer<>をポインタの様に共有できる
- fieldをbindしてくれる(printer_holder<>を経由してwrite等を呼ぶと自動的にfieldを補完してくれる).
この共有というのが意外に必要で,共有しないと書体,サイズ,色が全く同じ場合でも複数文字テクスチャを作ってしまいます.
共有すれば使い回しができます.
まぁこんな感じです.
とりあえず普通に使うには困りません.
唯一のネックがassignだよなぁ.
たくさんの箇所で使うからいっそのことglobal変数としてしまった方がいいかもしれない.