BsShortcutManager.cpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include "BsShortcutManager.h"
  2. #include "BsInput.h"
  3. using namespace std::placeholders;
  4. namespace BansheeEngine
  5. {
  6. ShortcutManager::ShortcutManager()
  7. {
  8. mOnButtonDownConn = Input::instance().onButtonDown.connect(std::bind(&ShortcutManager::onButtonDown, this, _1));
  9. }
  10. ShortcutManager::~ShortcutManager()
  11. {
  12. mOnButtonDownConn.disconnect();
  13. }
  14. void ShortcutManager::addShortcut(const ShortcutKey& key, std::function<void()> callback)
  15. {
  16. mShortcuts[key] = callback;
  17. }
  18. void ShortcutManager::removeShortcut(const ShortcutKey& key)
  19. {
  20. mShortcuts.erase(key);
  21. }
  22. void ShortcutManager::onButtonDown(const ButtonEvent& event)
  23. {
  24. UINT32 modifiers = 0;
  25. if (Input::instance().isButtonHeld(BC_LSHIFT) || Input::instance().isButtonHeld(BC_RSHIFT))
  26. modifiers |= (UINT32)ButtonModifier::Shift;
  27. if (Input::instance().isButtonHeld(BC_LCONTROL) || Input::instance().isButtonHeld(BC_RCONTROL))
  28. modifiers |= (UINT32)ButtonModifier::Ctrl;
  29. if (Input::instance().isButtonHeld(BC_LMENU) || Input::instance().isButtonHeld(BC_RMENU))
  30. modifiers |= (UINT32)ButtonModifier::Alt;
  31. ShortcutKey searchKey((ButtonModifier)modifiers, event.buttonCode);
  32. auto iterFind = mShortcuts.find(searchKey);
  33. if (iterFind != mShortcuts.end())
  34. {
  35. if (iterFind->second != nullptr)
  36. iterFind->second();
  37. }
  38. }
  39. }