mirror of
https://github.com/clockworkpi/DevTerm.git
synced 2025-12-13 02:38:50 +01:00
fix conflicts of scrolling and mid mouse key
This commit is contained in:
parent
bd0fcf9fb0
commit
c66b85c04a
@ -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) {
|
void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) {
|
||||||
|
|
||||||
uint16_t k;
|
uint16_t k;
|
||||||
|
|
||||||
k = keys_maps[col];
|
k = keys_maps[col];
|
||||||
|
|
||||||
if(k == EMP){
|
if(k == EMP){
|
||||||
@ -398,8 +398,12 @@ void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) {
|
|||||||
if(mode == KEY_PRESSED) {
|
if(mode == KEY_PRESSED) {
|
||||||
dv->state->pressMiddleClick();
|
dv->state->pressMiddleClick();
|
||||||
}else {
|
}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->state->releaseMiddleClick();
|
||||||
dv->Mouse->click(MOUSE_MIDDLE);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@ -25,9 +25,12 @@ class State
|
|||||||
|
|
||||||
void pressMiddleClick();
|
void pressMiddleClick();
|
||||||
bool releaseMiddleClick();
|
bool releaseMiddleClick();
|
||||||
|
bool getScrolled();
|
||||||
|
void setScrolled();
|
||||||
TrackballMode moveTrackball();
|
TrackballMode moveTrackball();
|
||||||
private:
|
private:
|
||||||
bool middleClick;
|
bool middleClick;
|
||||||
|
bool scrolled;
|
||||||
Timeout<uint16_t, MIDDLE_CLICK_TIMEOUT_MS> middleClickTimeout;
|
Timeout<uint16_t, MIDDLE_CLICK_TIMEOUT_MS> middleClickTimeout;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,8 @@
|
|||||||
|
|
||||||
State::State()
|
State::State()
|
||||||
: fn(false),
|
: fn(false),
|
||||||
middleClick(false)
|
middleClick(false),
|
||||||
|
scrolled(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -14,6 +15,15 @@ void State::tick(millis_t delta)
|
|||||||
{
|
{
|
||||||
middleClickTimeout.updateTime(delta);
|
middleClickTimeout.updateTime(delta);
|
||||||
}
|
}
|
||||||
|
void State::setScrolled() {
|
||||||
|
if(middleClick==true){
|
||||||
|
scrolled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool State::getScrolled() {
|
||||||
|
return scrolled;
|
||||||
|
}
|
||||||
|
|
||||||
void State::pressMiddleClick() {
|
void State::pressMiddleClick() {
|
||||||
middleClick = true;
|
middleClick = true;
|
||||||
@ -22,6 +32,7 @@ void State::pressMiddleClick() {
|
|||||||
|
|
||||||
bool State::releaseMiddleClick() {
|
bool State::releaseMiddleClick() {
|
||||||
middleClick = false;
|
middleClick = false;
|
||||||
|
scrolled = false;
|
||||||
const auto timeout = middleClickTimeout.get();
|
const auto timeout = middleClickTimeout.get();
|
||||||
return !timeout;
|
return !timeout;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -35,8 +35,8 @@ static float rateToVelocityCurve(float input) {
|
|||||||
return std::pow(std::abs(input) / 50, 1.4);
|
return std::pow(std::abs(input) / 50, 1.4);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<Axis AXIS, int8_t Direction>
|
template<Axis AXIS, int8_t Direction >
|
||||||
static void interrupt() {
|
static void interrupt( ) {
|
||||||
distances[AXIS] += Direction;
|
distances[AXIS] += Direction;
|
||||||
rateMeter[AXIS].onInterrupt();
|
rateMeter[AXIS].onInterrupt();
|
||||||
glider[AXIS].setDirection(Direction);
|
glider[AXIS].setDirection(Direction);
|
||||||
@ -53,11 +53,14 @@ static void interrupt() {
|
|||||||
if (AXIS == AXIS_X) {
|
if (AXIS == AXIS_X) {
|
||||||
glider[AXIS_X].update(vx, std::sqrt(rateMeter[AXIS_X].delta()));
|
glider[AXIS_X].update(vx, std::sqrt(rateMeter[AXIS_X].delta()));
|
||||||
glider[AXIS_Y].updateSpeed(vy);
|
glider[AXIS_Y].updateSpeed(vy);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
glider[AXIS_X].updateSpeed(vx);
|
glider[AXIS_X].updateSpeed(vx);
|
||||||
glider[AXIS_Y].update(vy, std::sqrt(rateMeter[AXIS_Y].delta()));
|
glider[AXIS_Y].update(vy, std::sqrt(rateMeter[AXIS_Y].delta()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void trackball_task(DEVTERM*dv) {
|
void trackball_task(DEVTERM*dv) {
|
||||||
@ -94,6 +97,9 @@ void trackball_task(DEVTERM*dv) {
|
|||||||
wheelBuffer += distances[AXIS_Y];
|
wheelBuffer += distances[AXIS_Y];
|
||||||
w = wheelBuffer / WHEEL_DENOM;
|
w = wheelBuffer / WHEEL_DENOM;
|
||||||
wheelBuffer -= w * WHEEL_DENOM;
|
wheelBuffer -= w * WHEEL_DENOM;
|
||||||
|
if(w != 0){
|
||||||
|
dv->state->setScrolled();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -108,14 +114,14 @@ void trackball_task(DEVTERM*dv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void trackball_init(DEVTERM*){
|
void trackball_init(DEVTERM*dv){
|
||||||
|
|
||||||
pinMode(LEFT_PIN, INPUT);
|
pinMode(LEFT_PIN, INPUT);
|
||||||
pinMode(UP_PIN, INPUT);
|
pinMode(UP_PIN, INPUT);
|
||||||
pinMode(RIGHT_PIN, INPUT);
|
pinMode(RIGHT_PIN, INPUT);
|
||||||
pinMode(DOWN_PIN, INPUT);
|
pinMode(DOWN_PIN, INPUT);
|
||||||
|
|
||||||
attachInterrupt(LEFT_PIN, &interrupt<AXIS_X, -1>, ExtIntTriggerMode::CHANGE);
|
attachInterrupt(LEFT_PIN, &interrupt<AXIS_X,-1> , ExtIntTriggerMode::CHANGE);
|
||||||
attachInterrupt(RIGHT_PIN, &interrupt<AXIS_X, 1>, ExtIntTriggerMode::CHANGE);
|
attachInterrupt(RIGHT_PIN, &interrupt<AXIS_X, 1>, ExtIntTriggerMode::CHANGE);
|
||||||
attachInterrupt(UP_PIN, &interrupt<AXIS_Y, -1>, ExtIntTriggerMode::CHANGE);
|
attachInterrupt(UP_PIN, &interrupt<AXIS_Y, -1>, ExtIntTriggerMode::CHANGE);
|
||||||
attachInterrupt(DOWN_PIN, &interrupt<AXIS_Y, 1>, ExtIntTriggerMode::CHANGE);
|
attachInterrupt(DOWN_PIN, &interrupt<AXIS_Y, 1>, ExtIntTriggerMode::CHANGE);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user