1 #ifndef _DISPLAY_OUTPUT_H
2 #define	_DISPLAY_OUTPUT_H
3 
4 #include	<queue>
5 #include	"base.h"
6 #include	"SmartPtr.h"
7 #include	"linkpool.h"
8 #ifdef MAC
9 #undef Random
10 #include	<OpenGL/OpenGL.h>
11 #endif
12 
13 namespace	DisplayOutput
14 {
15 
16 /*
17 	CEvent.
18 	Event interface.
19 */
20 class	CEvent
21 {
22 	public:
23 			enum eEventType
24 			{
25 				Event_KEY,
26 				Event_Mouse,
27 				Event_Power,
28 				Event_NONE
29 			};
30 
~CEvent()31             virtual ~CEvent() {}
32 
Type()33 			virtual	eEventType	Type()	{	return( Event_NONE );	};
34 
35 			POOLED( CEvent, Memory::CLinkPool );
36 };
37 
38 MakeSmartPointers( CEvent );
39 
40 /*
41 	CKeyEvent.
42 	Keyboard event.
43 */
44 class	CKeyEvent : public CEvent
45 {
46 	public:
47 			enum eKeyCode
48 			{
49 				KEY_TAB,
50 				KEY_LALT,
51 				KEY_MENU,
52 				KEY_CTRL,
53 				KEY_F,
54 				KEY_s,
55 				KEY_SPACE,
56 				KEY_LEFT,
57 				KEY_RIGHT,
58 				KEY_UP,
59 				KEY_DOWN,
60 				KEY_F1,
61 				KEY_F2,
62 				KEY_F3,
63 				KEY_F4,
64 				KEY_F5,
65 				KEY_F6,
66 				KEY_F7,
67 				KEY_F8,
68 				KEY_F9,
69 				KEY_F10,
70 				KEY_F11,
71 				KEY_F12,
72 				KEY_Esc,
73 				KEY_NONE
74 			};
75 
CKeyEvent()76 			CKeyEvent() : m_bPressed( true ), m_Code( KEY_NONE )	{}
77 
~CKeyEvent()78             virtual ~CKeyEvent() {}
79 
Type()80 			virtual eEventType	Type()	{	return( CEvent::Event_KEY );	};
81 			bool    	m_bPressed;
82 			eKeyCode	m_Code;
83 
84 			POOLED( CKeyEvent, Memory::CLinkPool );
85 };
86 
87 MakeSmartPointers( CKeyEvent );
88 
89 
90 /*
91 	CMouseEvent.
92 	Mouse event.
93 */
94 class	CMouseEvent : public CEvent
95 {
96 	public:
97 			enum eMouseCode
98 			{
99 				Mouse_LEFT,
100 				Mouse_RIGHT,
101 				Mouse_MOVE,
102 				Mouse_NONE
103 			};
104 
CMouseEvent()105 			CMouseEvent() : m_Code( Mouse_NONE )	{}
106 
~CMouseEvent()107             virtual ~CMouseEvent() {}
108 
Type()109 			virtual eEventType	Type()	{	return( CEvent::Event_Mouse );	};
110 			eMouseCode	m_Code;
111 
112 			int32	m_X;
113 			int32	m_Y;
114 
115 			POOLED( CMouseEvent, Memory::CLinkPool );
116 };
117 
118 MakeSmartPointers( CMouseEvent );
119 
120 
121 
122 /*
123 	CPowerEvent.
124 	Power broadcast event.
125 */
126 class	CPowerEvent : public CEvent
127 {
128 	public:
CPowerEvent()129 			CPowerEvent()	{}
130 
~CPowerEvent()131             virtual ~CPowerEvent() {}
132 
Type()133             virtual eEventType	Type()	{	return( CEvent::Event_Power );	};
134 };
135 
136 MakeSmartPointers( CPowerEvent );
137 
138 /*
139 	CDisplayOutput.
140 	Base class.
141 
142 	Note, it's up to constructor(or Initialize()), to set width/height.
143 */
144 class	CDisplayOutput
145 {
146 	protected:
147 
148 		int32	m_XPosition;
149 		int32	m_YPosition;
150 		uint32	m_Width;
151 		uint32	m_Height;
152 		bool    m_bFullScreen;
153 		bool    m_bVSync;
154 		bool	m_bClosed;
155 
156 		static std::queue<spCEvent>	m_EventQueue;
157 
158 	public:
159 			CDisplayOutput();
160 			virtual ~CDisplayOutput();
161 
162 #ifdef	WIN32
163 			virtual bool Initialize( HWND _hWnd, bool _bPreview ) = PureVirtual;
164 			virtual HWND Initialize( const uint32 _width, const uint32 _height, const bool _bFullscreen ) = PureVirtual;
165 			virtual HWND WindowHandle( void ) = PureVirtual;
GetNumMonitors()166 			virtual DWORD GetNumMonitors() { return 1; }
167 #else
168 #ifdef MAC
169 			virtual bool Initialize( CGLContextObj _glContext, bool _bPreview ) = PureVirtual;
170 			virtual void SetContext( CGLContextObj glContext ) = PureVirtual;
171 			virtual CGLContextObj GetContext( void ) = PureVirtual;
172 			virtual void ForceWidthAndHeight( uint32 _width, uint32 _height ) = PureVirtual;
173 #else
174 			virtual bool Initialize( const uint32 _width, const uint32 _height, const bool _bFullscreen ) = PureVirtual;
175 #endif
176 #endif
177 
178 			//
179 			virtual void Title( const std::string &_title) = PureVirtual;
180 			virtual void Update() = PureVirtual;
181 			virtual void SwapBuffers() = PureVirtual;
182 
183 			bool	GetEvent( spCEvent &_event );
184 			void	AppendEvent( spCEvent _event );
185 			void	ClearEvents();
186 
HasShaders()187 			virtual bool HasShaders() { return false; };
Width()188 			uint32	Width()
189 			{
190 				return( m_Width );
191 			};
Height()192 			uint32	Height()
193 			{
194 				return( m_Height );
195 			};
Aspect()196 			fp4		Aspect()	{	return( (fp4)m_Height / (fp4)m_Width );	};
Closed()197 			bool    Closed()    {   return( m_bClosed );    };
Close()198 			void	Close()		{	m_bClosed = true;		};
199 };
200 
201 MakeSmartPointers( CDisplayOutput );
202 
203 };
204 
205 #endif
206