- Timestamp:
- 06/04/07 16:46:38 (6 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/examples/osgviewerFLTK/osgviewerFLTK.cpp
r6813 r6829 4 4 // Derived from osgGLUTsimple.cpp and osgkeyboardmouse.cpp 5 5 6 #include <osgViewer/SimpleViewer> 6 #include <osgViewer/Viewer> 7 #include <osgViewer/StatsHandler> 7 8 #include <osgGA/TrackballManipulator> 8 9 #include <osgDB/ReadFile> … … 13 14 #include <iostream> 14 15 15 class GraphicsWindowFLTK : public Fl_Gl_Window, virtual osgViewer::GraphicsWindow16 class AdapterWidget : public Fl_Gl_Window 16 17 { 17 18 public: 18 19 19 GraphicsWindowFLTK(int x, int y, int w, int h, const char *label=0); 20 virtual ~GraphicsWindowFLTK() {} 20 AdapterWidget(int x, int y, int w, int h, const char *label=0); 21 virtual ~AdapterWidget() {} 22 23 osgViewer::GraphicsWindow* getGraphicsWindow() { return _gw.get(); } 24 const osgViewer::GraphicsWindow* getGraphicsWindow() const { return _gw.get(); } 21 25 22 26 virtual void resize(int x, int y, int w, int h); … … 25 29 26 30 virtual int handle(int event); 27 31 32 osg::ref_ptr<osgViewer::GraphicsWindowEmbedded> _gw; 28 33 }; 29 34 30 GraphicsWindowFLTK::GraphicsWindowFLTK(int x, int y, int w, int h, const char *label):35 AdapterWidget::AdapterWidget(int x, int y, int w, int h, const char *label): 31 36 Fl_Gl_Window(x, y, w, h, label) 32 37 { 33 getEventQueue()->windowResize(x, y, w, h);38 _gw = new osgViewer::GraphicsWindowEmbedded(x,y,w,h); 34 39 } 35 40 36 void GraphicsWindowFLTK::resize(int x, int y, int w, int h)41 void AdapterWidget::resize(int x, int y, int w, int h) 37 42 { 38 getEventQueue()->windowResize(x, y, w, h ); 43 _gw->getEventQueue()->windowResize(x, y, w, h ); 44 _gw->resized(x,y,w,h); 45 39 46 Fl_Gl_Window::resize(x,y,w,h); 47 40 48 } 41 49 42 int GraphicsWindowFLTK::handle(int event)50 int AdapterWidget::handle(int event) 43 51 { 44 52 switch(event){ 45 53 case FL_PUSH: 46 getEventQueue()->mouseButtonPress(Fl::event_x(), Fl::event_y(), Fl::event_button());54 _gw->getEventQueue()->mouseButtonPress(Fl::event_x(), Fl::event_y(), Fl::event_button()); 47 55 return 1; 48 56 case FL_MOVE: 49 57 case FL_DRAG: 50 getEventQueue()->mouseMotion(Fl::event_x(), Fl::event_y());58 _gw->getEventQueue()->mouseMotion(Fl::event_x(), Fl::event_y()); 51 59 return 1; 52 60 case FL_RELEASE: 53 getEventQueue()->mouseButtonRelease(Fl::event_x(), Fl::event_y(), Fl::event_button());61 _gw->getEventQueue()->mouseButtonRelease(Fl::event_x(), Fl::event_y(), Fl::event_button()); 54 62 return 1; 55 63 case FL_KEYDOWN: 56 getEventQueue()->keyPress((osgGA::GUIEventAdapter::KeySymbol)Fl::event_key());64 _gw->getEventQueue()->keyPress((osgGA::GUIEventAdapter::KeySymbol)Fl::event_key()); 57 65 return 1; 58 66 case FL_KEYUP: 59 getEventQueue()->keyRelease((osgGA::GUIEventAdapter::KeySymbol)Fl::event_key());67 _gw->getEventQueue()->keyRelease((osgGA::GUIEventAdapter::KeySymbol)Fl::event_key()); 60 68 return 1; 61 69 default: … … 71 79 72 80 73 class SimpleViewerFLTK : public osgViewer::SimpleViewer, public GraphicsWindowFLTK81 class ViewerFLTK : public osgViewer::Viewer, public AdapterWidget 74 82 { 75 public: 76 SimpleViewerFLTK(int x, int y, int w, int h, const char *label=0): 77 GraphicsWindowFLTK(x,y,w,h,label) {} 83 public: 84 ViewerFLTK(int x, int y, int w, int h, const char *label=0): 85 AdapterWidget(x,y,w,h,label) 86 { 87 getCamera()->setViewport(new osg::Viewport(0,0,w,h)); 88 getCamera()->setGraphicsContext(getGraphicsWindow()); 89 setThreadingModel(osgViewer::Viewer::SingleThreaded); 90 } 78 91 79 protected:80 virtual void draw() { frame(); }92 protected: 93 virtual void draw() { frame(); } 81 94 82 95 }; … … 100 113 101 114 102 SimpleViewerFLTK viewerWindow(100,100,800,600);115 ViewerFLTK viewerWindow(100,100,800,600); 103 116 viewerWindow.resizable(&viewerWindow); 104 117 105 118 viewerWindow.setSceneData(loadedModel.get()); 106 119 viewerWindow.setCameraManipulator(new osgGA::TrackballManipulator); 107 120 viewerWindow.addEventHandler(new osgViewer::StatsHandler); 121 108 122 viewerWindow.show(); 109 123
