InputSourceMouse.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. * InputSourceMouse.cpp, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #include "StdInc.h"
  11. #include "InputSourceMouse.h"
  12. #include "../../lib/Point.h"
  13. #include "../gui/CGuiHandler.h"
  14. #include "../gui/EventDispatcher.h"
  15. #include "../gui/MouseButton.h"
  16. #include <SDL_events.h>
  17. void InputSourceMouse::handleEventMouseMotion(const SDL_MouseMotionEvent & motion)
  18. {
  19. GH.events().dispatchMouseMoved(Point(motion.x, motion.y));
  20. }
  21. void InputSourceMouse::handleEventMouseButtonDown(const SDL_MouseButtonEvent & button)
  22. {
  23. Point position(button.x, button.y);
  24. switch(button.button)
  25. {
  26. case SDL_BUTTON_LEFT:
  27. if(button.clicks > 1)
  28. GH.events().dispatchMouseDoubleClick(position);
  29. else
  30. GH.events().dispatchMouseButtonPressed(MouseButton::LEFT, position);
  31. break;
  32. case SDL_BUTTON_RIGHT:
  33. GH.events().dispatchMouseButtonPressed(MouseButton::RIGHT, position);
  34. break;
  35. case SDL_BUTTON_MIDDLE:
  36. GH.events().dispatchMouseButtonPressed(MouseButton::MIDDLE, position);
  37. break;
  38. }
  39. }
  40. void InputSourceMouse::handleEventMouseWheel(const SDL_MouseWheelEvent & wheel)
  41. {
  42. // SDL doesn't have the proper values for mouse positions on SDL_MOUSEWHEEL, refetch them
  43. int x = 0, y = 0;
  44. SDL_GetMouseState(&x, &y);
  45. GH.events().dispatchMouseScrolled(Point(wheel.x, wheel.y), Point(x, y));
  46. }
  47. void InputSourceMouse::handleEventMouseButtonUp(const SDL_MouseButtonEvent & button)
  48. {
  49. Point position(button.x, button.y);
  50. switch(button.button)
  51. {
  52. case SDL_BUTTON_LEFT:
  53. GH.events().dispatchMouseButtonReleased(MouseButton::LEFT, position);
  54. break;
  55. case SDL_BUTTON_RIGHT:
  56. GH.events().dispatchMouseButtonReleased(MouseButton::RIGHT, position);
  57. break;
  58. case SDL_BUTTON_MIDDLE:
  59. GH.events().dispatchMouseButtonReleased(MouseButton::MIDDLE, position);
  60. break;
  61. }
  62. }