はじめに
タイトルの通りです。
以前にも雑にスクロール方向を反転させましたが、今回はos_detectionを使用して反転させています。
やること
- keyballのファームを自分でコンパイルできるようにする(省略)
- keyball/lib/keyball.cの188行目あたりの関数の最後に以下のように追記
- コンパイルしてファーム書き込んで終わり
keyball.c
__attribute__((weak)) void keyball_on_apply_motion_to_mouse_scroll(keyball_motion_t *m, report_mouse_t *r, bool is_left) {
// consume motion of trackball.
int16_t div = 1 << (keyball_get_scroll_div() - 1);
int16_t x = divmod16(&m->x, div);
int16_t y = divmod16(&m->y, div);
// apply to mouse report.
#if KEYBALL_MODEL == 61 || KEYBALL_MODEL == 39 || KEYBALL_MODEL == 147 || KEYBALL_MODEL == 44
r->h = clip2int8(y);
r->v = -clip2int8(x);
if (is_left) {
r->h = -r->h;
r->v = -r->v;
}
#elif KEYBALL_MODEL == 46
r->h = clip2int8(x);
r->v = clip2int8(y);
#else
# error("unknown Keyball model")
#endif
// Scroll snapping
#if KEYBALL_SCROLLSNAP_ENABLE == 1
// Old behavior up to 1.3.2)
uint32_t now = timer_read32();
if (r->h != 0 || r->v != 0) {
keyball.scroll_snap_last = now;
} else if (TIMER_DIFF_32(now, keyball.scroll_snap_last) >= KEYBALL_SCROLLSNAP_RESET_TIMER) {
keyball.scroll_snap_tension_h = 0;
}
if (abs(keyball.scroll_snap_tension_h) < KEYBALL_SCROLLSNAP_TENSION_THRESHOLD) {
keyball.scroll_snap_tension_h += y;
r->h = 0;
}
#elif KEYBALL_SCROLLSNAP_ENABLE == 2
// New behavior
switch (keyball_get_scrollsnap_mode()) {
case KEYBALL_SCROLLSNAP_MODE_VERTICAL:
r->h = 0;
break;
case KEYBALL_SCROLLSNAP_MODE_HORIZONTAL:
r->v = 0;
break;
default:
// pass by without doing anything
break;
}
#endif
// --- ここから追記 ---
// windowsOSでスクロール方向反転
if (detected_host_os() == OS_WINDOWS || detected_host_os() == OS_LINUX){
r->h = -r->h;
r->v = -r->v;
}
// --- ここまで追記 ---
}
終わりに
本当はユーザーレベルで改変した方がいいのかな
できるのかな