Fix Buttons not working on Linux with newer gcc

The button mask is created by shifting a bit according to the
MouseCode, which is just a renamed ButtonCode_t.
Mouse buttons start at 107, which is way out of range for our ints.

To fix this, introduce MouseButtonBit(), which checks if a button code
corresponds to a mouse button at all and returns a usable bitmask
for the corresponding mouse button code.
This is then used for the button mask.
This commit is contained in:
Alexander 'z33ky' Hirsch 2021-03-20 13:58:23 +01:00
parent 718186f165
commit e0091261ed
2 changed files with 12 additions and 3 deletions

View File

@ -18,6 +18,15 @@
namespace vgui
{
typedef ButtonCode_t MouseCode;
static inline int MouseButtonBit(MouseCode code)
{
if (code < MOUSE_FIRST || code > MOUSE_LAST) {
Assert(false);
return 0;
}
return 1 << (code - MOUSE_FIRST);
}
}
#endif // MOUSECODE_H

View File

@ -695,12 +695,12 @@ void Button::SetMouseClickEnabled(MouseCode code,bool state)
if(state)
{
//set bit to 1
_mouseClickMask|=1<<((int)(code+1));
_mouseClickMask|=MouseButtonBit(code);
}
else
{
//set bit to 0
_mouseClickMask&=~(1<<((int)(code+1)));
_mouseClickMask&=~MouseButtonBit(code);
}
}
@ -709,7 +709,7 @@ void Button::SetMouseClickEnabled(MouseCode code,bool state)
//-----------------------------------------------------------------------------
bool Button::IsMouseClickEnabled(MouseCode code)
{
if(_mouseClickMask&(1<<((int)(code+1))))
if(_mouseClickMask&MouseButtonBit(code))
{
return true;
}