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