diff options
Diffstat (limited to 'keyboards/ploopyco/trackball_mini/trackball_mini.c')
-rw-r--r-- | keyboards/ploopyco/trackball_mini/trackball_mini.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/keyboards/ploopyco/trackball_mini/trackball_mini.c b/keyboards/ploopyco/trackball_mini/trackball_mini.c index 996c00b22a..b50850b549 100644 --- a/keyboards/ploopyco/trackball_mini/trackball_mini.c +++ b/keyboards/ploopyco/trackball_mini/trackball_mini.c @@ -40,6 +40,13 @@ #define PLOOPY_DPI_OPTIONS { CPI375, CPI750, CPI1375 } #define PLOOPY_DPI_DEFAULT 2 +#ifndef PLOOPY_DRAGSCROLL_DPI +# define PLOOPY_DRAGSCROLL_DPI CPI375 // Fixed-DPI Drag Scroll +#endif +#ifndef PLOOPY_DRAGSCROLL_MULTIPLIER +# define PLOOPY_DRAGSCROLL_MULTIPLIER 0.75 // Variable-DPI Drag Scroll +#endif + // Transformation constants for delta-X and delta-Y const static float ADNS_X_TRANSFORM = -1.0; const static float ADNS_Y_TRANSFORM = 1.0; @@ -61,6 +68,7 @@ uint16_t lastScroll = 0; // Previous confirmed wheel event uint16_t lastMidClick = 0; // Stops scrollwheel from being read if it was pressed uint8_t OptLowPin = OPT_ENC1; bool debug_encoder = false; +bool is_drag_scroll = false; __attribute__((weak)) void process_wheel_user(report_mouse_t* mouse_report, int16_t h, int16_t v) { mouse_report->h = h; @@ -142,6 +150,16 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record) { adns_set_cpi(dpi_array[keyboard_config.dpi_config]); } + if (keycode == DRAG_SCROLL) { +#ifndef PLOOPY_DRAGSCROLL_MOMENTARY + if (record->event.pressed) +#endif + { + is_drag_scroll ^= 1; + } + adns_set_cpi(is_drag_scroll ? PLOOPY_DRAGSCROLL_DPI : dpi_array[keyboard_config.dpi_config]); + } + /* If Mousekeys is disabled, then use handle the mouse button * keycodes. This makes things simpler, and allows usage of * the keycodes in a consistent manner. But only do this if @@ -214,6 +232,19 @@ void pointing_device_task(void) { report_mouse_t mouse_report = pointing_device_get_report(); process_wheel(&mouse_report); process_mouse(&mouse_report); + + if (is_drag_scroll) { + mouse_report.h = mouse_report.x; +#ifdef PLOOPY_DRAGSCROLL_INVERT + // Invert vertical scroll direction + mouse_report.v = -mouse_report.y; +#else + mouse_report.v = mouse_report.y; +#endif + mouse_report.x = 0; + mouse_report.y = 0; + } + pointing_device_set_report(mouse_report); pointing_device_send(); } |