BsShortcutManager.cpp 1.6 KB

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