CmRenderWindowManager.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #pragma once
  2. #include "CmPrerequisites.h"
  3. #include "CmModule.h"
  4. #include "CmRenderWindow.h"
  5. #include <boost/signals.hpp>
  6. namespace CamelotFramework
  7. {
  8. class CM_EXPORT RenderWindowManager : public Module<RenderWindowManager>
  9. {
  10. public:
  11. RenderWindowManager();
  12. /**
  13. * @brief Creates a new rendering window.
  14. */
  15. RenderWindowPtr create(RENDER_WINDOW_DESC& desc, RenderWindowPtr parentWindow);
  16. /**
  17. * @brief Called once per frame. Dispatches events. Internal method.
  18. */
  19. void update();
  20. Vector<RenderWindow*>::type getRenderWindows() const;
  21. boost::signal<void(RenderWindow&)> onFocusGained;
  22. boost::signal<void(RenderWindow&)> onFocusLost;
  23. protected:
  24. friend class RenderWindow;
  25. CM_MUTEX(mWindowMutex);
  26. Vector<RenderWindow*>::type mCreatedWindows;
  27. RenderWindow* mWindowInFocus;
  28. RenderWindow* mNewWindowInFocus;
  29. Vector<RenderWindow*>::type mMovedOrResizedWindows;
  30. virtual RenderWindowPtr createImpl(RENDER_WINDOW_DESC& desc, RenderWindowPtr parentWindow) = 0;
  31. void windowDestroyed(RenderWindow* window);
  32. void windowFocusReceived(RenderWindow* window);
  33. void windowFocusLost(RenderWindow* window);
  34. void windowMovedOrResized(RenderWindow* window);
  35. };
  36. }