Xkanon(12)

Bless のチャット表示に挑戦します。

 Xkanon の全画面表示は余分な隙間に裏のウィンドウが見えてしまいますが、アスペクトをほぼ崩さずに表示できるようにしました。ただ、そうすると bless のチャット内容が表示されている端末が表示されません。ONScripter 用に変換してみましたが、動きませんでした。

 やはり、実装すべきだろうか。

 ちょっと調べます。テキスト Widget かラベル Widget で実現すべきかな? 背景を透過できればいいんですが、よく考えたら widget は自由に配置できません。やはり、画像として書き込まないといけないんでしょう。

 とにかくやってみます。

 えっと、window_text.cc の DrawTextPDT で表示しているんでした。DrawTextPDT から呼ばれる DrawTexttoImage はオリジナルには存在しますが、オリジナルのやり方は古いのでコンパイルエラーになります。

 セリフ表示とかを参考にすると、pango を使ってテキストの表示を行うのですが、Xkanon の画面の更新方法がよくわかりません。

 pix_image という drawable なものに書き込んでみましたが画面に変化がありません。セリフ表示のところでは、main_window にも同時に書き込んでいるので同じ様に pix_image と main_window に書き込んだところチャットウィンドウがチラチラしました。

 一度表示してクリアされている感じです。

 オリジナルの処理では、読み込んだオリジナルの内部イメージに文字のイメージをコピーしているようです。pix_image に書き込んだ部分を内部イメージにコピーしたところ、チャットの内容が表示されるようになりました。

 ところが、マウスを動かしていないと表示内容が崩れてしまいます。なぜでしょう。

 SyncPixmap という関数が定義されています。処理のはじめで、この関数を呼び出すことで画面の乱れはなくなりました。main_window への書き込みは必要なかったので削除。

 また、チャットはバックログできないので、ちょっとウェイトをかけるようにしました。

これでなんとかなったかな。と、思ったらチャット画面でプリムローズの発言で落ちました。表示がプリ□ローズになっています。どうも「ム」がだめらしいです。おま環のような気がしますが、「ム」だけ直接 utf8 に変えました。

 これで落ち着いてくれたらいいんだけど。

 DrawTexttoImage、結局実装しちゃった・・・。でも、ウィンドウ内でチャットが進むのは雰囲気が出て良いです。自己満足だけど。

 あと、なぜか bless 終了後に端末のエコーバックが無効になります。

$ stty echo

としてやるとエコーバックするようになります。

 Xkanon の修正は終わりかな。ただ、動くようにしたゲームをいつやるかは不明です。(動くと満足してしまいます)

Xkanon

Posted by sirius