-
Notifications
You must be signed in to change notification settings - Fork 455
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improvement of scroll snap method to support vertical and horizontal snap #555
Improvement of scroll snap method to support vertical and horizontal snap #555
Conversation
水平方向にもスナップできるようにしたいのだと理解しました。 しかしそれに近い方式は過去に試しており下記のような理由で棄却しています。
つまりこのPRでも過去と同様、大半の人がいきなりmode = 3(自由スクロール)になってしまい、スナップしていることを実感できないと考えられます。
またモード遷移が非常に複雑なため、大半の人にとっては体感として理解できない恐れが非常に強いです。 以上のことから、標準機能としてこのパッチを取り込むことは非常に難しいと言わざるをえません。 あと本題とは関係ありませんが、添付していただいた図は「Flow Chart」ではなく |
参考: keyball/qmk_firmware/keyboards/keyball/lib/keyball/keyball.c Lines 160 to 201 in ea80e4e
以下に相当するコード
|
検討しましたがこの方式では受け入れられないとの結論になりました。 代わりと言っては何ですが、 よろしければそちらの方にご意見ください。 |
@koron ご指摘いただいた点、私の意図と異なる部分がございましたので、Close後ではありますがご返信させてください。 順番前後しますが、、
分かりづらい状態遷移図を載せたのがダメでしたね…。
koron様がご検討されていた内容は「スクロール方向を見定めるまで操作を読み捨てる必要がある」と「読み捨てるとユーザビリティを損なう」のトレードオフの中で、「ユーザビリティの許容範囲内の操作量は微小すぎて方向が定まらない」と結論付けられたと理解しています。 koron様と私の方式を比べると下記と認識していますが、合っていますでしょうか?
この元、ユーザーの操作に対する初期→鉛直スク→自由スクの遷移は下記のようになると思っています。
したがってご返答としては「軽い操作で意図せずmode = 3(自由スクロール)にはならない」、「動き出しは自由スクロールのためユーザビリティは損なわない」となります。 あわよくばご再考の余地があれば…とご返信しましたがご確認いただけるだけでもありがたいです。よろしくお願い致します。 ちなみになんでかよくわかってないのですが、むしろ私方式でmode0→mode3にいきなり遷移させる方法がわかってないです…(scroll_divの設定値が大きいからなのか…) |
デフォルトが自由スクロールなのはもっとよろしくないのです。 いずれにせよボールの回転量を元に状態遷移をする方式は |
ご丁寧にありがとうございます。 なにはともあれマージされなかった事情は納得です。 |
This pull request is an improvement of the scroll snap method.
The goal is to support vertical scroll snap and horizontal scroll snap at the same time.
Pull requestを英語で書いてから日本語でも良かったことに気づきました…。
C言語のコードを書くのもPull requestを送るのも初めてです。
お作法間違いがございましたらご指摘いただけるとありがたいです。
私の環境ではこの機能修正でfirmwareが74byte増加しました。
過去にスクロールスナップ機能周りは諸々検討済みと伺っておりますが、
もしそれらと方向性が重複していなければご検討いただけると幸いです。
Improved Method
Initially, the
scroll_snap_mode
is 0.In this mode
== 0
, any direction scrolling is allowed.Then the trackball inputs a value
r->v >= KEYBALL_SCROLLSNAP_TENSION_THRESHOLD_1ST
, thescroll_snap_mode
changes from 0 to 1.In this mode
== 1
, only vertical scrolling is allowed.Similarly, the trackball inputs a value
r->h >= KEYBALL_SCROLLSNAP_TENSION_THRESHOLD_1ST
, thescroll_snap_mode
changes from 0 to 2.In this mode
== 2
, only horizontal scrolling is allowed.In addition, the trackball inputs values
r->v >= ..._1ST
andr->h >= ..._1ST
at the same time, thescroll_snap_mode
changes from 0 to 3.In this mode
== 3
, any direction scrolling is allowed.When the mode is 1, the trackball inputs a value
r->h >= KEYBALL_SCROLLSNAP_TENSION_THRESHOLD_2ND
, thescroll_snap_mode
changes from 1 to 3.Similarly, when the mode is 2, the trackball inputs a value
r->v >= ..._2ND
, thescroll_snap_mode
changes from 2 to 3.When the mode is 1 / 2 / 3, the trackball inputs nothing and time has passed
TIMER_DIFF_32(now, keyball.prev_scroll_time) >= KEYBALL_SCROLLSNAP_RESET_TIMER
, the scroll_snap_mode changes from 1 / 2 / 3 to 0.Flow Chart
🤔🤔🤔