WindowManager.cpp
Go to the documentation of this file.
2 #include <GLFW/glfw3.h>
3 
4 #include <unordered_map>
5 
6 #include "trace.hpp"
7 
8 using namespace quori_face;
9 
10 namespace
11 {
12  void onWindowClose(GLFWwindow *handle)
13  {
14  const auto window = WindowManager::ref().lookupByHandle(handle);
15  if (!window) return;
16  window->close();
17  }
18 
19  void onWindowResize(GLFWwindow* handle, int width, int height)
20  {
21  const auto window = WindowManager::ref().lookupByHandle(handle);
22  if (!window) return;
23  glViewport(0, 0, width, height);
24  }
25 }
26 
28 {
29 
30 }
31 
33 {
34 
35 }
36 
38 {
39  for (auto it = windows_.begin(); it != windows_.end(); ++it)
40  {
41  if (*it == window) return;
42  }
43 
44  QUORI_FACE_TRACE(glfwSetWindowCloseCallback(window->getHandle(), &onWindowClose));
45  QUORI_FACE_TRACE(glfwSetFramebufferSizeCallback(window->getHandle(), &onWindowResize));
46  windows_.push_back(window);
47 }
48 
50 {
51  for (auto it = windows_.begin(); it != windows_.end();)
52  {
53  if (*it == window)
54  {
55  QUORI_FACE_TRACE(glfwSetWindowCloseCallback((*it)->getHandle(), nullptr));
56  QUORI_FACE_TRACE(glfwSetFramebufferSizeCallback((*it)->getHandle(), nullptr));
57  it = windows_.erase(it);
58  continue;
59  }
60 
61  ++it;
62  }
63 }
64 
65 Window::Ptr WindowManager::lookupByHandle(const GLFWwindow *const handle) const
66 {
67  for (auto it = windows_.begin(); it != windows_.end(); ++it)
68  {
69  if ((*it)->getHandle() == handle) return *it;
70  }
71 
72  return nullptr;
73 }
74 
75 WindowManager::WindowList::iterator WindowManager::begin()
76 {
77  return windows_.begin();
78 }
79 
80 WindowManager::WindowList::iterator WindowManager::end()
81 {
82  return windows_.end();
83 }
84 
85 WindowManager::WindowList::const_iterator WindowManager::cbegin() const
86 {
87  return windows_.cbegin();
88 }
89 
90 WindowManager::WindowList::const_iterator WindowManager::cend() const
91 {
92  return windows_.cend();
93 }
94 
96 {
97  static WindowManager instance;
98  return instance;
99 }
quori_face::WindowManager::ref
static WindowManager & ref()
Definition: WindowManager.cpp:95
width
GLint GLsizei width
Definition: glcorearb.h:251
quori_face::WindowManager::detach
void detach(const Window::Ptr &window)
Definition: WindowManager.cpp:49
quori_face::WindowManager::~WindowManager
~WindowManager()
Definition: WindowManager.cpp:32
glViewport
#define glViewport
Definition: gl3w.h:1379
quori_face::WindowManager::end
WindowList::iterator end()
Definition: WindowManager.cpp:80
trace.hpp
height
GLint GLsizei GLsizei height
Definition: glcorearb.h:251
quori_face
Definition: Cache.hpp:9
WindowManager.hpp
QUORI_FACE_TRACE
#define QUORI_FACE_TRACE(stmt)
Definition: quori_face/trace.hpp:16
quori_face::WindowManager::lookupByHandle
Window::Ptr lookupByHandle(const GLFWwindow *const handle) const
Definition: WindowManager.cpp:65
quori_face::WindowManager::cbegin
WindowList::const_iterator cbegin() const
Definition: WindowManager.cpp:85
quori_face::WindowManager
Definition: WindowManager.hpp:15
quori_face::WindowManager::attach
void attach(const Window::Ptr &window)
Definition: WindowManager.cpp:37
quori_face::Window::Ptr
std::shared_ptr< Window > Ptr
Definition: Window.hpp:26
quori_face::WindowManager::windows_
WindowList windows_
Definition: WindowManager.hpp:91
quori_face::WindowManager::cend
WindowList::const_iterator cend() const
Definition: WindowManager.cpp:90
quori_face::WindowManager::begin
WindowList::iterator begin()
Definition: WindowManager.cpp:75
quori_face::WindowManager::WindowManager
WindowManager()
Definition: WindowManager.cpp:27


quori_face
Author(s):
autogenerated on Wed Mar 2 2022 00:53:20