00001 00002 #ifndef _GK_APP_H 00003 #define _GK_APP_H 00004 00005 #include "SDLPlatform.h" 00006 00007 namespace gk { 00008 00009 //! application de base SDL + openGL. consultez le <a href="http://www710.univ-lyon1.fr/~jciehl/Public/SDL_PG/index.html">libSDL Programming Guide</a> 00010 class App 00011 { 00012 protected: 00013 unsigned char *m_key_state; 00014 unsigned int *m_key_map; 00015 00016 int m_width, m_height; 00017 int m_stop; 00018 00019 public: 00020 //! \name initialisation manuelle de l'application. 00021 // @{ 00022 //! construction d'une application par defaut (non initialisee). 00023 App( ); 00024 00025 //! cree une fenetre de dimension w x h et termine l'initialisation. 00026 int createWindow( const int w, const int h ); 00027 00028 //! \name initialisation complete de l'application. 00029 // @{ 00030 //! construction d'une application. 00031 //! \param w largeur de la fenetre 00032 //! \param h largeur de la fenetre 00033 App( const int w, const int h ); 00034 // @} 00035 00036 //! destruction de l'application. 00037 ~App( ); 00038 00039 //! redimensionne la fenetre. 00040 int resizeWindow( const int w, const int h ); 00041 00042 //! renvoie les dimensions de la fenetre 00043 int windowWidth( ) const 00044 { 00045 return m_width; 00046 } 00047 00048 //! renvoie les dimensions de la fenetre 00049 int windowHeight( ) const 00050 { 00051 return m_height; 00052 } 00053 00054 00055 //! indique si la fenetre est fermee. 00056 bool isClosed( ); 00057 00058 //! demander a fermer la fenetre. 00059 void Close( ); 00060 00061 //! traitement des evenements systemes : clavier, souris, fenetre, etc. 00062 bool processEvents( ); 00063 00064 //! \name interception des evenements clavier / souris / redimensionnement. 00065 //! App fournit une implementation par defaut qui ne fait rien 00066 //! (les evenements sont reellement traites par processEvents()). 00067 //! a deriver, pour integrer nvWidgets, par exemple. 00068 00069 // @{ 00070 //! traitement des redimensionnements de la fenetre de l'application. 00071 virtual void processWindowResize( SDL_ResizeEvent& event ) 00072 { 00073 return; 00074 } 00075 00076 //! traitement des clicks souris. 00077 virtual void processMouseButtonEvent( SDL_MouseButtonEvent& event ) 00078 { 00079 return; 00080 } 00081 00082 //! traitement des deplacements de la souris. 00083 virtual void processMouseMotionEvent( SDL_MouseMotionEvent& event ) 00084 { 00085 return; 00086 } 00087 00088 //! traitement des evenements claviers. 00089 virtual void processKeyboardEvent( SDL_KeyboardEvent& event ) 00090 { 00091 return; 00092 } 00093 // @} 00094 00095 //! renvoie le tableau d'etat des touches du clavier. 00096 /*! permet de connaitre l'etat d'une touche. 00097 le code ascii ou l'identifiant SDLK_xxx peuvent etre utilises comme indices dans le tableau. \n 00098 la liste des codes est dans <a href="http://www710.univ-lyon1.fr/~jciehl/Public/SDL_PG/sdlkey.html">libSDL Programming Guide</a> 00099 00100 exemple : getKeys()['a'], ou getKeys()[SDLK_UP] 00101 */ 00102 unsigned char *getKeys( ); 00103 00104 //! renvoie l'etat d'une touche selon son code ascii ou son identifiant SDLK_xxx. 00105 //! la liste des codes est dans <a href="http://www710.univ-lyon1.fr/~jciehl/Public/SDL_PG/sdlkey.html">libSDL Programming Guide</a> 00106 /*! exemple : key('a'), ou key(SDLK_UP) 00107 00108 la fonction renvoie une reference, on peut l'utiliser pour desactiver manuellement 00109 une touche lorsque l'action a ete traitee et que l'on ne souhaite pas la re-executer a chaque image. 00110 00111 \code 00112 if(key('a')) { 00113 printf("a\n"); 00114 key('a')= 0; 00115 } 00116 \endcode 00117 */ 00118 unsigned char& key( const int key ); 00119 00120 //! \name encapsulation de la boucle principale 00121 //! deriver de App pour construire une nouvelle application. 00122 00123 // @{ 00124 //! appele apres l'initialisation complete de App et la creation du device. 00125 //! a redefinir en derivant App. 00126 //! doit renvoyer -1 en cas d'echec. 00127 virtual int init( ) { return 0; } 00128 00129 //! demarre la boucle principale. 00130 //! App fournit une version complete, il n'est pas necessaire de la redefinir. 00131 virtual int run( ); 00132 00133 //! appele avant la fermeture de l'application. 00134 //! a redefinir en derivant App. 00135 //! doit renvoyer -1 en cas d'echec. 00136 virtual int quit( ) { return 0; } 00137 00138 //! appele regulierement pour afficher la scene. 00139 //! a redefinir en derivant App. 00140 //! doit renvoyer 0 pour sortir de la boucle principale, ou 1 pour continuer. 00141 virtual int draw( ) { return 1; } 00142 // @} 00143 }; 00144 00145 } 00146 00147 #endif