提案:マウスホイールの反応を鈍くする/無効にする

Issue #418 resolved
権兵衛 七篠 created an issue

七篠です。
先日のCWHSチャットで出た話題をもとに提案をいたします。
現状のCWPyでは、マウスホイールの操作でメッセージ送りやバックログの表示が可能ですが、
チャット参加者の環境ではこの機能を誤爆させやすいとのことです。
報告によれば、マウスを操作していないときに
ホイールをカクカク動かしてしまう癖があるので、との事ですが
他方マウスによっては経年劣化や組み立て時の精度不良で
ホイールのバックラッシが増大しスクロールが誤作動してしまう、
といった症状の出る可能性は十分にあるかと思われます。

ですので、スライダなりプルダウンメニューで反応を鈍くするとか
無効化できないかという提案をしてみます。
「詳細」タブの「操作」の項目あたりにこうした設定を追加することは、可能でしょうか?

Comments (25)

  1. 暗黒 騎士

    ご提案ありがとうございます。長月さん不在のようなので未熟ながら対応させていただきます。

    といっても下メッセージ送り無効化についてはオプション項目を増やすことになりますので長月さんの判断をお待ち頂くしかないのですが、メッセージログについては詳細>操作「マウスホイールを上に回すとログを表示」のチェックを外せば従来通りフォーカス移動になるはずです。

  2. 権兵衛 七篠 reporter

    あい、ここ最近Issue爆撃やらかしてる大戦犯です、七篠です。

    単に無効にするならwheelupやwheeldownあたりで探して
    なんかそれっぽい処理をやってるソースを
    削除すればいいのかな、とは思うものの
    Pythonはずぶの素人な上に探し方がさっぱりわからなかったりで
    案の定お手上げだったりしますorz

    「反応を鈍くする」ためには
    ホイール入力を1-2回分捨ててやれば鈍くできるだろうか....
    (つまり連続で2-3回以上入力が入ったら発火するというか反応する)
    とは思うのですが、自信はあんまり無かったりしますorz


    .....いっそのこと2ボタンマウスを勧めるべきだったんだろうか(マテ

  3. 暗黒 騎士

    削除すればいいのかな

    そうですね。(マージの際はオプションを作って分岐させないと駄目ですが、まず仕組みを理解するとして)

    pythonをインストールして、ソースから実行(cardwirth.py)するまでのことはできているでしょうか? (もしできていなければこちら) 導入は終わっているとして、メイン画面でのマウスの挙動はeventhandler.pyで定義されているようです。509行目あたりでしょうか。

    入力遅延はタイマーを使えばいいかと思いますが、遅延の幅を調節させるとなるとかなり微細なオプションになってしまいます。 あまり需要のないオプションを追加することには消極的な方針のようですので、まずは判断を待たれた方がいいかと思います。 (勿論七篠さんが実装してみた上で掛け合われるのは自由ですが)

    いっそのこと2ボタンマウスを勧めるべきだったんだろうか

    ホイールが過敏に反応しすぎるからホイールそのものを無効化したいということでしたら、 AutoHotkeyなどの外部ツールで割り当てを変えることでも対処できると思います。

  4. tachi gigas

    恐れ入ります。一個人の意見として、一点だけご容赦願えますでしょうか。

    単純なマウスホイールの無効化、該当箇所を単に削除しての対応をご検討いただいている中誠に恐縮ですが、 CardWirthPyは既に一人のためだけのソフトウェアではありません。 単一の視点による機能の無効化は他のユーザーの方々の強い不平不満を招きます。僕個人は強く反対します。

  5. tachi gigas

    それでですが、今回ホイール操作の誤爆は、ご相談の方は長い間心を痛めていると思います。 ホイール操作に対応しているソフトウェアはCardWirthPyに限らないためです。 インターネットブラウザを例に挙げるに及ばず、 もちろんCardWirthNext 1.60でも同じ痛みを強いられるでしょう。

    CardWirthPyだけが対応しても、意味がありませんし、その方は一切救われないと思うのですが、さて、いかがなものでしょうか?

    2ボタンマウスの入手難度を考えると、暗黒騎士様がご提示頂きました対応が、その方にとっての最善と思います。 オフトピックになるため、これ以上は控えさせて頂きます。

    k4nagatsuki様がご不在の中、不躾をお詫び申し上げます。

  6. 暗黒 騎士

    >「詳細」タブの「操作」の項目あたりにこうした設定を追加すること

    とありますので、任意オプションを付けたい的な提案と受け止めたのですが、行き違いがないでしょうか。

    削除、というのに「そうですね」と返したのはまずはそれで仕組みを理解されてはどうでしょうという意図です。

  7. tachi gigas

    失礼致しました。2番目のレスを読んで誤読していました。

    仰せの通り、以前k4nagatsuki様もあまり設定項目を増やしたくないと仰ってましたので、この件がそれを説得できるかどうかは、ちょっと自信がありません。

  8. 暗黒 騎士

    今回のホイール下によるメッセージ送り(またホイール上メッセージログを無効化した時の選択肢フォーカスの移動)についてはカードワース標準の機能ではありません。(CWでは無反応です) それが誤爆しやすいとなると無効化オプションを設けることには一定の正当性があると思います。 ダイアログでの横移動の無効化という前例もありますし、単純に無効化するだけであれば自分は賛成ですね。

    またチャットで仰られていた中ボタンクリックで左クリック効果(1.50に継承されていない1.28仕様)については七篠さん的に需要があるのであれば多分簡単ですので、手はじめにやってみるのはお勧めです。

    ただ、調節スライダは少し大仰に思いますので長月さんの判断次第という投げ方をさせて頂きました(こういう要素全てに付けるわけにもいかないし…)

  9. tachi gigas

    1.50においてもカード置き場などのページめくりでホイール操作可能な点を考えると(1.28では無理です)、動機が乏しいと思います。是とするならば、この操作も全て無効にする必要があります。これをどう見るかはk4nagatsuki様の判断次第です。僕個人としては上述した通りです。

    中ボタンクリックの件ですが、eventhandler.pyは変更しなくても大丈夫そうですがdialogディレクトリ内の各ファイルも修正が必要のはずです。確か各ダイアログでボタン等のオブジェクトに頼らない場合のマウス動作を定義しています。結構な範囲の修正になりますし、各ファイル・クラスの役割を紐解かなければなりません。手始めにやってみるには正直重た過ぎるではないのかと危惧しております。

    恐れ多くも「カード選択ダイアログの背景クリックで左右移動を行う」オプションを初めて知りました。Py初心者も大概なものです。

  10. 暗黒 騎士

    自分個人の意見としてはそれも含めて是ですが、 上記の条件は「誤爆という被害が存在し、公式版にないPy側の機能」です。便利機能が余計仕事であってはなりません。 1.50は公式化されたこともありますが、カード置き場のホイール操作を誤爆したとして、Pyの横移動や表題のような被害は起っていないように見えます。(もっとも1.50はループやスター機能がなく移動だけ、ダイアログが小さいというのが大きく、Pyのカード移動ダイアログはCWより間が開いているのでスターを付けるのがボタン制になる以前は、慣れないこともありそれらの相乗効果で誤爆が多かったです。)

    件の機能は完全に左クリックになっているわけではなく、ダイアログでのボタンには対応していない(貼り紙オブジェクトのクリックには対応しているようですが、七篠さんが例示されていたのはメッセージとカードクリックでした)ようなのですが、難度については軽率でした。これについては先達であるtachi gigasさんの見立てが正しいと思います。申し訳ありません。

    「カード選択ダイアログの背景クリックで左右移動を行う」オプションについてはLiarさんが希望されたものだったかと思います( 追記:#267)。それより以前に自分も「横移動になる範囲が広すぎて誤爆するので狭めて欲しい」と希望して修正して頂いたのですが、それでも広くて諦めていたので個人的にはありがたかったです。今回もそういう類かもしれません。

  11. k4nagatsuki repo owner

    すみません、ちょっと確認させてください。

    そういう癖があるならオフにする機能をつけるにやぶさかではないのですが、@tachi_gigasさんも訊ねているように、他のアプリケーションでは困っていないのでしょうか。CWPyだけ対応しても、他の多くの場面で似たような問題にぶつかると思うのですが。

    CWPyではホイール操作で空白時間を飛ばせるので、背景に文章を表示している時など、うっかり飛ばしてしまって困るという事はあると思います。背景はログ機能による遡行も効きません。ですから、繰り返しになりますが、これをオフにするオプションをつけるにはやぶさかではありません。

    反面、例えばカード情報ダイアログの左右移動のようなものは、すぐに元に戻せるので問題は少ないのではないかと考えています。おそらく他の多くのアプリケーションで遭遇するのもこの種類の問題です。しかし実際にどの程度困るのかは、実際に困っている方でなければ分かりません。その辺りの事が知りたいです。

    マウスの経年劣化でホイールが暴走するというような事は、これはさすがにCWPyだけ対応しても仕方ないと思います。

  12. 権兵衛 七篠 reporter

    おおぅなんかちょっとすごいことになってる(汗
    「単に無効にするなら」、削除でいいのですが、実際やりたいことは
    「環境によって、反応を鈍くしたり無効にしたり調整可能にする」
    ということなので、自分の能力をはるかに超えてるというかorz
    お恥ずかしながら、案の定お手上げなきょうこのごろです、七篠です。
    (あとAutoHotKeyも調べてみましたが、
    むしろこっちでどうにかなりそうな悪寒ががが(後述))


    「切換え」ではなく、「調整可能にする」としましたが、
    「その機能で誤作動が起こるからといって、
    単純に無効有効の切換えとするよりは、
    誤作動を抑えて機能が提供できれば、
    切換えよりももっとユーザーにありがたいのでは」、
    という考えがあったりします。
    実装する側の負荷が増えるのはそのとおりなので、
    無理にとは言いづらいのですが.......


    「調整可能にする」には、有効と無効との間に
    段階がほしいわけですが、ぱっと思いつく範囲では、
    以下の4段くらいの調整幅でどうかな、とも思うところです。
    「通常/1入力無効/3入力無効/完全に無効」

    暗黒 騎士 さんの発言にあった
    「タイマーを使って入力遅延する」というのが
    具体的に何をすることなのかピンとこなくて
    (チャタリング抑止よろしく、入力がきたらしばらく待って
    もう一度入力確認とか?)、
    「同じ方向に連続してn回入力受け付けてから反応する」というアイデアで
    n=1と3を調整幅に入れてる、という訳ですが、実のところ
    このnの値にいくつが適当なのかデータが無いのが悩ましいところです。

    チャット報告者の環境にマウスロガー仕掛けるわけにもいかないですし、
    ホイールがバックラッシでどのくらい動くのか、に関するデータも
    はっきり揃っているわけではないので、
    念のために「1入力」と「3入力」の二つを考えているのですが(汗)、
    有効と無効との間に2段足した程度のインターフェースとしては、
    あるいはスライダよりプルダウンメニューのほうが
    よいのかもしれません。


    カード置き場などのページめくりでもホイール操作が反応する、
    との事なのですが、その辺の言及がチャットで報告されてなかったんで
    てっきり自分は「マウスポインタを該当する窓からはずせば
    無反応になるので無報告だった」と思い込んでましたorz

    改めてエンジン起動して確認してみると、ほとんどの操作で
    ポインタ位置関係無くホイール操作に反応するみたいですね.....
    だとすれば、台詞やメッセージとかバックログといわず
    あちこちでスクロールが誤作動しうるわけですが、はてさて。
    #またチャットにおいでなさったらその辺もう少し聞いてみようかな?


    「CardWirthPyだけが対応しても、意味はあるのか」、
    というのは実際そのとおりですし、
    AutoHotKeyのような入力へ介入してゴニョゴニョする系の
    外部ツールのほうが確かにつぶしが効きそうです。

    というわけで(どういうわけで)、話題に出たAutoHotKeyで、
    スクロールをゴニョゴニョやれるかどうか実験してみました。
    CardWirthPy.exe実行中は
    「ホイールの上下動作をすべて遮断する」という
    スクリプトの作成はわりと容易でしたが、
    「ホイールの上下動作を、同じ方向にn入力ぶんまでは破棄して、
    その次から出力する」スクリプトは少々骨の折れた次第です。
    (ぶっちゃけ返信が遅くなったのそのせいorz)

    とりま、両方目処がついてしまったので、
    ひょっとすると、Windows環境では外部ツール作戦で
    どうにかなっちゃうかもしれません(汗
    あす報告者がチャットにいらっしゃったら
    試作のスクリプトとともに提案してみようと思う次第です。
    #しかし、こういう特定ツール向けスクリプトって
    #(作っておいて言うのもあれですが)需要あるのかな?


    ホイールクリックの件については、
    うん、その、まぁ、なんと言いますか(汗
    アレです、確かにクラシックなエンジンとは非互換なんですが、
    そもそもなんでホイールクリック使い出したのかといえば、
    ロジックいじりで使い込んだマウスの、左ボタンスイッチの
    寿命を延ばしたいから、というエディタジャンキーの
    超個人的な問題によるものというか何といいますか......(汗)
    それこそホイールがらみで行けば、
    ウチのロジ狂うロジクールのマウスだけかも知れないですが、
    ホイールのチルト操作やるとキーボード上のCtrl+左右キーとは
    逆方向に操作が反応する、とかいうライブラリあたりが
    バグってそうな微妙なのもありますし.......(遠い目
    (普段使いのG700のほかにVX Revolutionで逆方向チルトを確認。
    しかし同メーカーのMX400では無反応だったんでMicro$oftとか
    よそのメーカーだとまた違ってくるのかも。)

  13. 権兵衛 七篠 reporter

    ........ってなんかk4nagatsuki さん復活してる!?
    えーと、とりあえずその、AutoHotKeyですか、
    外部ツール使ったマウスホイール無効化/鈍化スクリプトの試作ができたんで
    それで対応できないか、早ければ明日(というか、もう今日ですか(汗))のチャットで
    伺ってみようかと、そう考えてる次第です。

  14. 暗黒 騎士

    自分も当初は経年劣化や組み立て時の精度不良2ボタンマウス云々を見てそれならば素直に買い換えるかチャタリング防止的な外部ツールの仕事だろうと思い上記ツールを紹介したのですが…

    チャットのログは今日中であればまだ回覧できると思いますが、 tachi gigasさんや長月さんが懸念されるような感じではない(CWHSには多いようですが、その方は1.28派の人で純粋に本家通り使えないという癖による誤動作)ように自分には読めます。したがってAutoHotKeyで対処できるとしても利便性の点からオプションは付けた方がいいと思います。

  15. k4nagatsuki repo owner
    • pull request #1594
    • pull request #1595

    とりあえず詳細設定に「マウスのホイールで空白時間とアニメーションをスキップする」「マウスのホイールでメッセージ送りを行う」を追加しました(詳細タブ>空白時間とスキップ)。

    ホイールの上でログが表示されるのと、各種ダイアログはそのままです。依然としてそれらが暴走するようであれば、それらについても考えます。

  16. tachi gigas

    少々本題とずれまして恐縮です。

    暗黒騎士様の発言を鑑みますと、1.28の使い心地というニーズが存在するとの事です。本件でCardWirthPyに対する無知を晒して大変お恥ずかしい所ですが、設定数が多いため、将来的な形として一定のプリセットを設けるというか、せっかく設定の書き出し・読み込みがある事ですし、何らかの形で配布や利用できると幸せかも知れません。ただし、1.28のプリセットを作成する際、どこの何をどう設定するべきか今の僕にはほとんど分かりません。

    ホイールクリックを左クリックの互換にする件は別口でIssueを立てて議論してもいいかも知れません。

  17. 暗黒 騎士

    オプション実装お疲れ様です。そういえばウェイトやアニメは自分も飛ばしがちでしたね…。 せっかくなのでしばらく使わせて頂こうと思います。

    ホイールクリックを左クリックの互換にする件

    中クリックについては自分は使っていませんし、使っていたという七篠さんが塩反応でしたので 欲しいという方が現れるまでは保留で構わないのではないでしょうか。

    wssx取り急ぎ作ってみましたが現段階だとこんな感じですかね…。以前フォント合わせの件で少し検討してみたのですが、まだ手動でなんとかなりそうな感じではあります。Py側の方で特になければPy2に合わせてこれを攻略wikiの方で配布してみようかと思います。 https://bitbucket.org/akkw/cardwirthpy-reboot/downloads/1.28.wssx

  18. 権兵衛 七篠 reporter

    とりあえず自分の環境ですと、ホイールクリックは例のAutoHotKeyで
    「CardWirthPy.exe実行中はホイールクリックを左クリックに置換」で
    ほぼどうにかなっちゃった感があります、七篠です。

    マウスによっては「ホイールがくるくる回ってクリックなんかできない」という
    例もあるでしょうから、あとは他の方の利用状況次第かなぁ、と。
    一応互換性の観点で言えば揃えるのがベストとはいえ、
    無理にどうにかする必要は無いかもです。

    むしろ、どうせやるならチルト操作のほうが要チェックかな、とか。
    こっちはこっちで症状の確認できたマウスがまだ二つしかないんで
    (Logicool G700&VX Revolution)もう少しデータほしいかもですが......

  19. 権兵衛 七篠 reporter

    あとは、やり取り眺めていて思いついた、といいますか、
    あくまで個人的な妄想のレベルなのですが、
    詳細タブの傘下から、操作の項目を自由追加形式といいますか
    何かプラグインのような形で追加できたら面白いのかな、
    とは思うところです。
    「ユーザーの入力や操作を解釈して、エンジン本体に
    指示を出すフロントエンド」が独立した形態になって
    もっと柔軟に入力の扱い方をいじれるようになると、
    さらに多くの人に喜んでもらえるだろうか、
    ということも考えたりします。

    一例を挙げるならば、
    最近はタブレットタイプのWindowsマシンもありますが、
    タッチパッドでの操作なんてCWが開発された当初は
    想定すらされていなかったと思うわけです。
    メッセージ画面の狭い選択肢とかを
    指で突いて選ぶのは大変そうだと思うわけですが、
    一方でこれまでどおりマウスで遊ぶ人たちからすれば
    タブレット専用の設定項目とかは無用の長物です。

    そこで「タッチ操作の入力プラグインを別途作って、
    プラグインの中で、タブレットに見合った操作の体系
    およびその設定項目を作りこんで提供する」、
    みたいな処方はできないかな、と妄想したりする次第です。
    (特にこれからの季節は、コタツに入り込んで
    片手でミカンつまみつつタブレットをこちょこちょする
    「おこたWirth(勝手に命名)」が捗りそうな気がするのです(何))

    あるいは、マウスジェスチャに対応して
    荷物袋をアイテムのみに絞ってすぐ呼び出すとか
    冒険を中断してパーティー選択画面までを
    テーブル画面からジェスチャ一発でこなすとか
    そういった「エンジンそのもので対応するには
    局所的な操作系」のカスタマイズが有志のレベルでやれたら、
    なんてことを妄想する次第です。

  20. 権兵衛 七篠 reporter

    実装ありがとう御座いますです、七篠権兵衛です。
    さっそく今回のチャットにて実装の件を案内しましたところ
    すばやい実装に驚きつつも歓迎いただかれました旨、
    チャットの報告者に代わりましてお伝え申し上げます。
    (まったく論外だった拙作「外部ツール」については後述orz)


    なおチャットの席上、「ホイール操作の誤爆は
    ほかのプログラムでも起こりうるのか」についてたずねましたところ、
    どうやら発生するのは、
    カードワースの、それもメッセージを読んでいる時のみ
    ということらしく、
    スクロール操作に対応するNEXTエンジンを触った際に
    はじめてホイールを指先で蹴り回す癖に気づいた、
    との事でした。
    (結構勢いよくホイールをまわしてるらしく
     「気を抜くと、瞬間的にもの凄い勢いでネタばれが起こる」(原文ママ)
     との事なので、バックラッシ対策の延長線上で考えてた
     「外部ツールで同方向にn入力ぶんまでは無視」といった入力鈍化策では
     はなから無理があったようです;)


    ほか、チャット報告者の環境はCWPy1.1又は1.0からの更新だったようですが、
    フォントの表示周り修正(pull request #1572、雑多報告&連絡スレ(7)#329)に
    ついてもお気づきになられたようで、
    見てる人はちゃんと見ていらっしゃるのだな、と
    思いましたことを付記してみます。


    以上、報告でした。
    設定の追加、ありがとうございます。
    (個人的には外部ツール作戦や入力鈍化策が不発で悔しいですが(をぃ))
    提案内容はこれでおおよそ解決できたのかなと思う次第ですので、
    ぼちぼち本件を「解決済み」に畳もうかと思います。

    解決済みの提案内容を除きますと、
    ほかに本件やり取りのなかで出てきた話題としては
    個人的に思いつくぶんでは
    ・マウスのホイールクリック
    ・ホイールチルトの方向が逆向きな件
    ・「NEXT」以前のクラシックエンジンの復刻ないし再現の需要
    ・将来的なユーザーインタフェース実装のあり方
    あたりがありそうですが、
    ほかに漏れ見落としなどありましたら
    なんなりとご指摘いただけると幸いです。

  21. Iraka.T

    マウスホイールのオプション追加で、タッチパッドによる操作が改善されたように思います。タッチパッドで慣性スクロールを有効にしていると、下スクロールがものすごい勢いで暴走していたので。

    (Nextを触ってみたところ、慣性スクロールによる暴走はあちらでも起きるようです。あちらはホイールでウェイトのスキップが起きないので、多くの場合Pyほど暴走しませんが)

  22. k4nagatsuki repo owner

    橋渡ししていただきありがとうございます。癖であれば、CWだけついそういう風にしてしまうというのも分かる気がします。

    1つのIssue内で複数の問題が入り交じるのは色々とよくないので、このIssueはクローズして、表題以外の問題で個別に対応が必要そうなものは新しくIssueを立てていただけると助かります。

    タッチ系の操作性はそろそろ現実的に取り組んでいかないといけませんね。

  23. 暗黒 騎士

    AutoHotkeyはスクリプト慣れしてない人には結構しんどかったと思いますので、空ぶらせてしまったのは申し訳ないです。 (でもマウスの消耗を気にされてるのであれば、使ってないキーに左クリック割り振ったりできて便利なので使って損はないはず…)

  24. 権兵衛 七篠 reporter

    うっかり64bit仕様のPythonをインストールした挙句
    そのままCWPy動くようにモジュール捏造とか
    方向音痴の努力に励む今日この頃です、こんばんわです、七篠です。


    なんと、ペンタブレットのスクロール問題にも役立つとは。
    瓢箪から駒と言いますか、割合属人的な特殊オプションになるかと思いきや
    意外な効能が見つかって驚きです。
    実はCWHSチャットの常連さんにも、
    ペンタブレットでプレイなさっておいでの方がいらっしゃいまして。
    以前その方からペンタブレットでの操作について
    話を伺ったことがあったのですが、1.28メインな方だったこともあって
    スクロール操作については伺ってなかったので、
    機会がありましたら、また話を聞いてみようと思います。


    新規Issueの件、了解です。
    また派生のIssueを作ろうと思います。
    個人的には、個別の問題が
    もっと大きな課題の一部分や一側面にすぎないという場合に、
    あるていど個別な課題を横断的に俯瞰できる場所といいますか、
    課題同士の横の繋がりを意識した議論や検討の出来る
    issueがあっても良いかな、とは思案するところです。


    例のツールは、その、それなりに活用させてもらっているといいますか(汗
    IE系のブラウザに存在するShiftキー+ホイールな
    ショートカット(?)を移植したり、和文入力中に英数CapsLockキーを
    誤打してkonozamaするのを無効化したり、
    ええ、それなりに活用しております(汗
    あとマウスのボタンにつきましては、いざとなれば半田g(ごすというにぶいおと

  25. 権兵衛 七篠 reporter

    派生Issue作っておいてこちらの始末忘れてました(汗)、スイマセンorz
    派生Issueの案内をして当IssueをCloseといたします。

    当Issueからの派生のIssueは
    ・ホイールチルトの方向が逆向きな件
    →「修正案:マウスホイールのチルトと操作方向が逆」(#430)
    ・「NEXT」以前のクラシックエンジンの復刻ないし再現の需要
    ・将来的なユーザーインタフェース実装のあり方
    →「追加案?:将来的なユーザーインタフェース実装のあり方」(#431)
    ......となります。

  26. Log in to comment