Tatooine
window_notifier.h
Go to the documentation of this file.
1#ifndef TATOOINE_GL_WINDOW_NOTIFIER_H
2#define TATOOINE_GL_WINDOW_NOTIFIER_H
3//==============================================================================
4#include <vector>
5#include <tatooine/holder.h>
6#include "window_listener.h"
7//==============================================================================
8namespace tatooine::gl {
9//==============================================================================
10template <typename Event>
12 using holder<Event>::holder;
13 void on_resize(int width, int height) override {
14 this->get()(width, height);
15 }
16};
17// copy when having rvalue
18template <typename T>
20// keep reference when having lvalue
21template <typename T>
23//==============================================================================
24template <typename Event>
26 using holder<Event>::holder;
27 void on_key_pressed(key k) override {
28 this->get()(k);
29 }
30};
31// copy when having rvalue
32template <typename T>
34// keep reference when having lvalue
35template <typename T>
37//==============================================================================
38template <typename Event>
40 using holder<Event>::holder;
41 void on_key_pressed(key k) override {
42 this->get()(k);
43 }
44};
45// copy when having rvalue
46template <typename T>
48// keep reference when having lvalue
49template <typename T>
51//==============================================================================
52template <typename Event>
54 using holder<Event>::holder;
55 void on_button_pressed(button b) override {
56 this->get()(b);
57 }
58};
59// copy when having rvalue
60template <typename T>
62// keep reference when having lvalue
63template <typename T>
65//==============================================================================
66template <typename Event>
68 using holder<Event>::holder;
69 void on_button_released(button b) override {
70 this->get()(b);
71 }
72};
73// copy when having rvalue
74template <typename T>
76// keep reference when having lvalue
77template <typename T>
79//==============================================================================
80template <typename Event>
82 using holder<Event>::holder;
83 void on_wheel_up() override {
84 this->get()();
85 }
86};
87// copy when having rvalue
88template <typename T>
90// keep reference when having lvalue
91template <typename T>
93//==============================================================================
94template <typename Event>
96 using holder<Event>::holder;
97 void on_wheel_down() override {
98 this->get()();
99 }
100};
101// copy when having rvalue
102template <typename T>
104// keep reference when having lvalue
105template <typename T>
107//==============================================================================
108template <typename Event>
110 using holder<Event>::holder;
111 void on_cursor_moved(double x, double y) override {
112 this->get()(x, y);
113 }
114};
115// copy when having rvalue
116template <typename T>
118// keep reference when having lvalue
119template <typename T>
121//==============================================================================
123 std::vector<window_listener *> m_window_listeners;
124 std::vector<std::unique_ptr<base_holder>> m_events;
125 //----------------------------------------------------------------------------
134 void notify_cursor_moved(double x, double y);
135 void notify_resize(int width, int height);
137 //----------------------------------------------------------------------------
139 //----------------------------------------------------------------------------
140 template <typename Event>
141 void add_resize_event(Event&& event) {
142 m_events.push_back(std::unique_ptr<base_holder>{
143 new resize_event{std::forward<Event>(event)}});
144 add_listener(*dynamic_cast<gl::window_listener*>(m_events.back().get()));
145 }
146 //----------------------------------------------------------------------------
147 template <typename Event>
149 m_events.push_back(std::unique_ptr<base_holder>{
150 new key_pressed_event{std::forward<Event>(event)}});
151 add_listener(*dynamic_cast<gl::window_listener*>(m_events.back().get()));
152 }
153 //----------------------------------------------------------------------------
154 template <typename Event>
156 m_events.push_back(std::unique_ptr<base_holder>{
157 new key_released_event{std::forward<Event>(event)}});
158 add_listener(*dynamic_cast<gl::window_listener*>(m_events.back().get()));
159 }
160 //----------------------------------------------------------------------------
161 template <typename Event>
163 m_events.push_back(std::unique_ptr<base_holder>{
164 new button_pressed_event{std::forward<Event>(event)}});
165 add_listener(*dynamic_cast<gl::window_listener*>(m_events.back().get()));
166 }
167 //----------------------------------------------------------------------------
168 template <typename Event>
170 m_events.push_back(std::unique_ptr<base_holder>{
171 new button_released_event{std::forward<Event>(event)}});
172 add_listener(*dynamic_cast<gl::window_listener*>(m_events.back().get()));
173 }
174 //----------------------------------------------------------------------------
175 template <typename Event>
177 m_events.push_back(std::unique_ptr<base_holder>{
178 new cursor_moved_event{std::forward<Event>(event)}});
179 add_listener(*dynamic_cast<gl::window_listener*>(m_events.back().get()));
180 }
181 //----------------------------------------------------------------------------
182 template <typename Event>
183 void add_wheel_up_event(Event&& event) {
184 m_events.push_back(std::unique_ptr<base_holder>{
185 new wheel_up_event{std::forward<Event>(event)}});
186 add_listener(*dynamic_cast<gl::window_listener*>(m_events.back().get()));
187 }
188 //----------------------------------------------------------------------------
189 template <typename Event>
191 m_events.push_back(std::unique_ptr<base_holder>{
192 new wheel_down_event{std::forward<Event>(event)}});
193 add_listener(*dynamic_cast<gl::window_listener*>(m_events.back().get()));
194 }
195};
196//==============================================================================
197} // namespace tatooine::gl
198//==============================================================================
199#endif
Definition: ansiformat.h:6
button
Definition: mouse.h:8
key
Definition: keyboard.h:9
Definition: window_notifier.h:53
void on_button_pressed(button b) override
Definition: window_notifier.h:55
Definition: window_notifier.h:67
void on_button_released(button b) override
Definition: window_notifier.h:69
Definition: window_notifier.h:109
void on_cursor_moved(double x, double y) override
Definition: window_notifier.h:111
Definition: window_notifier.h:25
void on_key_pressed(key k) override
Definition: window_notifier.h:27
Definition: window_notifier.h:39
void on_key_pressed(key k) override
Definition: window_notifier.h:41
Definition: window_notifier.h:11
void on_resize(int width, int height) override
Definition: window_notifier.h:13
Definition: window_notifier.h:95
void on_wheel_down() override
Definition: window_notifier.h:97
Definition: window_notifier.h:81
void on_wheel_up() override
Definition: window_notifier.h:83
Definition: window_listener.h:10
Definition: window_notifier.h:122
void add_key_pressed_event(Event &&event)
Definition: window_notifier.h:148
void add_button_released_event(Event &&event)
Definition: window_notifier.h:169
void add_resize_event(Event &&event)
Definition: window_notifier.h:141
std::vector< window_listener * > m_window_listeners
Definition: window_notifier.h:123
void add_button_pressed_event(Event &&event)
Definition: window_notifier.h:162
std::vector< std::unique_ptr< base_holder > > m_events
Definition: window_notifier.h:124
void notify_cursor_moved(double x, double y)
void add_cursor_moved_event(Event &&event)
Definition: window_notifier.h:176
void notify_resize(int width, int height)
void add_wheel_up_event(Event &&event)
Definition: window_notifier.h:183
void add_listener(window_listener &l)
void add_wheel_down_event(Event &&event)
Definition: window_notifier.h:190
void add_key_released_event(Event &&event)
Definition: window_notifier.h:155
void notify_button_pressed(button b)
void notify_button_released(button b)
Definition: holder.h:15
const auto & get() const
Definition: holder.h:26