GlfwWindow.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "WindowListener.hpp"
4 #include "Window.hpp"
5 #include "../OpenGL/RenderTarget.hpp"
7 #include <optional>
8 
9 class GLFWwindow;
10 
11 namespace iv
12 {
13 
15 {
16 public:
20 };
21 
25 class GlfwWindow : public Window
26 {
27 public:
28  GlfwWindow( std::string const & window_title );
29  ~GlfwWindow();
30 
31  void loop();
32 
33  virtual void set_listener( WindowListener * listener ) override;
34  virtual RenderTarget::Geometry geometry() override;
35  virtual RenderTarget * render_target() override;
36  virtual bool gpu_enabled() override;
37 
38  // InputSource
39  virtual int2 input_position( Input::Key key, int device_id ) override;
40  virtual float input_value( Input::Key key, int device_id ) override;
41  virtual unsigned input_character() override;
42 
43  // window focus and geometry
44  static void S_FocusCallback( GLFWwindow * window, int focused );
45  void FocusCallback( int focused );
46 
47  static void S_ContentScaleCallback( GLFWwindow * window, float xscale, float yscale );
48  void ContentScaleCallback( float xscale, float yscale );
49 
50  static void S_SizeCallback( GLFWwindow * window, int width, int height );
51  void SizeCallback( int width, int height );
52 
53  static void S_FBSizeCallback( GLFWwindow * window, int width, int height );
54  void FBSizeCallback( int width, int height );
55 
56  // keyboard
57  static void S_KeyCallback( GLFWwindow * window, int key, int scancode, int action, int mods );
58  void KeyCallback( int key, int scancode, int action, int mods );
59 
60  // mouse
61  static void S_MouseButtonCallback( GLFWwindow * window, int button, int action, int mods );
62  void MouseButtonCallback( int button, int action, int mods );
63 
64  static void S_ScrollCallback( GLFWwindow * window, double xoffset, double yoffset );
65  void ScrollCallback( double xoffset, double yoffset );
66 
67  static void S_CharCallback( GLFWwindow * window, unsigned int codepoint );
68  void CharCallback( unsigned int codepoint );
69 
70 private:
71  std::optional< Input::Key > KeyboardKey_GlfwToIvorium( int key );
72  std::optional< Input::Key > MouseButton_GlfwToIvorium( int button );
73 
74  void render();
75 
76 private:
77  //--- core members ---
78  GLFWwindow * window;
79  WindowListener * listener;
80 
81  GlfwRenderTarget _render_target;
82 
83  //--- partial states ---
84  double _time_last;
85 
86  bool _focused;
87  unsigned _current_character;
88 
89  double _floating_fps;
90 };
91 
92 }