Skip to content

Instantly share code, notes, and snippets.

@nuovotaka
Last active July 17, 2025 10:20
Show Gist options
  • Save nuovotaka/7ea95cdffbd5354224dab9314afa89f7 to your computer and use it in GitHub Desktop.
Save nuovotaka/7ea95cdffbd5354224dab9314afa89f7 to your computer and use it in GitHub Desktop.
Auto-KDK トラックボールのスクロール量について

trackball_listener内のinput-processorについて

  • 各 input-processor は、前の処理結果を受け取って次の処理に渡します
  • スケーリング(倍率変更)を先に行うか、XY変換(入れ替え・反転)を先に行うかで、最終的な値や方向が変わります。
順番 具体例 結果の違い
① XY変換 → スケーリング 1. XY軸を入れ替え・反転
2. 値をスケーリング
変換後の方向や動きがスケーリングされて反映されます
② スケーリング → XY変換 1. 値をスケーリング
2. XY軸を入れ替え・反転
スケーリングした後の値が変換され、動き方が異なります

このように、同じ処理内容でも順番が違うと、スクロールの方向や速度が意図と異なる場合があります。
そのため、入力処理の順番はとても重要です。

Scaler Input Processor(スケーラー入力プロセッサ)解説

概要

Scaler Input Processor(スケーラー入力プロセッサ)は、特定の入力イベント(例:トラックボールやホイールの動き)の値を、指定した倍率で拡大・縮小するための仕組みです。
設定した「コード」に一致するイベントだけが処理され、それ以外は無視されます。


使い方

スケーラーは「乗算する値」と「除算する値」の2つの正の整数パラメータを取ります。

  • &zip_xy_scaler 2 1
    → X/Yの動きを2倍にします。

  • &zip_xy_scaler 1 3
    → 動きを1/3にして、より細かい操作ができるようにします。

注意
倍率や除数は最大16までにしてください(それ以上だとオーバーフローの危険があります)。


あらかじめ用意されているインスタンス

参照名 説明
&zip_xy_scaler X軸・Y軸の両方を同じ倍率で調整
&zip_x_scaler X軸だけを調整
&zip_y_scaler Y軸だけを調整
&zip_scroll_scaler ホイールや横ホイールの値を調整

まとめ

  • Scaler Input Processorは、入力の感度や速度を細かく調整したいときに便利です。
  • X軸・Y軸・ホイールなど、個別に倍率を設定できます。

設定例

  • SCROLL : こちらは、スクロールレイヤーの値を入れてください。
    trackball_listener: trackball_listener {
        compatible = "zmk,input-listener";
        device = <&trackball>;
        input-processors = <&zip_xy_transform (INPUT_TRANSFORM_X_INVERT | INPUT_TRANSFORM_Y_INVERT)>;

        scroll {
            layers = <SCROLL>;
            input-processors =
                <&zip_xy_transform (INPUT_TRANSFORM_X_INVERT | INPUT_TRANSFORM_Y_INVERT)>,
                <&zip_x_scaler 1 16>,
                <&zip_y_scaler 1 4>,
                <&zip_scroll_scaler 1 4>,
                <&zip_xy_to_scroll_mapper>;
        };
    };

各プロセッサの役割と処理の流れ

  1. XY変換(反転)

    • <&zip_xy_transform (INPUT_TRANSFORM_X_INVERT | INPUT_TRANSFORM_Y_INVERT)>
      • X軸とY軸の両方の値を反転します(正負が逆になる)。
      • 例:右に動かすと左、上に動かすと下になる。
  2. X軸スケーリング

    • <&zip_x_scaler 1 16>
      • X軸の動きを1/16にします(16分の1の感度)。
      • X方向の動きが非常に細かくなり、ゆっくり動く。
  3. Y軸スケーリング

    • <&zip_y_scaler 1 4>
      • Y軸の動きを1/4にします(4分の1の感度)。
      • Y方向の動きも細かく、Xよりは大きく動く。
  4. スクロールスケーリング

    • <&zip_scroll_scaler 1 4>
      • スクロールイベントの値を1/4にします。
      • スクロールの感度も細かくなり、少しの動きで大きくスクロールしない。
  5. XY→スクロール変換

    • <&zip_xy_to_scroll_mapper>
      • ここまで変換・スケーリングされたXYの値をスクロールイベントに変換します。

以上。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment