フォント周りのカスタマイズ

Issue #55 resolved
k4nagatsuki repo owner created an issue

使用されているフォントをプレイヤーの好みのものに差し替えられるようにする事にはある程度需要があると思われる。

どのように差し替えるかについて2つの方針が考えられる。

  1. メッセージやカード名・右クリックで出る解説など、使用されている箇所をピンポイントで好みのフォントに変更する。
  2. 内部的なフォントをすべて置換してしまう。例えば、IPA P明朝を使用している箇所はMS P明朝に変えてしまう。

前者はどこに差し替え需要があるか調査する必要がある。後者は副作用が非常に大きく、また大雑把な差し替えしかできない(たとえば等幅の明朝を差し替えるとメッセージに加えて貼紙やキャストのステータスなどが全て一括で変わってしまう)。

さらに、フォントの設定方法に関してもいくつか方法が考えられる。

  1. プレイヤーがエンジンの設定でフォントを選択する。
  2. スキン内でフォントを指定できるようにする。

これらが並立した場合は上書きのルールなども定める必要がある。

Comments (33)

  1. k4nagatsuki reporter

    変更できたらよさそうな部分を列挙。恐らく他にもあるし、この全てに対応する必要はないと思われる。

    • メッセージ
    • メッセージの下の選択肢
    • カード名
    • 右クリックで出てくる解説
    • 貼紙のタイトル・文章
    • キャラクターのステータス
  2. takuto_cw

    今更ですが、こっそりコメント。 ・キャラクター所有カード画面の枚数表示

    IPAフォントだと、Lv15キャラに目一杯持たせた場合に(cap10/10) 文字が枠にくっついてしまうのでした。

    設定方法は、どうせなら世界観ごとにフォントを変えられる方がいいのかな? ということで、 スキン方式に1票入れておきます。

    (そもそもフォントファイルを入れないと動かない、という現在の仕様が、 個人的にあまり好きでなかったりするのですが……ここは変更きかないでしょうか……? エンジンをドラッグ&ドロップ → スキンに元と同じフォントが設定され、そのフォントさえあれば動作する、など。)

  3. k4nagatsuki reporter

    フォントのカスタマイズとは別に、表示上問題のあるところは都度直していきましょう。

    フォントファイルの件については、現在デイリービルドをどんどん出していくために容量を軽くしたいため別配布にしている、という事情があります。リリース版では同梱する事になるはずです(サイズは大きくなりますが……)。

    そもそもフォント同梱が必要なの?ということについては、マルチプラットフォーム対応にしたいという将来的野望と、あと実はpygameでシステムにインストールされている日本語フォントを使うのがものすごく難しい(今のところまともな方法では無理)、という事情があったりします。wxPython側はその点問題ないのですが。

  4. takuto_cw

    ……そういえば、表示サイズを変えれば済む話でした。素で気づいていませんでした、お恥ずかしい。 dialog の cardcontrol.py にそれっぽい箇所を見つけたので、ちょっと触ってみます。

    >フォント配布の事情
    なるほど……そんな事情があったとは。知りませんでした。 正式リリースまでこぎ着ければ、今みたいな面倒はなくなる、と。

    先程書き忘れましたが、個人的には、一括変換よりは個別カスタマイズだと嬉しいです。 飾り文字を使ってみたいので ↓ 1個追加しておきます。

    ・レベル表示

    あまり設定項目を増やすと、プレイヤーに面倒そうな印象を与えてしまって、よろしくないのでしょうけれど。好き勝手に言ってみました。

  5. k4nagatsuki reporter

    役割別にフォントが定義されているのは以下の箇所ですね。

    https://bitbucket.org/k4nagatsuki/cardwirthpy-reboot/src/4d445f7dec986322bf247922f2746e6b8f11e2c2/cw/setting.py?at=default#cl-361

    ただ、ここで定義しているのはpygame側のフォントだけです(上に書いた理由でwxPythonで使うフォントとpygameで使うフォントを個別に扱っている)。

    MS 明朝を使っているメッセージについては、

    1. wxPythonで文字を描画した画像を作る
    2. pygameの画像に変換する
    3. 貼り付ける

    という周りくどい手順を踏んでいます。フォント周りをいじる場合、この辺りをライブラリ的なコードにまとめた方がいいかもしれません。

    デイリービルドに関しては、毎回落としてきたものを上書きすれば既存のフォントも残るので楽だと思います。

  6. takuto_cw

    >フォント定義箇所
    おおお、これはご丁寧に、ありがとうございます! まずここで定義しておいて、 使用時に辞書からフォント名を引っ張り出す、という流れなわけですね。

    スキンでフォントを定義したいのなら、ここに処理を付け足せばいいのかな。 スキンのファイルからフォント名を読み取って、そのフォントが存在するなら辞書に書き込み、 存在しない場合は云々。

    上書きアップデート=良くない という固定観念がありましたが、 これの場合は別に問題ありませんでした……。 面倒なのは仕様ではなく自分のやり方の方だったようで。大変失礼いたしました。

  7. k4nagatsuki reporter

    実際には、単純に処理を付け足すわけにはいかなかったりします。例えばそこのpcard_levelの所に自分のシステムにインストールされている飾り文字のフォントを設定しようとしても、おそらく上手くいかないです。pygame.font.SysFontにバグがあるせいで(仕様じゃないと思う、多分)、システムのフォントを上手く使えないのです(そのため、messageの所では上記の回りくどい処理をしてます)。

    どうも音周りと同じくフォント周りも困難な問題がありすぎます。

    最初にここに手を入れたtachi_gigasさんの意見も聞きたいところですね。

  8. tachi gigas

    正直実際フォントの5種を他のフォントに書き換えられたらなぁという思いがあっただけでこんなに難しい話になっているとは思いもしませんでした。コメントを求められてもてへぺろ以外の何者でもありません。

    メッセージコンテントの描画方法はcw.cwpy.setting.classicstyletextに依存しますが この情報がSkin.xmlに格納されているので最終的にはここに格納したほうがいいでしょう。自分で微妙に違うと思ったので私家版ではSettings.xmlの方に書き出してますが、スキン情報編集ダイアログが作られたらスキンで処理するほうがいいでしょうね。でも既にありそうで怖い。

  9. k4nagatsuki reporter

    単純にフォントを置換するだけであれば、もしかしたらFontフォルダに別のフォントをインストールできるようにすれば事足りたりするかもしれませんね。

    スキン情報編集は必要そうなのですがまだ無いです。いっそ別アプリにしてもいいかもしれません。

  10. takuto_cw

    遅ればせながら、私家版ときいて、いそいそと pull して動かしてみました。 うおー、選んだフォントにちゃんと変わるー! 自分の目には魔法に見えます。 こういうところもプレイヤーがカスタマイズできるのは、やっぱりいいですね!うんうん。

    本気で使いやすいものにしようとすると、 そのフォントがどこに使われるかをプレイヤーに伝えたり、まだ手間がかかりそうですが、 骨格みたいのは既に出来ていたんですね。すごいなあ……

    >Fontフォルダに別のフォントを~
    これはシンプルな解決策。単純に置換するなら、それでもよさそう。

  11. tachi gigas

    話題にされてしまっているのでちょっと考えてきましたが、

    1. 現在のCWPyのフォントはpygameとwxPythonの二つ使用

    2. 実は私家版ではwxPythonのフォントしかカスタマイズできない

    3. pygameのフォント指定方法はファイルの場所指定以外では困難

    という点が分かってきました。これに対してどうかという考えがあまりまとまらないのですが、現状ではフォント指定処理を二つに分けなければいけなさそうです。考えがまとまってない分については長くなるのでブログに書きました。http://tachigigas.blog65.fc2.com/blog-entry-90.html

    >Fontフォルダ 現行が拡張子ttf決め打ちになっているのでちょっとどうかなと思いますが処理の方に手を入れれば案外解決するかも知れません。

    >takuto_cw様

    どうも初めまして駄目コーダーです。申し訳ありませんが実は設定ファイルが本家と同じため私家版起動後本家を起動するとフォント設定が死にます。これは自分ちの課題ですね。

  12. k4nagatsuki reporter

    結局pygame.font.SysFont()が使い物にならないのが巨大な壁です。これが正常に動けばフォント名によってフォントを選択できるはずなので(sysfont.pyは実際にそういうコードになっている、レジストリからフォント一覧を取ってその中を探している)、wx側とpygame側で同じフォントを簡単に使えるようになります。

    pygameの次のバージョンで改善されている可能性もあるので、音周りと同様時間が解決してくれるのを待つという手もありますが……。

  13. k4nagatsuki reporter

    0.12.2系のブランチ(default)にcw.imageretouch.Fontを追加しました。pygame.sysfont.SysFontの代替となるものです(Windows環境以外ではSysFontが使い物になるため、内部でSysFontを使います)。

    これで最大の障害は取り除かれたのではないかと思います。

  14. tachi gigas

    お疲れ様です。

    pull request #322 の件も含めてありがとうございます。当時の自分の目標は達成できそうですが、ここで議論されている高度な対応になると色々と細かい事を考える必要があると思います。そこは追い追い…という感じです。

  15. tachi gigas

    https://sites.google.com/site/tachigigas1/cwpy

    以上に、うpしました。当初の自分の目標と言う意味ではこれで達成です。機能的にメインストリームに採用されるかどうかは完全にアレとしてです。スキン毎にフォント設定ぐらいは、とは考えていますが、そうなると先にスキン情報編集機能の実装の話 issue #139 になりますね。

  16. k4nagatsuki reporter

    確認しました。

    後の問題は例の5種類ではなく役割別に設定できた方がいいのでは?というような話でしたね。後はスキンで設定するかどうか。

    スキンは後回しでいいはずですので、とりあえず時間の取れるときに"gothic"等の指定でフォントを取ってきているところを役割別の名前で置換する事を試みてみます。

  17. k4nagatsuki reporter

    とりあえず調べてみたところ、wx側で使うフォントには次のような種類があるようです。これらをすべて個別に設定するのは大変煩わしいので、似たものはまとめる必要があるでしょう。pygame側はResource#create_fonts()の中身で網羅されているのではないかと思います。

    • 手札ダイアログの上部バーのテキスト(uigothic)
    • カード情報のタイトル(uigothic)
    • カード情報のシナリオ・作者名(uigothic)
    • キャラクター情報のタブ見出し(mincho・機能していない?)
    • キャラクター情報の上部パネル(uigothic)
    • キャラクター情報の解説文(mincho)
    • キャラクター情報の履歴(mincho)
    • キャラクター情報の状態(mincho)
    • キャラクター情報のレベル調節等の編集欄テキスト(mincho)
    • キャラクター情報の各種カード名(mincho)
    • 宿新規登録の解説テキスト(uigothic)
    • 宿帳新規登録の見出し・Welcome to the Adventurers Inn(uigothic)
    • 宿帳新規登録の名前欄(uigothic)
    • 宿帳新規登録の性別・年齢等の情報(uigothic)
    • 宿帳新規登録の説明文(uigothic)
    • 宿帳新規登録の消費EP(uigothic)
    • キャラクター情報編集の見出し(uigothic)
    • パーティ情報編集のパーティ名欄
    • 数値欄スライダ(gothic)
    • 数値欄スピナ(gothic)
    • レベル調節やステータス編集などの対象選択コンボボックス(gothic)
    • 宿情報編集の宿名(mincho)
    • 宿情報編集の説明文(uigothic)
    • 拡張メニュー等の解説付きボタンダイアログの説明欄(gothic)
    • メッセージダイアログのテキスト(uigothic)
    • 宿選択ダイアログの宿名(mincho)
    • 宿選択ダイアログの所属メンバ名(mincho)
    • パーティ選択ダイアログの見出し(mincho)
    • パーティ選択ダイアログのパーティ名(mincho)
    • パーティ選択ダイアログの所持金(mincho)
    • パーティ選択ダイアログの所属メンバ名(mincho)
    • パーティ選択ダイアログのシナリオ名・宿名(mincho)
    • 宿帳のレベル(mincho)
    • 宿帳の名前(mincho)
    • 宿帳の年齢(mincho)
    • 宿帳の性別(mincho)
    • 宿帳のEP(mincho)
    • 宿帳の履歴(mincho)
    • 整列コンボボックス(uigothic)
    • シナリオ選択のツリー(gothic)
    • シナリオ選択のシナリオ名・フォルダ名(mincho)
    • シナリオ選択の"Contents"(uigothic)
    • シナリオ選択のフォルダ内容(mincho)
    • シナリオ選択の解説文(mincho)
    • シナリオ選択の対象レベル(mincho)
    • ページ数(mincho)
    • シナリオ付属テキストダイアログファイル名(uigothic)
    • シナリオ付属テキストダイアログ本文(gothic)
    • シナリオ付属テキストダイアログ・No Text File(uigothic)
    • FPS・現在はずっと非表示(gochic)
  18. k4nagatsuki reporter

    かなり重要なものを1件忘れていました。

    • ボタンのラベル(uigothic)
  19. k4nagatsuki reporter

    この中の全てがカスタマイズできるべきとは思いません。例えば宿帳のフォントを変えたいと思う人はあまりいないのではないかと思います(個人的感覚なので当てになりませんが)。それに対し、例えばメッセージのフォントなどを変えられることにはインパクトがあります。

    1. 上のリスト中の似通ったものをまとめる
    2. カスタマイズ可能なものを数点だけ選択する

    の手順で行けば、作業量が膨大になるようなことはないのではないかと思います。

  20. tachi gigas

    今まで考えましたがやっぱり全てのフォントが変更できればいいなとは思います。もちろん、これも個人的感覚です。

    似通ったものをまとめようとすると、どうしても自分の中では明朝/ゴシックでの分別でいいじゃないかと思ってしまうのですよね。主要ブラウザもSerifとSans-Serifに分かれていますので。しかしながら、ある場所がゴシックに振り分けられているのが気にくわないという事もあります。が、ここの落としどころは僕の中ではずぼらな場所にあります。ここが問題ですね…。意欲的な意味で。

  21. k4nagatsuki reporter

    CSS等でのフォント指定は、閲覧側がどのようなフォントを持っているか分からないので曖昧に指定できるようにしているという面があるはずです。ユーザが持っているフォントを具体的に指定できるとまた話が変わるのではないかとも思います。

    とはいえ意見が分かれていて難しいところですね。焦ることでもないので、もっと時間をかけて色々な意見を集約していきたいです。

    最終的に決めたところでtachi_gigasさんのやる気の問題があるのであれば、私が作業しても問題ありません。その際にはtachi_gigasさんの成果の全部もしくは大部分を利用させていただく事になるかと思います。

  22. k4nagatsuki reporter

    最初の提案からいい加減時間が経ちすぎているので、そろそろ回答を出しての統合を考えたいと思っています。

    これまで「ファミリごとの曖昧指定」と「役割ごとの具体的な指定」で意見が分かれている状態ですが、これらは実は両立できるものではないでしょうか。

    次のような二段階での解決を提案します。

    1. 基本となる5種類のフォント「可変幅ゴシック(Sans-Serif)」「等幅ゴシック」「可変幅明朝(Serif)」「等幅明朝」「UI用」を指定できるようにする。TachiGigasさんが実現したのはこの部分です。
    2. 役割ごとのフォントを、上の基本5種のいずれか+具体的なフォント指定によって変更できるようにする。ボタンでUIゴシックを優先する機能もこの段階で実現できると思います。

    問題ないようであれば、こういう形で作業を始めたいと思うのですがいかがでしょうか。

  23. tachi gigas

    k4nagatsukiさんが作業される分には僕としては何も問題ないと思います。というかこの作業をされるのであれば私家版の出番がいよいよなくなりますねw しかしそれもまたよいでしょう。

    最近コード見れてない分精力的にコミットされててなんだか申し訳ないです。

  24. k4nagatsuki reporter

    これまでのマージにも大きな手間がかかっているようなので、機能は統合していきたいです。アイコンだけでなくデフォルトの設定やスキンなどを差し替えた私家版なども面白いかもしれませんよ。

    では、どれくらいかかるかわかりませんがゆっくり作業を始めさせていただきます。

  25. k4nagatsuki reporter

    pull request #516

    まずは2.の準備の抽象名を追加。役割ごとの名前を5種の抽象フォント名に変換する。

  26. tachi gigas

    お疲れ様です。どれぐらいかかるかわからないとは一体…。コメントしてきました。

  27. k4nagatsuki reporter

    レビュー完了して上のpull request #517をマージ。

    これでようやく一区切りですね。ここまで長かった……本当にありがとうございます。

    よろしければTachiGigasさんの手でこのIssueを完了にしていただけないでしょうか。

  28. tachi gigas

    自分の思いつきで多大なるご迷惑をおかけしました。本当にごめんなさい。

    しかし解決ボタンが見当たりません。もしかしたら作成者しかissue完了にできない感じでしょうか。そうでしたら、何度もお手数をおかけしますが、issueの完了をお願いいたします。

  29. k4nagatsuki reporter

    うわぁそうなのか。すいません。把握してませんでした。私が閉じるしかないですね。最後の最後に締まらなくてすいません。

    繰り返しになりますが本当にありがとうございました。

  30. Log in to comment