diff --git a/Code/devterm_keyboard/keymaps.ino b/Code/devterm_keyboard/keymaps.ino index b831938..7a1268d 100644 --- a/Code/devterm_keyboard/keymaps.ino +++ b/Code/devterm_keyboard/keymaps.ino @@ -241,7 +241,7 @@ void keyboard_action(DEVTERM*dv,uint8_t row,uint8_t col,uint8_t mode) { void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) { uint16_t k; - + k = keys_maps[col]; if(k == EMP){ @@ -398,8 +398,12 @@ void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) { if(mode == KEY_PRESSED) { dv->state->pressMiddleClick(); }else { + if(dv->state->getScrolled() == false){ + //if no scrolling happend ,do as a normal mid mouse key click + dv->Mouse->click(MOUSE_MIDDLE); + } dv->state->releaseMiddleClick(); - dv->Mouse->click(MOUSE_MIDDLE); + } break; diff --git a/Code/devterm_keyboard/state.h b/Code/devterm_keyboard/state.h index 5e26536..8d65173 100644 --- a/Code/devterm_keyboard/state.h +++ b/Code/devterm_keyboard/state.h @@ -25,9 +25,12 @@ class State void pressMiddleClick(); bool releaseMiddleClick(); + bool getScrolled(); + void setScrolled(); TrackballMode moveTrackball(); private: bool middleClick; + bool scrolled; Timeout middleClickTimeout; }; diff --git a/Code/devterm_keyboard/state.ino b/Code/devterm_keyboard/state.ino index e2b96c9..b0fc330 100644 --- a/Code/devterm_keyboard/state.ino +++ b/Code/devterm_keyboard/state.ino @@ -6,7 +6,8 @@ State::State() : fn(false), - middleClick(false) + middleClick(false), + scrolled(false) { } @@ -14,6 +15,15 @@ void State::tick(millis_t delta) { middleClickTimeout.updateTime(delta); } +void State::setScrolled() { + if(middleClick==true){ + scrolled = true; + } +} + +bool State::getScrolled() { + return scrolled; +} void State::pressMiddleClick() { middleClick = true; @@ -22,6 +32,7 @@ void State::pressMiddleClick() { bool State::releaseMiddleClick() { middleClick = false; + scrolled = false; const auto timeout = middleClickTimeout.get(); return !timeout; } diff --git a/Code/devterm_keyboard/trackball.ino b/Code/devterm_keyboard/trackball.ino index 3915352..cb0e27c 100644 --- a/Code/devterm_keyboard/trackball.ino +++ b/Code/devterm_keyboard/trackball.ino @@ -35,8 +35,8 @@ static float rateToVelocityCurve(float input) { return std::pow(std::abs(input) / 50, 1.4); } -template -static void interrupt() { +template +static void interrupt( ) { distances[AXIS] += Direction; rateMeter[AXIS].onInterrupt(); glider[AXIS].setDirection(Direction); @@ -53,11 +53,14 @@ static void interrupt() { if (AXIS == AXIS_X) { glider[AXIS_X].update(vx, std::sqrt(rateMeter[AXIS_X].delta())); glider[AXIS_Y].updateSpeed(vy); + } else { glider[AXIS_X].updateSpeed(vx); glider[AXIS_Y].update(vy, std::sqrt(rateMeter[AXIS_Y].delta())); } + + } void trackball_task(DEVTERM*dv) { @@ -94,6 +97,9 @@ void trackball_task(DEVTERM*dv) { wheelBuffer += distances[AXIS_Y]; w = wheelBuffer / WHEEL_DENOM; wheelBuffer -= w * WHEEL_DENOM; + if(w != 0){ + dv->state->setScrolled(); + } break; } } @@ -108,14 +114,14 @@ void trackball_task(DEVTERM*dv) { } -void trackball_init(DEVTERM*){ +void trackball_init(DEVTERM*dv){ pinMode(LEFT_PIN, INPUT); pinMode(UP_PIN, INPUT); pinMode(RIGHT_PIN, INPUT); pinMode(DOWN_PIN, INPUT); - attachInterrupt(LEFT_PIN, &interrupt, ExtIntTriggerMode::CHANGE); + attachInterrupt(LEFT_PIN, &interrupt , ExtIntTriggerMode::CHANGE); attachInterrupt(RIGHT_PIN, &interrupt, ExtIntTriggerMode::CHANGE); attachInterrupt(UP_PIN, &interrupt, ExtIntTriggerMode::CHANGE); attachInterrupt(DOWN_PIN, &interrupt, ExtIntTriggerMode::CHANGE);