mirror of
https://github.com/SFML/SFML.git
synced 2025-01-19 15:55:13 +08:00
Make Mouse::Button and Mouse::Wheel scoped enumerations
This commit is contained in:
parent
ebf190b660
commit
3fb0ffce51
@ -46,32 +46,33 @@ namespace Mouse
|
|||||||
/// \brief Mouse buttons
|
/// \brief Mouse buttons
|
||||||
///
|
///
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
enum Button
|
enum class Button
|
||||||
{
|
{
|
||||||
Left, //!< The left mouse button
|
Left, //!< The left mouse button
|
||||||
Right, //!< The right mouse button
|
Right, //!< The right mouse button
|
||||||
Middle, //!< The middle (wheel) mouse button
|
Middle, //!< The middle (wheel) mouse button
|
||||||
XButton1, //!< The first extra mouse button
|
XButton1, //!< The first extra mouse button
|
||||||
XButton2, //!< The second extra mouse button
|
XButton2 //!< The second extra mouse button
|
||||||
|
|
||||||
ButtonCount //!< Keep last -- the total number of mouse buttons
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// NOLINTNEXTLINE(readability-identifier-naming)
|
||||||
|
static constexpr unsigned int ButtonCount{5}; //!< The total number of mouse buttons
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
/// \brief Mouse wheels
|
/// \brief Mouse wheels
|
||||||
///
|
///
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
enum Wheel
|
enum class Wheel
|
||||||
{
|
{
|
||||||
VerticalWheel, //!< The vertical mouse wheel
|
Vertical, //!< The vertical mouse wheel
|
||||||
HorizontalWheel //!< The horizontal mouse wheel
|
Horizontal //!< The horizontal mouse wheel
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
/// \brief Check if a mouse button is pressed
|
/// \brief Check if a mouse button is pressed
|
||||||
///
|
///
|
||||||
/// \warning Checking the state of buttons Mouse::XButton1 and
|
/// \warning Checking the state of buttons Mouse::Button::XButton1 and
|
||||||
/// Mouse::XButton2 is not supported on Linux with X11.
|
/// Mouse::Button::XButton2 is not supported on Linux with X11.
|
||||||
///
|
///
|
||||||
/// \param button Button to check
|
/// \param button Button to check
|
||||||
///
|
///
|
||||||
@ -157,7 +158,7 @@ SFML_WINDOW_API void setPosition(const Vector2i& position, const WindowBase& rel
|
|||||||
///
|
///
|
||||||
/// Usage example:
|
/// Usage example:
|
||||||
/// \code
|
/// \code
|
||||||
/// if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
|
/// if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Left))
|
||||||
/// {
|
/// {
|
||||||
/// // left click...
|
/// // left click...
|
||||||
/// }
|
/// }
|
||||||
|
@ -171,7 +171,7 @@ bool isMouseButtonPressed(Mouse::Button button)
|
|||||||
ActivityStates& states = getActivity();
|
ActivityStates& states = getActivity();
|
||||||
const std::lock_guard lock(states.mutex);
|
const std::lock_guard lock(states.mutex);
|
||||||
|
|
||||||
return states.isButtonPressed[button];
|
return states.isButtonPressed[static_cast<int>(button)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -393,7 +393,7 @@ int WindowImplAndroid::processScrollEvent(AInputEvent* inputEvent, ActivityState
|
|||||||
// Create and send our mouse wheel event
|
// Create and send our mouse wheel event
|
||||||
Event event;
|
Event event;
|
||||||
event.type = Event::MouseWheelScrolled;
|
event.type = Event::MouseWheelScrolled;
|
||||||
event.mouseWheelScroll.wheel = Mouse::VerticalWheel;
|
event.mouseWheelScroll.wheel = Mouse::Wheel::Vertical;
|
||||||
event.mouseWheelScroll.delta = static_cast<float>(delta);
|
event.mouseWheelScroll.delta = static_cast<float>(delta);
|
||||||
event.mouseWheelScroll.x = static_cast<int>(AMotionEvent_getX(inputEvent, 0));
|
event.mouseWheelScroll.x = static_cast<int>(AMotionEvent_getX(inputEvent, 0));
|
||||||
event.mouseWheelScroll.y = static_cast<int>(AMotionEvent_getY(inputEvent, 0));
|
event.mouseWheelScroll.y = static_cast<int>(AMotionEvent_getY(inputEvent, 0));
|
||||||
@ -539,7 +539,7 @@ int WindowImplAndroid::processPointerEvent(bool isDown, AInputEvent* inputEvent,
|
|||||||
event.mouseButton.x = x;
|
event.mouseButton.x = x;
|
||||||
event.mouseButton.y = y;
|
event.mouseButton.y = y;
|
||||||
|
|
||||||
if (id >= 0 && id < Mouse::ButtonCount)
|
if (id >= 0 && id < static_cast<int>(Mouse::ButtonCount))
|
||||||
states.isButtonPressed[id] = true;
|
states.isButtonPressed[id] = true;
|
||||||
}
|
}
|
||||||
else if (static_cast<unsigned int>(device) & AINPUT_SOURCE_TOUCHSCREEN)
|
else if (static_cast<unsigned int>(device) & AINPUT_SOURCE_TOUCHSCREEN)
|
||||||
@ -561,7 +561,7 @@ int WindowImplAndroid::processPointerEvent(bool isDown, AInputEvent* inputEvent,
|
|||||||
event.mouseButton.x = x;
|
event.mouseButton.x = x;
|
||||||
event.mouseButton.y = y;
|
event.mouseButton.y = y;
|
||||||
|
|
||||||
if (id >= 0 && id < Mouse::ButtonCount)
|
if (id >= 0 && id < static_cast<int>(Mouse::ButtonCount))
|
||||||
states.isButtonPressed[id] = false;
|
states.isButtonPressed[id] = false;
|
||||||
}
|
}
|
||||||
else if (static_cast<std::uint32_t>(device) & AINPUT_SOURCE_TOUCHSCREEN)
|
else if (static_cast<std::uint32_t>(device) & AINPUT_SOURCE_TOUCHSCREEN)
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
#include <optional>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
@ -165,23 +166,23 @@ void initFileDescriptors()
|
|||||||
std::atexit(uninitFileDescriptors);
|
std::atexit(uninitFileDescriptors);
|
||||||
}
|
}
|
||||||
|
|
||||||
sf::Mouse::Button toMouseButton(int code)
|
std::optional<sf::Mouse::Button> toMouseButton(int code)
|
||||||
{
|
{
|
||||||
switch (code)
|
switch (code)
|
||||||
{
|
{
|
||||||
case BTN_LEFT:
|
case BTN_LEFT:
|
||||||
return sf::Mouse::Left;
|
return sf::Mouse::Button::Left;
|
||||||
case BTN_RIGHT:
|
case BTN_RIGHT:
|
||||||
return sf::Mouse::Right;
|
return sf::Mouse::Button::Right;
|
||||||
case BTN_MIDDLE:
|
case BTN_MIDDLE:
|
||||||
return sf::Mouse::Middle;
|
return sf::Mouse::Button::Middle;
|
||||||
case BTN_SIDE:
|
case BTN_SIDE:
|
||||||
return sf::Mouse::XButton1;
|
return sf::Mouse::Button::XButton1;
|
||||||
case BTN_EXTRA:
|
case BTN_EXTRA:
|
||||||
return sf::Mouse::XButton2;
|
return sf::Mouse::Button::XButton2;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return sf::Mouse::ButtonCount;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -384,15 +385,14 @@ bool eventProcess(sf::Event& event)
|
|||||||
{
|
{
|
||||||
if (inputEvent.type == EV_KEY)
|
if (inputEvent.type == EV_KEY)
|
||||||
{
|
{
|
||||||
const sf::Mouse::Button mb = toMouseButton(inputEvent.code);
|
if (const std::optional<sf::Mouse::Button> mb = toMouseButton(inputEvent.code))
|
||||||
if (mb != sf::Mouse::ButtonCount)
|
|
||||||
{
|
{
|
||||||
event.type = inputEvent.value ? sf::Event::MouseButtonPressed : sf::Event::MouseButtonReleased;
|
event.type = inputEvent.value ? sf::Event::MouseButtonPressed : sf::Event::MouseButtonReleased;
|
||||||
event.mouseButton.button = mb;
|
event.mouseButton.button = *mb;
|
||||||
event.mouseButton.x = mousePos.x;
|
event.mouseButton.x = mousePos.x;
|
||||||
event.mouseButton.y = mousePos.y;
|
event.mouseButton.y = mousePos.y;
|
||||||
|
|
||||||
mouseMap[mb] = inputEvent.value;
|
mouseMap[static_cast<std::size_t>(*mb)] = inputEvent.value;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -628,11 +628,11 @@ void setVirtualKeyboardVisible(bool /*visible*/)
|
|||||||
bool isMouseButtonPressed(Mouse::Button button)
|
bool isMouseButtonPressed(Mouse::Button button)
|
||||||
{
|
{
|
||||||
const std::lock_guard lock(inputMutex);
|
const std::lock_guard lock(inputMutex);
|
||||||
if ((button < 0) || (button >= static_cast<int>(mouseMap.size())))
|
if ((static_cast<int>(button) < 0) || (static_cast<int>(button) >= static_cast<int>(mouseMap.size())))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
update();
|
update();
|
||||||
return mouseMap[button];
|
return mouseMap[static_cast<std::size_t>(button)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -103,15 +103,15 @@ bool isMouseButtonPressed(Mouse::Button button)
|
|||||||
|
|
||||||
// Buttons 4 and 5 are the vertical wheel and 6 and 7 the horizontal wheel.
|
// Buttons 4 and 5 are the vertical wheel and 6 and 7 the horizontal wheel.
|
||||||
// There is no mask for buttons 8 and 9, so checking the state of buttons
|
// There is no mask for buttons 8 and 9, so checking the state of buttons
|
||||||
// Mouse::XButton1 and Mouse::XButton2 is not supported.
|
// Mouse::Button::XButton1 and Mouse::Button::XButton2 is not supported.
|
||||||
// clang-format off
|
// clang-format off
|
||||||
switch (button)
|
switch (button)
|
||||||
{
|
{
|
||||||
case Mouse::Left: return buttons & Button1Mask;
|
case Mouse::Button::Left: return buttons & Button1Mask;
|
||||||
case Mouse::Right: return buttons & Button3Mask;
|
case Mouse::Button::Right: return buttons & Button3Mask;
|
||||||
case Mouse::Middle: return buttons & Button2Mask;
|
case Mouse::Button::Middle: return buttons & Button2Mask;
|
||||||
case Mouse::XButton1: return false; // not supported by X
|
case Mouse::Button::XButton1: return false; // not supported by X
|
||||||
case Mouse::XButton2: return false; // not supported by X
|
case Mouse::Button::XButton2: return false; // not supported by X
|
||||||
default: return false;
|
default: return false;
|
||||||
}
|
}
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
@ -1937,11 +1937,11 @@ bool WindowImplX11::processEvent(XEvent& windowEvent)
|
|||||||
// clang-format off
|
// clang-format off
|
||||||
switch(button)
|
switch(button)
|
||||||
{
|
{
|
||||||
case Button1: event.mouseButton.button = Mouse::Left; break;
|
case Button1: event.mouseButton.button = Mouse::Button::Left; break;
|
||||||
case Button2: event.mouseButton.button = Mouse::Middle; break;
|
case Button2: event.mouseButton.button = Mouse::Button::Middle; break;
|
||||||
case Button3: event.mouseButton.button = Mouse::Right; break;
|
case Button3: event.mouseButton.button = Mouse::Button::Right; break;
|
||||||
case 8: event.mouseButton.button = Mouse::XButton1; break;
|
case 8: event.mouseButton.button = Mouse::Button::XButton1; break;
|
||||||
case 9: event.mouseButton.button = Mouse::XButton2; break;
|
case 9: event.mouseButton.button = Mouse::Button::XButton2; break;
|
||||||
}
|
}
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
@ -1966,19 +1966,19 @@ bool WindowImplX11::processEvent(XEvent& windowEvent)
|
|||||||
switch (button)
|
switch (button)
|
||||||
{
|
{
|
||||||
case Button1:
|
case Button1:
|
||||||
event.mouseButton.button = Mouse::Left;
|
event.mouseButton.button = Mouse::Button::Left;
|
||||||
break;
|
break;
|
||||||
case Button2:
|
case Button2:
|
||||||
event.mouseButton.button = Mouse::Middle;
|
event.mouseButton.button = Mouse::Button::Middle;
|
||||||
break;
|
break;
|
||||||
case Button3:
|
case Button3:
|
||||||
event.mouseButton.button = Mouse::Right;
|
event.mouseButton.button = Mouse::Button::Right;
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
event.mouseButton.button = Mouse::XButton1;
|
event.mouseButton.button = Mouse::Button::XButton1;
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 9:
|
||||||
event.mouseButton.button = Mouse::XButton2;
|
event.mouseButton.button = Mouse::Button::XButton2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
pushEvent(event);
|
pushEvent(event);
|
||||||
@ -1988,7 +1988,7 @@ bool WindowImplX11::processEvent(XEvent& windowEvent)
|
|||||||
Event event;
|
Event event;
|
||||||
|
|
||||||
event.type = Event::MouseWheelScrolled;
|
event.type = Event::MouseWheelScrolled;
|
||||||
event.mouseWheelScroll.wheel = Mouse::VerticalWheel;
|
event.mouseWheelScroll.wheel = Mouse::Wheel::Vertical;
|
||||||
event.mouseWheelScroll.delta = (button == Button4) ? 1 : -1;
|
event.mouseWheelScroll.delta = (button == Button4) ? 1 : -1;
|
||||||
event.mouseWheelScroll.x = windowEvent.xbutton.x;
|
event.mouseWheelScroll.x = windowEvent.xbutton.x;
|
||||||
event.mouseWheelScroll.y = windowEvent.xbutton.y;
|
event.mouseWheelScroll.y = windowEvent.xbutton.y;
|
||||||
@ -1998,7 +1998,7 @@ bool WindowImplX11::processEvent(XEvent& windowEvent)
|
|||||||
{
|
{
|
||||||
Event event;
|
Event event;
|
||||||
event.type = Event::MouseWheelScrolled;
|
event.type = Event::MouseWheelScrolled;
|
||||||
event.mouseWheelScroll.wheel = Mouse::HorizontalWheel;
|
event.mouseWheelScroll.wheel = Mouse::Wheel::Horizontal;
|
||||||
event.mouseWheelScroll.delta = (button == 6) ? 1 : -1;
|
event.mouseWheelScroll.delta = (button == 6) ? 1 : -1;
|
||||||
event.mouseWheelScroll.x = windowEvent.xbutton.x;
|
event.mouseWheelScroll.x = windowEvent.xbutton.x;
|
||||||
event.mouseWheelScroll.y = windowEvent.xbutton.y;
|
event.mouseWheelScroll.y = windowEvent.xbutton.y;
|
||||||
|
@ -622,19 +622,19 @@ bool isMouseButtonPressed(Mouse::Button button)
|
|||||||
int virtualKey = 0;
|
int virtualKey = 0;
|
||||||
switch (button)
|
switch (button)
|
||||||
{
|
{
|
||||||
case Mouse::Left:
|
case Mouse::Button::Left:
|
||||||
virtualKey = GetSystemMetrics(SM_SWAPBUTTON) ? VK_RBUTTON : VK_LBUTTON;
|
virtualKey = GetSystemMetrics(SM_SWAPBUTTON) ? VK_RBUTTON : VK_LBUTTON;
|
||||||
break;
|
break;
|
||||||
case Mouse::Right:
|
case Mouse::Button::Right:
|
||||||
virtualKey = GetSystemMetrics(SM_SWAPBUTTON) ? VK_LBUTTON : VK_RBUTTON;
|
virtualKey = GetSystemMetrics(SM_SWAPBUTTON) ? VK_LBUTTON : VK_RBUTTON;
|
||||||
break;
|
break;
|
||||||
case Mouse::Middle:
|
case Mouse::Button::Middle:
|
||||||
virtualKey = VK_MBUTTON;
|
virtualKey = VK_MBUTTON;
|
||||||
break;
|
break;
|
||||||
case Mouse::XButton1:
|
case Mouse::Button::XButton1:
|
||||||
virtualKey = VK_XBUTTON1;
|
virtualKey = VK_XBUTTON1;
|
||||||
break;
|
break;
|
||||||
case Mouse::XButton2:
|
case Mouse::Button::XButton2:
|
||||||
virtualKey = VK_XBUTTON2;
|
virtualKey = VK_XBUTTON2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -921,7 +921,7 @@ void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
Event event;
|
Event event;
|
||||||
|
|
||||||
event.type = Event::MouseWheelScrolled;
|
event.type = Event::MouseWheelScrolled;
|
||||||
event.mouseWheelScroll.wheel = Mouse::VerticalWheel;
|
event.mouseWheelScroll.wheel = Mouse::Wheel::Vertical;
|
||||||
event.mouseWheelScroll.delta = static_cast<float>(delta) / 120.f;
|
event.mouseWheelScroll.delta = static_cast<float>(delta) / 120.f;
|
||||||
event.mouseWheelScroll.x = position.x;
|
event.mouseWheelScroll.x = position.x;
|
||||||
event.mouseWheelScroll.y = position.y;
|
event.mouseWheelScroll.y = position.y;
|
||||||
@ -942,7 +942,7 @@ void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
Event event;
|
Event event;
|
||||||
event.type = Event::MouseWheelScrolled;
|
event.type = Event::MouseWheelScrolled;
|
||||||
event.mouseWheelScroll.wheel = Mouse::HorizontalWheel;
|
event.mouseWheelScroll.wheel = Mouse::Wheel::Horizontal;
|
||||||
event.mouseWheelScroll.delta = -static_cast<float>(delta) / 120.f;
|
event.mouseWheelScroll.delta = -static_cast<float>(delta) / 120.f;
|
||||||
event.mouseWheelScroll.x = position.x;
|
event.mouseWheelScroll.x = position.x;
|
||||||
event.mouseWheelScroll.y = position.y;
|
event.mouseWheelScroll.y = position.y;
|
||||||
@ -955,7 +955,7 @@ void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
{
|
{
|
||||||
Event event;
|
Event event;
|
||||||
event.type = Event::MouseButtonPressed;
|
event.type = Event::MouseButtonPressed;
|
||||||
event.mouseButton.button = Mouse::Left;
|
event.mouseButton.button = Mouse::Button::Left;
|
||||||
event.mouseButton.x = static_cast<std::int16_t>(LOWORD(lParam));
|
event.mouseButton.x = static_cast<std::int16_t>(LOWORD(lParam));
|
||||||
event.mouseButton.y = static_cast<std::int16_t>(HIWORD(lParam));
|
event.mouseButton.y = static_cast<std::int16_t>(HIWORD(lParam));
|
||||||
pushEvent(event);
|
pushEvent(event);
|
||||||
@ -967,7 +967,7 @@ void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
{
|
{
|
||||||
Event event;
|
Event event;
|
||||||
event.type = Event::MouseButtonReleased;
|
event.type = Event::MouseButtonReleased;
|
||||||
event.mouseButton.button = Mouse::Left;
|
event.mouseButton.button = Mouse::Button::Left;
|
||||||
event.mouseButton.x = static_cast<std::int16_t>(LOWORD(lParam));
|
event.mouseButton.x = static_cast<std::int16_t>(LOWORD(lParam));
|
||||||
event.mouseButton.y = static_cast<std::int16_t>(HIWORD(lParam));
|
event.mouseButton.y = static_cast<std::int16_t>(HIWORD(lParam));
|
||||||
pushEvent(event);
|
pushEvent(event);
|
||||||
@ -979,7 +979,7 @@ void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
{
|
{
|
||||||
Event event;
|
Event event;
|
||||||
event.type = Event::MouseButtonPressed;
|
event.type = Event::MouseButtonPressed;
|
||||||
event.mouseButton.button = Mouse::Right;
|
event.mouseButton.button = Mouse::Button::Right;
|
||||||
event.mouseButton.x = static_cast<std::int16_t>(LOWORD(lParam));
|
event.mouseButton.x = static_cast<std::int16_t>(LOWORD(lParam));
|
||||||
event.mouseButton.y = static_cast<std::int16_t>(HIWORD(lParam));
|
event.mouseButton.y = static_cast<std::int16_t>(HIWORD(lParam));
|
||||||
pushEvent(event);
|
pushEvent(event);
|
||||||
@ -991,7 +991,7 @@ void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
{
|
{
|
||||||
Event event;
|
Event event;
|
||||||
event.type = Event::MouseButtonReleased;
|
event.type = Event::MouseButtonReleased;
|
||||||
event.mouseButton.button = Mouse::Right;
|
event.mouseButton.button = Mouse::Button::Right;
|
||||||
event.mouseButton.x = static_cast<std::int16_t>(LOWORD(lParam));
|
event.mouseButton.x = static_cast<std::int16_t>(LOWORD(lParam));
|
||||||
event.mouseButton.y = static_cast<std::int16_t>(HIWORD(lParam));
|
event.mouseButton.y = static_cast<std::int16_t>(HIWORD(lParam));
|
||||||
pushEvent(event);
|
pushEvent(event);
|
||||||
@ -1003,7 +1003,7 @@ void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
{
|
{
|
||||||
Event event;
|
Event event;
|
||||||
event.type = Event::MouseButtonPressed;
|
event.type = Event::MouseButtonPressed;
|
||||||
event.mouseButton.button = Mouse::Middle;
|
event.mouseButton.button = Mouse::Button::Middle;
|
||||||
event.mouseButton.x = static_cast<std::int16_t>(LOWORD(lParam));
|
event.mouseButton.x = static_cast<std::int16_t>(LOWORD(lParam));
|
||||||
event.mouseButton.y = static_cast<std::int16_t>(HIWORD(lParam));
|
event.mouseButton.y = static_cast<std::int16_t>(HIWORD(lParam));
|
||||||
pushEvent(event);
|
pushEvent(event);
|
||||||
@ -1015,7 +1015,7 @@ void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
{
|
{
|
||||||
Event event;
|
Event event;
|
||||||
event.type = Event::MouseButtonReleased;
|
event.type = Event::MouseButtonReleased;
|
||||||
event.mouseButton.button = Mouse::Middle;
|
event.mouseButton.button = Mouse::Button::Middle;
|
||||||
event.mouseButton.x = static_cast<std::int16_t>(LOWORD(lParam));
|
event.mouseButton.x = static_cast<std::int16_t>(LOWORD(lParam));
|
||||||
event.mouseButton.y = static_cast<std::int16_t>(HIWORD(lParam));
|
event.mouseButton.y = static_cast<std::int16_t>(HIWORD(lParam));
|
||||||
pushEvent(event);
|
pushEvent(event);
|
||||||
@ -1027,7 +1027,7 @@ void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
{
|
{
|
||||||
Event event;
|
Event event;
|
||||||
event.type = Event::MouseButtonPressed;
|
event.type = Event::MouseButtonPressed;
|
||||||
event.mouseButton.button = HIWORD(wParam) == XBUTTON1 ? Mouse::XButton1 : Mouse::XButton2;
|
event.mouseButton.button = HIWORD(wParam) == XBUTTON1 ? Mouse::Button::XButton1 : Mouse::Button::XButton2;
|
||||||
event.mouseButton.x = static_cast<std::int16_t>(LOWORD(lParam));
|
event.mouseButton.x = static_cast<std::int16_t>(LOWORD(lParam));
|
||||||
event.mouseButton.y = static_cast<std::int16_t>(HIWORD(lParam));
|
event.mouseButton.y = static_cast<std::int16_t>(HIWORD(lParam));
|
||||||
pushEvent(event);
|
pushEvent(event);
|
||||||
@ -1039,7 +1039,7 @@ void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
{
|
{
|
||||||
Event event;
|
Event event;
|
||||||
event.type = Event::MouseButtonReleased;
|
event.type = Event::MouseButtonReleased;
|
||||||
event.mouseButton.button = HIWORD(wParam) == XBUTTON1 ? Mouse::XButton1 : Mouse::XButton2;
|
event.mouseButton.button = HIWORD(wParam) == XBUTTON1 ? Mouse::Button::XButton1 : Mouse::Button::XButton2;
|
||||||
event.mouseButton.x = static_cast<std::int16_t>(LOWORD(lParam));
|
event.mouseButton.x = static_cast<std::int16_t>(LOWORD(lParam));
|
||||||
event.mouseButton.y = static_cast<std::int16_t>(HIWORD(lParam));
|
event.mouseButton.y = static_cast<std::int16_t>(HIWORD(lParam));
|
||||||
pushEvent(event);
|
pushEvent(event);
|
||||||
|
@ -167,7 +167,7 @@ bool isMouseButtonPressed(Mouse::Button button)
|
|||||||
{
|
{
|
||||||
const AutoreleasePool pool;
|
const AutoreleasePool pool;
|
||||||
const NSUInteger state = [NSEvent pressedMouseButtons];
|
const NSUInteger state = [NSEvent pressedMouseButtons];
|
||||||
const NSUInteger flag = 1 << button;
|
const NSUInteger flag = 1 << static_cast<int>(button);
|
||||||
return (state & flag) != 0;
|
return (state & flag) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,14 +131,14 @@
|
|||||||
////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////
|
||||||
- (void)handleMouseDown:(NSEvent*)theEvent
|
- (void)handleMouseDown:(NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
sf::Mouse::Button button = [SFOpenGLView mouseButtonFromEvent:theEvent];
|
const std::optional<sf::Mouse::Button> button = [SFOpenGLView mouseButtonFromEvent:theEvent];
|
||||||
|
|
||||||
if (m_requester != nil)
|
if (m_requester != nil)
|
||||||
{
|
{
|
||||||
NSPoint loc = [self cursorPositionFromEvent:theEvent];
|
NSPoint loc = [self cursorPositionFromEvent:theEvent];
|
||||||
|
|
||||||
if (button != sf::Mouse::ButtonCount)
|
if (button)
|
||||||
m_requester->mouseDownAt(button, static_cast<int>(loc.x), static_cast<int>(loc.y));
|
m_requester->mouseDownAt(*button, static_cast<int>(loc.x), static_cast<int>(loc.y));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,14 +176,14 @@
|
|||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
- (void)handleMouseUp:(NSEvent*)theEvent
|
- (void)handleMouseUp:(NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
sf::Mouse::Button button = [SFOpenGLView mouseButtonFromEvent:theEvent];
|
const std::optional<sf::Mouse::Button> button = [SFOpenGLView mouseButtonFromEvent:theEvent];
|
||||||
|
|
||||||
if (m_requester != nil)
|
if (m_requester != nil)
|
||||||
{
|
{
|
||||||
NSPoint loc = [self cursorPositionFromEvent:theEvent];
|
NSPoint loc = [self cursorPositionFromEvent:theEvent];
|
||||||
|
|
||||||
if (button != sf::Mouse::ButtonCount)
|
if (button)
|
||||||
m_requester->mouseUpAt(button, static_cast<int>(loc.x), static_cast<int>(loc.y));
|
m_requester->mouseUpAt(*button, static_cast<int>(loc.x), static_cast<int>(loc.y));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -407,22 +407,22 @@
|
|||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////
|
||||||
+ (sf::Mouse::Button)mouseButtonFromEvent:(NSEvent*)event
|
+ (std::optional<sf::Mouse::Button>)mouseButtonFromEvent:(NSEvent*)event
|
||||||
{
|
{
|
||||||
switch ([event buttonNumber])
|
switch ([event buttonNumber])
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
return sf::Mouse::Left;
|
return sf::Mouse::Button::Left;
|
||||||
case 1:
|
case 1:
|
||||||
return sf::Mouse::Right;
|
return sf::Mouse::Button::Right;
|
||||||
case 2:
|
case 2:
|
||||||
return sf::Mouse::Middle;
|
return sf::Mouse::Button::Middle;
|
||||||
case 3:
|
case 3:
|
||||||
return sf::Mouse::XButton1;
|
return sf::Mouse::Button::XButton1;
|
||||||
case 4:
|
case 4:
|
||||||
return sf::Mouse::XButton2;
|
return sf::Mouse::Button::XButton2;
|
||||||
default:
|
default:
|
||||||
return sf::Mouse::ButtonCount; // Never happens! (hopefully)
|
return std::nullopt; // Never happens! (hopefully)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#import <SFML/Window/macOS/SFOpenGLView.h>
|
#import <SFML/Window/macOS/SFOpenGLView.h>
|
||||||
|
|
||||||
#import <AppKit/AppKit.h>
|
#import <AppKit/AppKit.h>
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
@ -98,13 +99,13 @@
|
|||||||
- (CGDirectDisplayID)displayId;
|
- (CGDirectDisplayID)displayId;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
/// \brief Convert the NSEvent mouse button type to SFML type
|
/// \brief Try to convert the NSEvent mouse button type to SFML type
|
||||||
///
|
///
|
||||||
/// \param event a mouse button event
|
/// \param event a mouse button event
|
||||||
///
|
///
|
||||||
/// \return Left, Right, ..., or ButtonCount if the button is unknown
|
/// \return Left, Right, ..., or std::nullopt if the button is unknown
|
||||||
///
|
///
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
+ (sf::Mouse::Button)mouseButtonFromEvent:(NSEvent*)event;
|
+ (std::optional<sf::Mouse::Button>)mouseButtonFromEvent:(NSEvent*)event;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -298,7 +298,7 @@ void WindowImplCocoa::mouseWheelScrolledAt(float deltaX, float deltaY, int x, in
|
|||||||
Event event;
|
Event event;
|
||||||
|
|
||||||
event.type = Event::MouseWheelScrolled;
|
event.type = Event::MouseWheelScrolled;
|
||||||
event.mouseWheelScroll.wheel = Mouse::VerticalWheel;
|
event.mouseWheelScroll.wheel = Mouse::Wheel::Vertical;
|
||||||
event.mouseWheelScroll.delta = deltaY;
|
event.mouseWheelScroll.delta = deltaY;
|
||||||
event.mouseWheelScroll.x = x;
|
event.mouseWheelScroll.x = x;
|
||||||
event.mouseWheelScroll.y = y;
|
event.mouseWheelScroll.y = y;
|
||||||
@ -306,7 +306,7 @@ void WindowImplCocoa::mouseWheelScrolledAt(float deltaX, float deltaY, int x, in
|
|||||||
pushEvent(event);
|
pushEvent(event);
|
||||||
|
|
||||||
event.type = Event::MouseWheelScrolled;
|
event.type = Event::MouseWheelScrolled;
|
||||||
event.mouseWheelScroll.wheel = Mouse::HorizontalWheel;
|
event.mouseWheelScroll.wheel = Mouse::Wheel::Horizontal;
|
||||||
event.mouseWheelScroll.delta = deltaX;
|
event.mouseWheelScroll.delta = deltaX;
|
||||||
event.mouseWheelScroll.x = x;
|
event.mouseWheelScroll.x = x;
|
||||||
event.mouseWheelScroll.y = y;
|
event.mouseWheelScroll.y = y;
|
||||||
|
Loading…
Reference in New Issue
Block a user