Berserk
GlfwWindowManager.hpp
Go to the documentation of this file.
1 /**********************************************************************************/
2 /* This file is part of Berserk Engine project */
3 /* https://github.com/EgorOrachyov/Berserk */
4 /**********************************************************************************/
5 /* MIT License */
6 /* */
7 /* Copyright (c) 2018 - 2021 Egor Orachyov */
8 /* */
9 /* Permission is hereby granted, free of charge, to any person obtaining a copy */
10 /* of this software and associated documentation files (the "Software"), to deal */
11 /* in the Software without restriction, including without limitation the rights */
12 /* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell */
13 /* copies of the Software, and to permit persons to whom the Software is */
14 /* furnished to do so, subject to the following conditions: */
15 /* */
16 /* The above copyright notice and this permission notice shall be included in all */
17 /* copies or substantial portions of the Software. */
18 /* */
19 /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR */
20 /* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, */
21 /* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE */
22 /* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER */
23 /* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, */
24 /* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */
25 /* SOFTWARE. */
26 /**********************************************************************************/
27 
28 #ifndef BERSERK_GLFWWINDOWMANAGER_HPP
29 #define BERSERK_GLFWWINDOWMANAGER_HPP
30 
33 
34 #include <functional>
35 #include <memory>
36 #include <unordered_map>
37 
38 #include <GLFW/glfw3.h>
39 
41 
51 class GlfwWindowManager final : public WindowManager {
52 public:
53  using MakeContextCurrentFunc = std::function<void(const Ref<Window> &)>;
54  using SwapBuffersFunc = std::function<void(const Ref<Window> &)>;
55 
56  BRK_API GlfwWindowManager(bool vsync, bool clientApi);
57  BRK_API ~GlfwWindowManager() override;
58  BRK_API Ref<Window> CreateWindow(const StringName &name, const Size2i &size, const String &title) override;
60 
63 
64 private:
65  friend class Application;
66  BRK_API void PollEvents();
67  BRK_API void DispatchEvent(const Ref<Window> &window, EventWindow::Type type);
68  BRK_API Ref<Window> GetWindow(GLFWwindow *HND);
69 
70 private:
71  // Glfw Specifics
72  static void WindowCloseCallback(GLFWwindow *HND);
73  static void WindowResizedCallback(GLFWwindow *HND, int32 width, int32 height);
74  static void WindowContentScaleCallback(GLFWwindow *HND, float xScale, float yScale);
75  static void FramebufferSizeCallback(GLFWwindow *HND, int32 width, int32 height);
76  static void IconifyCallback(GLFWwindow *HND, int32 iconify);
77  static void MaximizeCallback(GLFWwindow *HND, int32 maximize);
78  static void PositionCallback(GLFWwindow *HND, int32 posX, int32 posY);
79  static void FocusCallback(GLFWwindow *HND, int32 focus);
80  static void ErrorCallback(int32 errorCode, const char *description);
81 
82 private:
84  std::shared_ptr<class GlfwInput> mInput;
86  Ref<Window> mPrimaryWindow;
88  std::unordered_map<StringName, Ref<Window>> mWindows;
90  std::unordered_map<GLFWwindow *, Ref<Window>> mWindowsByHND;
92  bool mClientApi = true;
93  bool mVsync = true;
94 };
95 
101 
102 #endif//BERSERK_GLFWWINDOWMANAGER_HPP
#define BRK_NS_END
Definition: Config.hpp:48
#define BRK_API
Definition: Config.hpp:32
std::int32_t int32
Definition: Typedefs.hpp:43
Game application main class.
Definition: Application.hpp:63
Type
Definition: EventWindow.hpp:51
Glfw window manager implementation.
Definition: GlfwWindowManager.hpp:51
BRK_API SwapBuffersFunc GetSwapBuffersFunc()
Definition: GlfwWindowManager.cpp:152
BRK_API ~GlfwWindowManager() override
Definition: GlfwWindowManager.cpp:80
BRK_API Ref< Window > CreateWindow(const StringName &name, const Size2i &size, const String &title) override
CreateFromImage new OS native rendering window.
Definition: GlfwWindowManager.cpp:95
BRK_API MakeContextCurrentFunc GetMakeContextCurrentFunc()
Definition: GlfwWindowManager.cpp:141
std::function< void(const Ref< Window > &)> MakeContextCurrentFunc
Definition: GlfwWindowManager.hpp:53
BRK_API Ref< Window > GetPrimaryWindow() override
Definition: GlfwWindowManager.cpp:137
std::function< void(const Ref< Window > &)> SwapBuffersFunc
Definition: GlfwWindowManager.hpp:54
BRK_API GlfwWindowManager(bool vsync, bool clientApi)
Definition: GlfwWindowManager.cpp:38
Cached shared utf-8 string id.
Definition: StringName.hpp:61
Utf-8 encoded std based default string class.
Manager for OS windows.
Definition: WindowManager.hpp:47
Definition: GLDevice.cpp:46