2013-01-17 22:38:13 -08:00
/*
2014-02-10 22:07:04 -08:00
* Copyright 2011 - 2014 Branimir Karadzic . All rights reserved .
2013-01-17 22:38:13 -08:00
* License : http : //www.opensource.org/licenses/BSD-2-Clause
*/
2013-11-14 19:10:10 -08:00
# ifndef ENTRY_PRIVATE_H_HEADER_GUARD
# define ENTRY_PRIVATE_H_HEADER_GUARD
2013-01-17 22:38:13 -08:00
2013-01-16 22:44:51 -08:00
# include <bx/spscqueue.h>
# include "entry.h"
2013-01-17 22:38:13 -08:00
2014-03-29 19:58:24 -07:00
# ifndef ENTRY_CONFIG_USE_SDL
2014-01-30 20:31:49 -08:00
# define ENTRY_CONFIG_USE_SDL 0
2014-03-29 19:58:24 -07:00
# endif // ENTRY_CONFIG_USE_SDL
# if !ENTRY_CONFIG_USE_SDL && \
! defined ( ENTRY_CONFIG_USE_NATIVE )
2014-01-30 20:31:49 -08:00
# define ENTRY_CONFIG_USE_NATIVE 1
2014-03-29 19:58:24 -07:00
# else
# define ENTRY_CONFIG_USE_NATIVE 0
2014-01-30 20:31:49 -08:00
# endif // ...
2013-08-14 21:08:46 -07:00
# if !defined(ENTRY_DEFAULT_WIDTH) && !defined(ENTRY_DEFAULT_HEIGHT)
# define ENTRY_DEFAULT_WIDTH 1280
# define ENTRY_DEFAULT_HEIGHT 720
# elif !defined(ENTRY_DEFAULT_WIDTH) || !defined(ENTRY_DEFAULT_HEIGHT)
# error "Both ENTRY_DEFAULT_WIDTH and ENTRY_DEFAULT_HEIGHT must be defined."
# endif // ENTRY_DEFAULT_WIDTH
2013-01-17 22:38:13 -08:00
namespace entry
{
2013-08-07 21:45:56 -07:00
int main ( int _argc , char * * _argv ) ;
struct Event
{
enum Enum
{
Exit ,
Key ,
Mouse ,
Size ,
} ;
Event : : Enum m_type ;
} ;
struct KeyEvent : public Event
{
Key : : Enum m_key ;
uint8_t m_modifiers ;
bool m_down ;
} ;
struct MouseEvent : public Event
{
int32_t m_mx ;
int32_t m_my ;
2014-08-05 21:13:50 -07:00
int32_t m_mz ;
2013-08-07 21:45:56 -07:00
MouseButton : : Enum m_button ;
bool m_down ;
bool m_move ;
} ;
struct SizeEvent : public Event
{
uint32_t m_width ;
uint32_t m_height ;
} ;
const Event * poll ( ) ;
void release ( const Event * _event ) ;
2013-01-16 22:44:51 -08:00
class EventQueue
{
public :
void postExitEvent ( )
{
Event * ev = new Event ;
ev - > m_type = Event : : Exit ;
m_queue . push ( ev ) ;
}
void postKeyEvent ( Key : : Enum _key , uint8_t _modifiers , bool _down )
{
KeyEvent * ev = new KeyEvent ;
ev - > m_type = Event : : Key ;
ev - > m_key = _key ;
ev - > m_modifiers = _modifiers ;
ev - > m_down = _down ;
m_queue . push ( ev ) ;
}
2014-08-05 21:13:50 -07:00
void postMouseEvent ( int32_t _mx , int32_t _my , int32_t _mz )
2013-01-17 23:22:38 -08:00
{
MouseEvent * ev = new MouseEvent ;
ev - > m_type = Event : : Mouse ;
ev - > m_mx = _mx ;
ev - > m_my = _my ;
2014-08-05 21:13:50 -07:00
ev - > m_mz = _mz ;
2013-01-17 23:22:38 -08:00
ev - > m_button = MouseButton : : None ;
ev - > m_down = false ;
ev - > m_move = true ;
m_queue . push ( ev ) ;
}
2014-08-05 21:13:50 -07:00
void postMouseEvent ( int32_t _mx , int32_t _my , int32_t _mz , MouseButton : : Enum _button , bool _down )
2013-01-16 22:44:51 -08:00
{
MouseEvent * ev = new MouseEvent ;
ev - > m_type = Event : : Mouse ;
ev - > m_mx = _mx ;
ev - > m_my = _my ;
2014-08-05 21:13:50 -07:00
ev - > m_mz = _mz ;
2013-01-16 22:44:51 -08:00
ev - > m_button = _button ;
ev - > m_down = _down ;
2013-01-17 23:22:38 -08:00
ev - > m_move = false ;
2013-01-16 22:44:51 -08:00
m_queue . push ( ev ) ;
}
void postSizeEvent ( uint32_t _width , uint32_t _height )
{
SizeEvent * ev = new SizeEvent ;
ev - > m_type = Event : : Size ;
ev - > m_width = _width ;
ev - > m_height = _height ;
m_queue . push ( ev ) ;
}
const Event * poll ( )
{
return m_queue . pop ( ) ;
}
void release ( const Event * _event ) const
{
delete _event ;
}
private :
bx : : SpScUnboundedQueue < Event > m_queue ;
} ;
2013-01-17 22:38:13 -08:00
} // namespace entry
2013-11-14 19:10:10 -08:00
# endif // ENTRY_PRIVATE_H_HEADER_GUARD