eraシリーズ改造/バリアント開発の覚え書き

MegatenやMeiQ外伝にあるカラーバーを表示する処理、あれがなんか楽しそうなので作ってみたくなったのだが、どうも連続して描画すると4文字置きくらいで隙間が空いたりしてよくわからん。SETCOLORすると隙間が出なかったりするのもよくわからん。グラデーションさせたいから1文字ずつSETCOLORするし問題ないことにした。
あと、よく使われている▄(U+2584)、どうも下に寄ってるというか、ディセンダラインにくっついてるよねこれ。▃(U+2583)の方はディセンダラインからほんのちょっとだけ浮いてるようだ。それでも下に寄り気味なのは否めない。さてなんかいい方法はないかなと思ったけれど、そういうグリフだからとあきらめるしかなさそうだ。
と思っていたら▦(U+25A6)というグリフがあった。ちゃんと表示されているかあやしいが、■の内側右端あたりにちょうど:みたいな穴が空いたようなものが表示される。どういう記号なのかよく分からんが、なんかそういう記号があるらしい。
ためしにPRINTさせてみると、等間隔に:状の穴が空いているものの、真ん中揃えのバーになった。等間隔に:状の穴が空いていなければとてもいい感じだったのだが。
待てよ。
「この手の小さい穴だったら、フォントをボールド体にしたら潰れるのでは?」
試した。
潰れた!!!!!! すげえ!!!!!!!!! バーのようなものだ!!!!!!!!!!!!
そういうわけなのでFONTBOLDしてからU+25A6を並べると真ん中揃えのバーが表示できますよ、という話。ちなみにフォントをMeiryoにするとちょっと上下に伸びる(█(U+2588)よりは小さめ)。短いバーを描画するときはMS ゴシック、長めのバーを描画するときはMeiryoみたいな感じで使い分けるのもいいかもしれない。

……正体不明の記号のままというのもなんとなく気持ち悪かったので調べてみたところ、http://www.ltool.net/characters_to_unicode_charts_... にあった。こういうグリフらしい。フォントサイズが小さいので右端の穴以外潰れて表示されたという感じかもしれない。いわゆる網掛けのようなものだと思うのだが、この前後には縦線、横線、斜線の網掛けのもあった。ふーんなるほどなー。Square with orthogonal crosshatch fill(直交網掛け塗り潰し正方形)という名前らしいので、塗り潰し図形の一種には違いないと思われる。ちょっと安心。
なんというかフォントの不具合というかバグを利用するとかだったらちょっとなという感じだったのだが、意図的にフォントを潰すくらいのハックなら大丈夫だろう、たぶん。

Meiryoにすると高くなるよーって書いて今試したら表示すらされなかったので調べた。どうもWinAPIでMeiryoで18ptのときにU+25A6がちゃんと表示されない。今このブラウザ上でU+25A6がちゃんと表示できてないのも考えるとその辺なんかあるかもしれないなあ。
で、ついでに調べたので追記。
ユニコード範囲の文字を描画するときに位置がずれるのは、描画APIによるものらしいことが分かった。基本的にWinAPIだと安定するが、一部のフォントが一部のサイズで表示すらできないことがある。また、合字がらみでもおかしな挙動をすることがあるようだ。その点はGDI+の方が安定しているが、幅がとにかくずれまくる。ユニコード範囲の文字を連続して描画する、というか連続した文字列として描画するときに幅が増えるようだ。おそらくSETCOLOR命令などでグラフィックコンテキストが変更されるとそのときに描画位置も再度設定しなおすんだろうという予想だが、とにかく一文字ずつ描画させるように仕組むと幅は増えない(が、一番最後の文字を描画した後、続けて次の文字を描画しようとすると、若干左にずれた位置から描画されてしまう。オフセットの計算がどうなっているのかまるで分からん)。
eraではフォントの位置を揃えてUIを表現するわけだから、ユニコード範囲の文字を使うときはずれるのを覚悟するか、ずれないようにはWinAPIで描画するようにするか、そもそもずれて困る場所ではユニコード範囲を使わないようにするか……なにかしら考えたほうがいいだろう。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

リンク

漠々ト、獏
eramaker/eramaker2の開発元の公式サイト。

Emuera - emurator of eramaker
C#で書かれたeramakerのエミュレータ「Emuera」のプロジェクトページ。

eraシリーズを語るスレ まとめ
eraシリーズ全般のまとめ。バリアント情報、改造情報など。

eratoho まとめ
eramakerのバリアント「eratoho」のまとめ。

era板
eraシリーズについての掲示板。

サブページ

Rubiera
Bitbucket上のRubieraプロジェクトページ。Rubieraのソースコードのダウンロードはここで。

管理人/副管理人のみ編集できます