修正案:キャラクター情報ダイアログをCWに近づける

Issue #425 resolved
暗黒 騎士 created an issue

現状で依然目立つCWと異なる部分の一つとしてキャラクター情報ダイアログがあります。 これを近づけたいと思ってcharainfo.pyを見ていたのですが、現在の実装はwx.Notebookのスタイルbottomで簡易実装しているので CWに合わせるにはボタンのイベントで変わるように丸々書き直すしかないっぽいです。

それで自分にはまだ身に余りますし多分長月さんも手を付けたくないと思うのですが、現状はあまりにも不格好すぎると思うのでWx.AuiNotebookと小スペースを使うことを考えました。 これ(中央)を暫定的にで構わないので取り入れていただくことはできないでしょうか。 (ついでですがクラシックスキンはアイテムが道具となっているようですのでこれも修正したいです。)

UI.png

Comments (32)

  1. k4nagatsuki repo owner

    AuiNotebookには高解像度での問題は無いかな?と思って手許で試しましたがそんなことは無いようでした。私としては変更に異存はありませんので、Pull Requestをくださればマージします。

    アイテムについてですが、これだけ半角カタカナ4文字である事を問題視して私が「道具」に変えたのではなかったかと思います。半角カタカナは経験則として避けたいですし、フォントによっては幅が他のタブと異なる問題も出ます。

    ただ、Unicodeの採用で経験則は成り立たなくなっていますし、幅の問題も些細といえば些細です。どうしてもアイテムがよいという方がいらっしゃればそうしてしまっても構いません。個人的には、漢字2文字で揃っていた方が美しい(し幅も揃えやすい)と思うのですが。

  2. 暗黒 騎士 reporter

    ありがとうございます。

    大体終わったのですが、self.notebook = wx.aui.AuiNotebookにすると def OnClickLeftBtnwin.draw(True)でなぜかAttributeError: 'Window' object has no attribute 'draw'が出てしまうので難航しています…。 (win.Refresh()に置き換えるとエラーは出なくなるが解説と経歴が更新されない)

    ・技能カード/アイテムカード/召喚獣カードはどうすべきでしょうか? というのもそれにあたる文字列がskin.xmlにないっぽいです。 調べたところ、各バリアントだとこれらは以下のように書き換わっています。

    SFバリアント 召喚獣カードが特殊 カード
    学園バリアント 召喚獣カードが守護霊カード
    大江戸バリアント 各カードが技能絵札 道具絵札 召喚獣絵札
    現代Ⅰ型&妖魔バリアント 変更無し
    

    個人的には問題を顕在化させてしまうので表示するのは完全な実装時まで保留でいいかと思うのですが、 学バリの守護霊などは重要なディティールに見えますので 一応スキンの自動生成時には読むようにして備えておいた方がいいんじゃないかと思う次第です。

    Classicスキンは、自分は公式準拠的なものととらえて使用・紹介してきたので 種族要素をオフにするのと同様の理由で思想の混入は極力排した方がいいと考えていましたが、 公式準拠以外のコンセプトがあるのでしたら明確化すればそれはそれで構わないと思います。 (ゲームオーバー画面で「タイトルに戻る」選択肢が追加されているなどもありますし)

  3. k4nagatsuki repo owner

    各サブパネルからはCharaInfo本体のdrawを呼び出しているのですが、その時にself.Parentを使って親コントロールをたどる事でCharaInfoに到達するように現状ではなっています。

    これは本質的によくない設計です。コントロールの階層構造が変化するだけで破綻するからです。AuiNotebookは普通のNotebookと異なる内部構造を持っているので、現実に破綻してしまったのだと思います。

    これを期に、各パネルに対してCharaInfo自身のインスタンスを渡すようにして、それを通してdrawを呼び出すようにした方がよいでしょう。

    問題に気づいていながら今まで手入れしなかったのも問題なのですが。そ、そこの所は、私が設計したわけじゃないし……


    技能カード/アイテムカード/召喚獣カード

    省略された部分にピンポイントで独自の文字列があるものですねぇ……。読むようにしました。文字列リソース"skillcard""itemcard""beastcard"を使用してください。

    既存のpull request #1617の存在を忘れてて統合しちゃった……。これくらいはhg push -fして分割するまでもないと思うのでマージはサウンドフォントの件より後回しにさせてください。

  4. 暗黒 騎士 reporter

    構造が変わっているといってもPrint winを行うとPanel6個とwx.aui.AuiTabCtrlがありますし、解説と経歴以外はrefreshで上手く更新されるのでそれで通したくて一日悩んでいたのですが、解説と経歴では多分チラつき対策かなんかだと思うのですが、draw→if update→_init_view()と一手順増やしてupdateが渡された時だけ更新するようにしてるんですね。なのでその手順を飛ばして、_init_view()をそのままOnPaintにコピペしたら上手くいきました。

    でもこれ消しちゃ不味いですよね? この場合winからDescPanelとHistoryPanelにupdateを渡すのってどうやって書けばいいんでしょうか…。

  5. k4nagatsuki repo owner

    _init_view()は表示情報を作成するメソッドです。再描画のたびに情報を作り直すのは無駄なので、アップデートが必要なときだけ呼び出されるようになっています。その手順を飛ばすのは明らかに得策ではありません。

    self.notebook.GetChildren()でどんなリストが出てくるかはself.notebookの型と構造次第です。wx.Notebookでは偶然パネルのリストが取れていたようですが、AuiNotebookでは違うようなので、自前でパネルのリストを作る必要があります。

  6. 暗黒 騎士 reporter

    for win in self.notebook.GetChildren() :後にPrint winするとコマンドプロンプトに以下が出てくるので リストは取れてると思うのですが、違うのでしょうか?

    <cw.dialog.charainfo.DescPanel; proxy of <Swig Object of type 'wxScrolledWindow*' at 0x5538688> >
    <wx.aui.AuiTabCtrl; proxy of <Swig Object of type 'wxAuiTabCtrl *' at 0x2daee50> >
    <cw.dialog.charainfo.HistoryPanel; proxy of <Swig Object of type 'wxScrolledWindow *' at 0x2bf3c28> >
    <cw.dialog.charainfo.EditPanel; proxy of <Swig Object of type 'wxPanel *' at 0x59db170> >
    <cw.dialog.charainfo.SkillPanel; proxy of <Swig Object of type 'wxPanel *' at 0x2faad38> >
    <cw.dialog.charainfo.ItemPanel; proxy of <Swig Object of type 'wxPanel *' at 0x5420dd8> >
    <cw.dialog.charainfo.BeastPanel; proxy of <Swig Object of type 'wxPanel *' at 0x4519278> >
    
  7. k4nagatsuki repo owner

    確かに子コントロールの中に各パネルが含まれていますが、wx.aui.AuiTabCtrlも含まれており、それにはdrawは無いのでエラーが起こります。

    isinstancehasattrなどで無理やり対象外のコントロールを除外してしまう事もできますが、それよりはプログラマの手できちんと整理したリストを作ってそれを対象に処理したほうが真っ当ですし、将来的に問題になりにくいです。

  8. 暗黒 騎士 reporter

    ああ…! 一つでもないとエラーが出るんですね。

    ありがとうございます、延々出てくるAttributeエラーの謎が氷解しました。

  9. 暗黒 騎士 reporter

    pull request #1621

    おかげさまで完成できました。おおむね野望通りできて満足です! aaa.png

    CWのグレー背景は一行で簡単に合わせられますが、やってみて暗すぎたので保留しました。 将来的にはスキンオプションにできるといいかなぁと思います。

  10. 暗黒 騎士 reporter

    結局タイトルパネルを独立して作ったので表示させないわけにはいかず、 SFバリアント、学園バリアント、大江戸バリアントを使用されている方でタイトル表示が気になる場合、スキンを作り直すか手動での追加が必要です。

    お手数おかけします。

  11. k4nagatsuki repo owner

    その問題はせめてChangeLog.txtに書いといた方がよさそうですね。そういえば更新の中に入ってなかったので今から入れておきます。

  12. Iraka.T

    「解説」タイトル部分が追加されたことで、MSフォントでは確かにCWに近い外見になったと思いますが、フォントを変更していると解説文の位置ずれが顕著になってしまいます。

    20161106_132658.png

    これがどうにも気持ち悪いです。位置ずれの解決か、「解説」タイトル部分の非表示を希望します。

    というか、「解説」タイトル部分の非表示を強く希望します。私はCWの頃からずっと、これはいらないバーツだと思っていました。

  13. 暗黒 騎士 reporter
    • changed status to open

    上が「正式名称」、下のタブは「略称」というUIデザインはCWとして守るべきものだと思います。

    しかし元々のPyの実装がそうなっていたので、タイトルパネル非表示オプションをつけるのであれば、自分は問題ありません。

    (多分簡単ですし、自分が蒔いた種なので自分の方で作業すべきと思いますが、その場合はオプション関数名を長月さんの方で決めて頂けると助かります)

  14. k4nagatsuki repo owner

    pull request #1631

    どうも元々位置計算がずれていたようなので手入れしました。これでどうでしょうか。これでもずれるようなら、フォント設定を教えていただけると助かります。

    タイトル部分は、私も長年いらないと思っていたのですが、バリアントでテキストが書き換えられていてデザインの一部になっているという指摘は真っ当だと思えました。「表示されるのが許せない」というほど強く思われているのでしたら、一人そう思っているなら他にもいると考えられますし、オプション化も考えます。

  15. Iraka.T

    cardwirthpy_20161106c.zipで確認したところ、依然としてずれたままです。昨日のSSと寸分違いません。

    フォントはY.Oz BoxのMogaMinB(MogaMincho Bold)を使っています。同シリーズ内の等幅フォントはすべてずれます。また、Noto FontのNoto Sans Mono CJK JPも同様にずれます。他に日本語等幅フォントをインストールしていないので、これ以外は検証できません。

    >オプションの追加

    一晩置いて考えましたが、UIの変更に対する不満はユーザーの慣れによって概ね解決できます。些細な表示をカスタマイズするオプションを増やすことは、なるべくしてほしくありません。

    私がこの非表示を望んだのは、改悪(主観による評価です)を感じて悲嘆したからですが、以前を知らなければどうも思わなかったはずです。解説タイトル非表示オプションは新規ユーザーにとってはほとんど無用のオプションで、既存ユーザにとっても必須ではなく、またこの改変を理由にPyの継続利用をやめるというほどの悪化ではありません。

    ただ、この改変によって背景画像の位置がやや下に寄ってしまっているので、そこは修正していただきたいです。Pyのほうが僅かに高さが小さいのに、背景画像はより下に位置しています。

    20161107_114000369.png

  16. 暗黒 騎士 reporter

    継続利用をやめるといっても、そもそも他のエンジンではすべて表示されており、 フォントのカスタマイズ機能もないので選択肢はないようにみえます。 (あるにはありますが、それならそちらのフォントをMS明朝幅に改造してもよいでしょうし)

    多分BWで想定されていた表示が崩れたのがお怒りの原因かと思いますし、 自分の立場でも成果物のインフラが易々と揺らぐことは許容できません。 (1.20-1.50やバリアントから移行する人にとってもそれは同じと考えるからこそ、このような優先度の低い仕様合わせをしているわけですが) やはり通常のオプションで不満なら、スキンのオプションにしたらいいのではと思います。 スキンの方の高度なオプションは別段GUIに表示させきる必要もないはずです。


    とりあえず自分の作業した縦の部分で数ピクセルズレていたので直しているのですが、CWのウインドウの横幅302、解説のフォントMS明朝13に対して、Pyは横幅デフォルト300よりMS明朝14で「―」を*20+20したサイズの方が大きければそちらを適用するという感じになっているようです。

    MS明朝13の「―」*20=260
    MS明朝14の「―」*20=300
    

    なので+ 20によってMS明朝にしていてもCWより横幅がデフォルトで18大きくなっています。多分+20は要らないんじゃないでしょうか?

    どうでもいい話ですが、1.28と1.50でlevelの位置がずれているようです。(1.50は極端に右に寄ってるので多分移植時のバグ)

  17. Iraka.T

    いえ、私の嘆きはBloodWirthをはじめとする私の成果物に無関係です。ですので、なおさら優先するよしはありません。

    ユーザーの慣れによって概ね解決できるというのは、ユーザー(私)がかつてを忘れて今に慣れればいいということです。

  18. 暗黒 騎士 reporter

    わかりました。とはいえ今回はこちらしたことで嘆くような結果になってしまってすいません…。

    pull request #1632

    どんなフォントでも大体真ん中にくるようになったと思うのですが、 どうもCWと比較すると解説の行間に余裕がなさすぎるようです。(色んなところに分散しててよくわからない…)

  19. k4nagatsuki repo owner

    pull request #1633

    フォントの正体さえ分かれば対応は簡単なので、私の方でもpull request #1632の上に解説文がずれないように手入れしました。たぶんこれでよくなっていると思います。

    CWではひょっとして解説を行ごとに分けて固定行高で描画しているんでしょうか?

  20. 暗黒 騎士 reporter

    解説を行ごとに分けて固定行高で描画

    あー!クーポンがそういう形式ですしそういう可能性もあるかもですね

  21. k4nagatsuki repo owner

    上記Pull Requestをマージしました。

    とりあえずこれで横の位置ずれは直っていると思います。

  22. Iraka.T

    ありがとうございます。ソースからの実行で試してみましたが、Moba/Moboフォントでは概ね治っています。

    高解像度でスクロールバーが表示される場合にずれます。また、高解像度ではスクロールバーがなくともわずかにずれが感じられます。

    私が常用しているフォントではありませんが、Noto Sans Mono CJK JPでは表示の乱れが悪化しています。

    20161107_225817.png

  23. 暗黒 騎士 reporter

    スクロールの有無でずれるのはCWもかと思います。というより比較するとCWの方が僅かにズレているのですが、 こっちの方が綺麗だし流石にそこまで合わせる必要はないかと思います。

    デフォフォント以外でそこまで神経質に求めるなら 当初の(self.GetClientSize()[0] - dc.GetMultiLineTextExtent(self.text)[0])/2、13pixelで合わせる方が使えるフォントは増えるはずです(Pフォントでもこれはこれで)が、自分としては現在でも許容ラインです。

  24. k4nagatsuki repo owner

    self.textの幅を計算に使うのはいけません、というのは、実際に表示される解説テキストの幅はキャラクターによって様々だからです。テキストの内容によって左側の位置が大幅に変わってしまいます。

    またしてもずれていた原因ですが、おそらく計算した時点と実際に表示された時点で表示領域の幅が変化していたせいです。pull request #1634で対処しましたのでレビューをお願いします。

    スクロールバーが絡むと話はさらにややこしくなります。スクロールバーの幅を取得するAPIはwxにはありません。Windows APIを叩く必要がありますが、そこまでするべきかとなると正直言って疑問です。

  25. Iraka.T

    ありがとうございます。左右のズレは見られなくなりましたので、承認しました。

    行高の違いによる縦方向の表示差異は残っていますが、左右でずれないのならUIとして問題視する必要はないと思います。

    スクロールバーについては、前回試した時点では、x1でずれないのに拡大時にのみずれていたので、スクロールバーの幅分のずれがあるのとないのと、どちらが正しい状態なのかわからないので言及していました。今回、拡大状態によらずスクロールバーの幅分ずれているので、違和感はありません。

  26. 暗黒 騎士 reporter

    ではクローズします。

    三者三様に譲れない点があったということで…お疲れ様でした。

  27. 暗黒 騎士 reporter

    すいません、一点見落としがありました。

    解説パネルで「背景の透かし」をcsizeで計算しているためself.csizeで作っている他のページと位置がズレているようです。

    どちらに合わせるかですがcsizeだとスクロールの有無で変動するので元の通り解説initでself.csizeを作る方が良いかと思います。

  28. 暗黒 騎士 reporter

    また「# カード画像の後ろにある羽みたいなの」の高さは現在cw.wins(50)になっていますが52が適正位置のようです。 2pixelぐらいいいかとも思っていたのですが、ぴったり顔画像に当てはめる素材が出てきた場合どうせ求められると思いますし、すでにBloodWirthが影響が出そうな規格外で作られているので心苦しいのですが、将来の被害を考えるとここで合わせておいた方が良さそうです。

  29. k4nagatsuki repo owner

    pull request #1635

    手入れして問題が出るような事も無いようですし、レビュープロセスは省略してしまいます。いざ問題が出たらお伝え下さい。

  30. Log in to comment