00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef freecloth_gfx_gfxGLWindowGLUT_h
00020 #define freecloth_gfx_gfxGLWindowGLUT_h
00021
00022 #ifndef freecloth_gfx_package_h
00023 #include <freecloth/gfx/package.h>
00024 #endif
00025
00026 #ifndef freecloth_gfx_gfxGLWindow_h
00027 #include <freecloth/gfx/gfxGLWindow.h>
00028 #endif
00029
00030 #ifndef freecloth_base_map
00031 #include <freecloth/base/map>
00032 #endif
00033
00034
00035
00036
00037 class GfxConfig;
00038
00039
00040
00041
00042
00043
00044
00045 class GfxGLWindowGLUT : public GfxGLWindow
00046 {
00047 public:
00048
00049
00050 typedef GfxGLWindow BaseClass;
00051
00052
00053
00054 GfxGLWindowGLUT(
00055 const GfxConfig&,
00056 const String& title
00057 );
00058 ~GfxGLWindowGLUT();
00059
00060 void enableIdleEvents( bool );
00061
00062 void close();
00063
00064 void eventLoop();
00065
00066 void handleEvents();
00067
00068 UInt32 getWidth() const;
00069 UInt32 getHeight() const;
00070 void swapBuffers();
00071 void postRedisplay();
00072
00073 protected:
00074
00075
00076
00077 static KeyID translateKey( unsigned char key );
00078 static ModBitfield getModifiers();
00079 static ButtonID translateButton( Int32 button );
00080
00081
00082 static GfxGLWindowGLUT& getWindow();
00083
00084
00085 static void idleCB();
00086 static void displayCB();
00087 static void keyboardCB( unsigned char key, int x, int y );
00088 static void mouseCB( int button, int state, int x, int y );
00089 static void motionCB( int x, int y );
00090 static void passiveMotionCB( int x, int y );
00091 static void specialCB( int key, int x, int y );
00092 static void reshapeCB( int w, int h );
00093
00094
00095
00096
00097 virtual void registerIdleCB();
00098 virtual void unregisterIdleCB();
00099 virtual void registerCBs();
00100
00101 virtual void closeReceived();
00102
00103
00104
00105 void handleMiscEvents();
00106
00107
00108 Int32 _windowId;
00109 bool _idleEvents;
00110
00111 private:
00112
00113
00114
00115 typedef std::map<Int32,GfxGLWindowGLUT*> WindowMap;
00116
00117
00118
00119
00120 GfxGLWindowGLUT( const GfxGLWindowGLUT& );
00121
00122 GfxGLWindowGLUT& operator = ( const GfxGLWindowGLUT& );
00123
00124
00125
00126
00127 static WindowMap _windowMap;
00128 static UInt32 _nbIdleRegistered;
00129
00130
00131
00132 bool _closeReceived;
00133 UInt32 _width;
00134 UInt32 _height;
00135 };
00136
00137 #endif