forked from Mirrors/openclonk
Add support for two extra mouse buttons (#mantis-is-down-right-now)
This also fixes a missing definition for "MiddleDouble". Only implemented for SDL and Qt, someone else will have to do Windows.console-destruction
parent
5d6ecc8dc8
commit
26a552473c
|
@ -1420,12 +1420,19 @@ bool C4PlayerControl::DoMouseInput(uint8_t mouse_id, int32_t mouseevent, float g
|
|||
case C4MC_Button_None: mouseevent_code = KEY_MOUSE_Move; break;
|
||||
case C4MC_Button_LeftUp: is_down = false; // nobreak
|
||||
case C4MC_Button_LeftDown: mouseevent_code = KEY_MOUSE_ButtonLeft; break;
|
||||
case C4MC_Button_LeftDouble: mouseevent_code = KEY_MOUSE_ButtonLeftDouble; break;
|
||||
case C4MC_Button_RightUp: is_down = false; // nobreak
|
||||
case C4MC_Button_RightDown: mouseevent_code = KEY_MOUSE_ButtonRight; break;
|
||||
case C4MC_Button_LeftDouble: mouseevent_code = KEY_MOUSE_ButtonLeftDouble; break;
|
||||
case C4MC_Button_RightDouble: mouseevent_code = KEY_MOUSE_ButtonRightDouble; break;
|
||||
case C4MC_Button_MiddleUp: is_down = false; // nobreak
|
||||
case C4MC_Button_MiddleDown: mouseevent_code = KEY_MOUSE_ButtonMiddle; break;
|
||||
case C4MC_Button_MiddleDouble: mouseevent_code = KEY_MOUSE_ButtonMiddleDouble; break;
|
||||
case C4MC_Button_X1Up: is_down = false; // nobreak
|
||||
case C4MC_Button_X1Down: mouseevent_code = KEY_MOUSE_ButtonX1; break;
|
||||
case C4MC_Button_X1Double: mouseevent_code = KEY_MOUSE_ButtonX1Double; break;
|
||||
case C4MC_Button_X2Up: is_down = false; // nobreak
|
||||
case C4MC_Button_X2Down: mouseevent_code = KEY_MOUSE_ButtonX2; break;
|
||||
case C4MC_Button_X2Double: mouseevent_code = KEY_MOUSE_ButtonX2Double; break;
|
||||
case C4MC_Button_Wheel:
|
||||
if (!wheel_dir) return false;
|
||||
mouseevent_code = (wheel_dir > 0) ? KEY_MOUSE_Wheel1Up : KEY_MOUSE_Wheel1Down; break;
|
||||
|
|
|
@ -189,6 +189,9 @@ void C4ConsoleQtViewportView::mousePressEvent(QMouseEvent *eventPress)
|
|||
{
|
||||
case Qt::LeftButton: btn = C4MC_Button_LeftDown; break;
|
||||
case Qt::RightButton: btn = C4MC_Button_RightDown; break;
|
||||
case Qt::MiddleButton: btn = C4MC_Button_MiddleDown; break;
|
||||
case Qt::XButton1: btn = C4MC_Button_X1Down; break;
|
||||
case Qt::XButton2: btn = C4MC_Button_X2Down; break;
|
||||
}
|
||||
C4GUI::MouseMove(btn, eventPress->x() * pr, eventPress->y() * pr, GetShiftWParam(), cvp);
|
||||
}
|
||||
|
@ -213,6 +216,9 @@ void C4ConsoleQtViewportView::mouseDoubleClickEvent(QMouseEvent *eventPress)
|
|||
{
|
||||
case Qt::LeftButton: btn = C4MC_Button_LeftDouble; break;
|
||||
case Qt::RightButton: btn = C4MC_Button_RightDouble; break;
|
||||
case Qt::MiddleButton: btn = C4MC_Button_MiddleDouble; break;
|
||||
case Qt::XButton1: btn = C4MC_Button_X1Double; break;
|
||||
case Qt::XButton2: btn = C4MC_Button_X2Double; break;
|
||||
}
|
||||
auto pr = GetDevicePixelRatio();
|
||||
C4GUI::MouseMove(btn, eventPress->x() * pr, eventPress->y() * pr, GetShiftWParam(), cvp);
|
||||
|
@ -228,6 +234,9 @@ void C4ConsoleQtViewportView::mouseReleaseEvent(QMouseEvent *releaseEvent)
|
|||
{
|
||||
case Qt::LeftButton: btn = C4MC_Button_LeftUp; break;
|
||||
case Qt::RightButton: btn = C4MC_Button_RightUp; break;
|
||||
case Qt::MiddleButton: btn = C4MC_Button_MiddleUp; break;
|
||||
case Qt::XButton1: btn = C4MC_Button_X1Up; break;
|
||||
case Qt::XButton2: btn = C4MC_Button_X2Up; break;
|
||||
}
|
||||
auto pr = GetDevicePixelRatio();
|
||||
C4GUI::MouseMove(btn, releaseEvent->x() * pr, releaseEvent->y() * pr, GetShiftWParam(), cvp);
|
||||
|
|
|
@ -284,6 +284,8 @@ C4KeyCode C4KeyCodeEx::String2KeyCode(const StdStrBuf &sName)
|
|||
if (SEqualNoCase(key_str, "Left",4)) { mouseevent_id=KEY_MOUSE_ButtonLeft; key_str += 4; }
|
||||
else if (SEqualNoCase(key_str, "Right",5)) { mouseevent_id=KEY_MOUSE_ButtonRight; key_str += 5; }
|
||||
else if (SEqualNoCase(key_str, "Middle",6)) { mouseevent_id=KEY_MOUSE_ButtonMiddle; key_str += 6; }
|
||||
else if (SEqualNoCase(key_str, "X1",2)) { mouseevent_id=KEY_MOUSE_ButtonX1; key_str += 2; }
|
||||
else if (SEqualNoCase(key_str, "X2",2)) { mouseevent_id=KEY_MOUSE_ButtonX2; key_str += 2; }
|
||||
else if (isdigit(*key_str))
|
||||
{
|
||||
// indexed mouse button (e.g. Mouse1Button4 or Mouse1Button4Double)
|
||||
|
@ -385,9 +387,13 @@ StdStrBuf C4KeyCodeEx::KeyCode2String(C4KeyCode wCode, bool fHumanReadable, bool
|
|||
case KEY_MOUSE_ButtonLeft: return FormatString("%s%dLeft", mouse_str, mouse_id);
|
||||
case KEY_MOUSE_ButtonRight: return FormatString("%s%dRight", mouse_str, mouse_id);
|
||||
case KEY_MOUSE_ButtonMiddle: return FormatString("%s%dMiddle", mouse_str, mouse_id);
|
||||
case KEY_MOUSE_ButtonX1: return FormatString("%s%dX1", mouse_str, mouse_id);
|
||||
case KEY_MOUSE_ButtonX2: return FormatString("%s%dX2", mouse_str, mouse_id);
|
||||
case KEY_MOUSE_ButtonLeftDouble: return FormatString("%s%dLeftDouble", mouse_str, mouse_id);
|
||||
case KEY_MOUSE_ButtonRightDouble: return FormatString("%s%dRightDouble", mouse_str, mouse_id);
|
||||
case KEY_MOUSE_ButtonMiddleDouble:return FormatString("%s%dMiddleDouble", mouse_str, mouse_id);
|
||||
case KEY_MOUSE_ButtonX1Double: return FormatString("%s%dX1Double", mouse_str, mouse_id);
|
||||
case KEY_MOUSE_ButtonX2Double: return FormatString("%s%dX2Double", mouse_str, mouse_id);
|
||||
default:
|
||||
// extended mouse button
|
||||
{
|
||||
|
|
|
@ -98,11 +98,15 @@ const C4KeyCode
|
|||
KEY_MOUSE_ButtonLeft = KEY_MOUSE_Button1 + 0,
|
||||
KEY_MOUSE_ButtonRight = KEY_MOUSE_Button1 + 1,
|
||||
KEY_MOUSE_ButtonMiddle = KEY_MOUSE_Button1 + 2,
|
||||
KEY_MOUSE_ButtonX1 = KEY_MOUSE_Button1 + 3,
|
||||
KEY_MOUSE_ButtonX2 = KEY_MOUSE_Button1 + 4,
|
||||
KEY_MOUSE_ButtonMax = KEY_MOUSE_Button1 + 0x1f, // max number of supported mouse buttons
|
||||
KEY_MOUSE_Button1Double = 0x30, // double clicks have special events because double click speed is issued by OS
|
||||
KEY_MOUSE_ButtonLeftDouble = KEY_MOUSE_Button1Double + 0,
|
||||
KEY_MOUSE_ButtonRightDouble = KEY_MOUSE_Button1Double + 1,
|
||||
KEY_MOUSE_ButtonMiddleDouble = KEY_MOUSE_Button1Double + 2,
|
||||
KEY_MOUSE_ButtonX1Double = KEY_MOUSE_Button1Double + 3,
|
||||
KEY_MOUSE_ButtonX2Double = KEY_MOUSE_Button1Double + 4,
|
||||
KEY_MOUSE_ButtonMaxDouble = KEY_MOUSE_Button1Double + 0x1f, // max number of supported mouse buttons
|
||||
KEY_MOUSE_Wheel1Up = 0x40, // mouse control: wheel up
|
||||
KEY_MOUSE_Wheel1Down = 0x41; // mouse control: wheel down
|
||||
|
|
|
@ -32,7 +32,14 @@ const int32_t C4MC_Button_None = 0,
|
|||
C4MC_Button_RightDouble = 6,
|
||||
C4MC_Button_Wheel = 7,
|
||||
C4MC_Button_MiddleDown = 8,
|
||||
C4MC_Button_MiddleUp = 9;
|
||||
C4MC_Button_MiddleUp = 9,
|
||||
C4MC_Button_MiddleDouble= 10,
|
||||
C4MC_Button_X1Down = 11,
|
||||
C4MC_Button_X1Up = 12,
|
||||
C4MC_Button_X1Double = 13,
|
||||
C4MC_Button_X2Down = 14,
|
||||
C4MC_Button_X2Up = 15,
|
||||
C4MC_Button_X2Double = 16;
|
||||
|
||||
const int32_t C4MC_DragSensitivity = 5;
|
||||
|
||||
|
|
|
@ -50,10 +50,22 @@ static void sdlToC4MCBtn(const SDL_MouseButtonEvent &e, int32_t& button, DWORD&
|
|||
break;
|
||||
case SDL_BUTTON_MIDDLE:
|
||||
if (e.state == SDL_PRESSED)
|
||||
button = C4MC_Button_MiddleDown;
|
||||
button = e.clicks == 2 ? C4MC_Button_MiddleDouble : C4MC_Button_MiddleDown;
|
||||
else
|
||||
button = C4MC_Button_MiddleUp;
|
||||
break;
|
||||
case SDL_BUTTON_X1:
|
||||
if (e.state == SDL_PRESSED)
|
||||
button = e.clicks == 2 ? C4MC_Button_X1Double : C4MC_Button_X1Down;
|
||||
else
|
||||
button = C4MC_Button_X1Up;
|
||||
break;
|
||||
case SDL_BUTTON_X2:
|
||||
if (e.state == SDL_PRESSED)
|
||||
button = e.clicks == 2 ? C4MC_Button_X2Double : C4MC_Button_X2Down;
|
||||
else
|
||||
button = C4MC_Button_X2Up;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue