修正案:マウスホイールのチルトと操作方向が逆

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

本記事は、
Issue #418(提案:マウスホイールの反応を鈍くする/無効にする)
における発言からの派生です。

以下発言の引用

ウチのロジ狂うロジクールのマウスだけかも知れないですが、
ホイールのチルト操作やるとキーボード上のCtrl+左右キーとは
逆方向に操作が反応する、とかいうライブラリあたりが
バグってそうな微妙なのもありますし.......(遠い目
(普段使いのG700のほかにVX Revolutionで逆方向チルトを確認。
しかし同メーカーのMX400では無反応だったんでMicro$oftとか
よそのメーカーだとまた違ってくるのかも。)

※ここでいうホイールのチルト操作とは、
 https://support.microsoft.com/ja-jp/kb/882820
 MicroSoft「チルト ホイールでスクロールしてみよう」
 の記事にあるような水平方向のホイール操作をさします。

1.50ではキャラクターカードを右クリックして出てくる
「キャラクター情報」の画面でマウスホイールのチルト操作が出来ますが、
Pyではこの操作方向が逆になっているため、その修正を提案します。

引用内容にもあるとおり、当初この件はライブラリのバグや
マウスのモデルごとの個体差を疑ったのですが、
どうやらスクロールホイールの上下動で発火するルーチンが
そのまま左右のチルト操作にも反応している、というのが実情のようです。
マウス右ボタン押しっぱなしで左右チルトの操作をしたところ、
右チルトで音量アップ、左チルトで音量ダウンという
操作になることを確認しました。

ですので、恐らく本件の対処としては、
ホイールのイベントを拾った際に
通常の上下回転であるかチルト操作によるものかを判別して
処理を行うのが適当かと愚考します。
PyGameでは判別の手法が見つからなかったのですが、
wxPythonのwxMouseEventにあるGetWheelAxisで
MOUSE_WHEEL_VERTICALが返ってくるなら通常のホイール操作、
MOUSE_WHEEL_HORIZONTALが帰ってきたらチルトホイールの操作と
場合分けすれば対応可能であるかと愚考します。

添付のファイルは、wxPythonによるホイールの動作識別を行う
Pyのサンプルプログラムと、
チルト機能のないマウスでチルト操作を代替するための
AutoHotKeyスクリプトになります。
文字通りどおりに「スクリプトキディ」なつたないサンプルですが
もしも参考になりましたらば幸いです。

Comments (5)

  1. 権兵衛 七篠 reporter

    あとは余談なのですが、
    もし、CWPyのシステムでチルト操作の判別が出来るのならば、
    この際、チルトホイールをスクロールとは別の、
    独立した機能として活用するアイデアを模索できないかと
    個人的には思案する(※)のですが、
    スクロールホイールのチルト機能の普及率が高くない
    (少なくとも、BitBucketのCWPyユーザーからチルトへの言及は
    自分の知る限りでは他になさそうなのでorz)現状を考えると
    こうした検討は時期尚早とみるべきでしょうか.......?
    (そもチルト検出の可否を探ってる段階で使い道を考えてる時点で
    あからさまに勇み足なのかも知れません.......(汗))

    (※たとえばポインタ位置でスクロールの動作が
     切り替えられている(と思われる)カード操作の画面で、
     冒険者や荷物袋の切り替えはスクロール、
     スキル、アイテム、召喚獣の切り替えはチルト、とか
     あるいはキャラクター情報の画面でタブの切り替え
     (厳密に言えば、ボタン?(汗))をチルトで、
     メンバの切り替えはスクロール
     .......など。)

  2. k4nagatsuki repo owner

    ありがとうございます。

    幸いにも(?)CWPyはpygameとwxPythonの組み合わせで一つのアプリケーションを成り立たせるという少々無理な事をしており、pygame側ではマウスイベントが取れないので、wx側を経由して入力を得ています。そのため仰った方法でチルト操作への対応が可能でした。pull request #1620で方向を逆転させてみたのでお試しください。


    チルト操作が可能なマウスは随分前から存在していますが、前後ボタンと同じく対応しているのは一部だけです。今後も増えないのではないでしょうか。そこに固有の機能を割り当てる事には、使えない人が出るというデメリットこそあれ、あまりメリットがあるようには思えません。

    使いみちがあるとすれば、他の操作で行える事をショートカットできるようにする、という形になると思います。例を見ると、たぶんそのつもりでご提案されているのだと思います。

  3. 権兵衛 七篠 reporter

    七篠です。
    2016/10/31版でチルトホイールの修正を確認しました。
    素早い対応ありがとう御座います。
    添付資料もお役に立ちましたようで何よりです。


    やはりチルト機能の普及率は高くないという見解ですか......
    おっしゃるとおり、「チルト必須な固有機能の割当て」では
    チルト非対応マウスでの弊害も大きいと同意します。
    ではショートカットでよいのかといわれると、どう答えてよいのか....

    実のところ、チルト操作とスクロールとを
    別な反応をする操作に区別しようと考えたきっかけなのですが、
    マウスポインタの位置によって
    スクロール操作に対する反応の切り替わる現行UIデザインが
    どうも思うように扱えないという個人的事情によるものなのです。
    (「キャラクター情報」の画面で
     メンバ換えようと思ったらタブが変わったとか、
     「カード操作の画面」の画面で
     荷物袋のページを繰るつもりが
     「_1」の装備スキルに突っ込むとか.....)

    CWPyのシステムはチルト操作に反応し、
    しかもこれをスクロールと区別する手段もあるというのなら、
    マウスポインタの位置で動作を切り替えてるUIを
    スクロールかチルト操作か、で切り替えできないか、
    と考えていった結果が「チルトに独立した機能を」という話の
    「そもそもの出所」だったりします。


    マウスポインタの位置で切り替えてる機能を
    チルトへ独立させることが(それを可能にするオプションか何かが)
    出来るのなら、それに越したことはないのですが、

    元をたどれば「操作をミスしやすい」という話なので、
    この場合、切り替えを「スクロールかチルトか」、でおこなうより
    「修飾キーの有無で切り替え」にするほうが
    マウスの仕様を問わずユニバーサルかもしれません。

    「スクロールホイールの動作をマウスポインタの位置で切替える」
    というオプションを標準でonにして追加しつつ
    これをoffとした場合に、修飾キー切り替え、といった格好でしょうか。

  4. tachi gigas

    恐れ入ります。チルトホイールマウスの愛用者です。しかし、たまにしか使いません。

    手札カードダイアログを例に、参考までの話をさせて頂きます。

    実は1.50でチルトホイールの操作が対応されておりまして、 1.30ではPyと同様の挙動ですが、 1.50では縦ホイールではスキル・アイテム・召喚獣の切替または荷物袋・カード置場のページめくり、 チルトホイールではキャラクター・荷物袋・カード置場を切替えます。

    つまり、1.30と1.50では仕様に相違があります。

    操作をどちらに合わせるかと言われると議論が発生すると思います。 チルトホイール対応マウスの普及率を考えれば現状維持の方がいい筈ですが、 僕個人の心境を述べますと正直言って複雑です。

  5. Log in to comment