| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-19 23:49:56 +01:00
										 |  |  | #include <SharedGraphics/Point.h>
 | 
					
						
							|  |  |  | #include <SharedGraphics/Rect.h>
 | 
					
						
							| 
									
										
										
										
											2018-12-21 02:18:16 +01:00
										 |  |  | #include <AK/AKString.h>
 | 
					
						
							| 
									
										
										
										
											2018-10-12 20:55:06 +02:00
										 |  |  | #include <AK/Types.h>
 | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  | class GEvent { | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  | public: | 
					
						
							|  |  |  |     enum Type { | 
					
						
							|  |  |  |         Invalid = 0, | 
					
						
							|  |  |  |         Quit, | 
					
						
							|  |  |  |         Show, | 
					
						
							|  |  |  |         Hide, | 
					
						
							|  |  |  |         Paint, | 
					
						
							|  |  |  |         MouseMove, | 
					
						
							|  |  |  |         MouseDown, | 
					
						
							|  |  |  |         MouseUp, | 
					
						
							|  |  |  |         KeyDown, | 
					
						
							|  |  |  |         KeyUp, | 
					
						
							| 
									
										
										
										
											2018-10-12 12:18:59 +02:00
										 |  |  |         Timer, | 
					
						
							| 
									
										
										
										
											2018-10-14 01:23:01 +02:00
										 |  |  |         DeferredDestroy, | 
					
						
							| 
									
										
										
										
											2019-01-09 04:15:17 +01:00
										 |  |  |         WindowBecameInactive, | 
					
						
							|  |  |  |         WindowBecameActive, | 
					
						
							| 
									
										
										
										
											2019-01-26 11:24:16 +01:00
										 |  |  |         FocusIn, | 
					
						
							|  |  |  |         FocusOut, | 
					
						
							| 
									
										
										
										
											2019-02-05 10:31:37 +01:00
										 |  |  |         WindowCloseRequest, | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  |     GEvent() { } | 
					
						
							|  |  |  |     explicit GEvent(Type type) : m_type(type) { } | 
					
						
							|  |  |  |     virtual ~GEvent() { } | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     Type type() const { return m_type; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-20 07:03:38 +01:00
										 |  |  |     bool is_mouse_event() const { return m_type == MouseMove || m_type == MouseDown || m_type == MouseUp; } | 
					
						
							|  |  |  |     bool is_key_event() const { return m_type == KeyUp || m_type == KeyDown; } | 
					
						
							|  |  |  |     bool is_paint_event() const { return m_type == Paint; } | 
					
						
							| 
									
										
										
										
											2018-10-12 01:20:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  | private: | 
					
						
							|  |  |  |     Type m_type { Invalid }; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  | class QuitEvent final : public GEvent { | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  | public: | 
					
						
							|  |  |  |     QuitEvent() | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  |         : GEvent(GEvent::Quit) | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  |     { | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  | class GPaintEvent final : public GEvent { | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  |     explicit GPaintEvent(const Rect& rect = Rect()) | 
					
						
							|  |  |  |         : GEvent(GEvent::Paint) | 
					
						
							| 
									
										
										
										
											2018-10-12 19:39:48 +02:00
										 |  |  |         , m_rect(rect) | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  |     { | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-10-12 19:39:48 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     const Rect& rect() const { return m_rect; } | 
					
						
							|  |  |  | private: | 
					
						
							|  |  |  |     Rect m_rect; | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  | class GShowEvent final : public GEvent { | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  |     GShowEvent() | 
					
						
							|  |  |  |         : GEvent(GEvent::Show) | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  |     { | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  | class GHideEvent final : public GEvent { | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  |     GHideEvent() | 
					
						
							|  |  |  |         : GEvent(GEvent::Hide) | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  |     { | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-02 08:05:14 +01:00
										 |  |  | enum GMouseButton : byte { | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  |     None = 0, | 
					
						
							| 
									
										
										
										
											2019-01-21 02:18:16 +01:00
										 |  |  |     Left = 1, | 
					
						
							|  |  |  |     Right = 2, | 
					
						
							|  |  |  |     Middle = 4, | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  | class GKeyEvent final : public GEvent { | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  |     GKeyEvent(Type type, int key) | 
					
						
							|  |  |  |         : GEvent(type) | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  |         , m_key(key) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     int key() const { return m_key; } | 
					
						
							| 
									
										
										
										
											2018-10-12 20:55:06 +02:00
										 |  |  |     bool ctrl() const { return m_ctrl; } | 
					
						
							|  |  |  |     bool alt() const { return m_alt; } | 
					
						
							|  |  |  |     bool shift() const { return m_shift; } | 
					
						
							|  |  |  |     String text() const { return m_text; } | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  |     friend class GEventLoop; | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  |     int m_key { 0 }; | 
					
						
							| 
									
										
										
										
											2018-10-12 20:55:06 +02:00
										 |  |  |     bool m_ctrl { false }; | 
					
						
							|  |  |  |     bool m_alt { false }; | 
					
						
							|  |  |  |     bool m_shift { false }; | 
					
						
							|  |  |  |     String m_text; | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  | class GMouseEvent final : public GEvent { | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2019-01-20 07:03:38 +01:00
										 |  |  |     GMouseEvent(Type type, const Point& position, unsigned buttons, GMouseButton button = GMouseButton::None) | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  |         : GEvent(type) | 
					
						
							| 
									
										
										
										
											2019-01-20 05:48:43 +01:00
										 |  |  |         , m_position(position) | 
					
						
							| 
									
										
										
										
											2019-01-20 07:03:38 +01:00
										 |  |  |         , m_buttons(buttons) | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  |         , m_button(button) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-12 01:20:06 +02:00
										 |  |  |     Point position() const { return m_position; } | 
					
						
							|  |  |  |     int x() const { return m_position.x(); } | 
					
						
							|  |  |  |     int y() const { return m_position.y(); } | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  |     GMouseButton button() const { return m_button; } | 
					
						
							| 
									
										
										
										
											2019-01-20 07:03:38 +01:00
										 |  |  |     unsigned buttons() const { return m_buttons; } | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2018-10-12 01:20:06 +02:00
										 |  |  |     Point m_position; | 
					
						
							| 
									
										
										
										
											2019-01-20 07:03:38 +01:00
										 |  |  |     unsigned m_buttons { 0 }; | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  |     GMouseButton m_button { GMouseButton::None }; | 
					
						
							| 
									
										
										
										
											2018-10-10 15:12:38 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  | class GTimerEvent final : public GEvent { | 
					
						
							| 
									
										
										
										
											2018-10-12 12:18:59 +02:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2019-02-01 03:50:06 +01:00
										 |  |  |     explicit GTimerEvent(int timer_id) : GEvent(GEvent::Timer), m_timer_id(timer_id) { } | 
					
						
							| 
									
										
										
										
											2019-01-20 04:49:48 +01:00
										 |  |  |     ~GTimerEvent() { } | 
					
						
							| 
									
										
										
										
											2019-02-01 03:50:06 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     int timer_id() const { return m_timer_id; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							|  |  |  |     int m_timer_id; | 
					
						
							| 
									
										
										
										
											2018-10-12 12:18:59 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 |