Scribus
Open source desktop publishing at your fingertips
AdapterWidget.h
1 /*
2 For general Scribus (>=1.3.2) copyright and licensing information please refer
3 to the COPYING file provided with the program. Following this notice may exist
4 a copyright and/or license notice that predates the release of Scribus 1.3.2
5 for which a new license (GPL+exception) is in place.
6 */
7 /***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15 #ifndef ADAPTERWIDGET_H
16 #define ADAPTERWIDGET_H
17 
18 #include <QtCore>
19 #include <QtGui>
20 #include <QtOpenGL>
21 #include <osgViewer/Viewer>
22 #include <osg/Vec3>
23 
24 class AdapterWidget : public QGLWidget
25 {
26  Q_OBJECT
27  public:
28  AdapterWidget ( QWidget * parent = 0, const char * name = 0, const QGLWidget * shareWidget = 0);
29 
30  virtual ~AdapterWidget() {}
31 
32  osgViewer::GraphicsWindow* getGraphicsWindow() { return _gw.get(); }
33  const osgViewer::GraphicsWindow* getGraphicsWindow() const { return _gw.get(); }
34 
35  signals:
36  void mouseMoved();
37  protected:
38 
39  void init();
40 
41  virtual void resizeGL ( int width, int height );
42  virtual void keyPressEvent ( QKeyEvent* event );
43  virtual void keyReleaseEvent ( QKeyEvent* event );
44  virtual void mousePressEvent ( QMouseEvent* event );
45  virtual void mouseReleaseEvent ( QMouseEvent* event );
46  virtual void mouseMoveEvent ( QMouseEvent* event );
47 
48  int button;
49  osg::ref_ptr<osgViewer::GraphicsWindowEmbedded> _gw;
50 };
51 
52 
53 class ViewerQT : public osgViewer::Viewer, public AdapterWidget
54 {
55  public:
56  ViewerQT ( QWidget * parent = 0, const char * name = 0, const QGLWidget * shareWidget = 0) : AdapterWidget ( parent, name, shareWidget)
57  {
58  getCamera()->setViewport ( new osg::Viewport ( 0,0,width(),height() ) );
59  getCamera()->setProjectionMatrixAsPerspective ( 30.0f, static_cast<double> ( width() ) /static_cast<double> ( height() ), 1.0f, 10000.0f );
60  QColor bg = palette().window().color();
61  getCamera()->setClearColor(osg::Vec4(bg.redF(), bg.greenF(), bg.blueF(), 0.0));
62  getCamera()->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
63  getCamera()->setGraphicsContext ( getGraphicsWindow() );
64 
65  setThreadingModel ( osgViewer::Viewer::SingleThreaded );
66 
67  connect ( &_timer, SIGNAL ( timeout() ), this, SLOT ( updateGL() ) );
68  }
69 
70  virtual void showEvent(QShowEvent *)
71  {
72  _timer.start(10);
73  }
74 
75  virtual void paintGL()
76  {
77  frame();
78  }
79 
80  protected:
81 
82  QTimer _timer;
83 };
84 #endif
Definition: AdapterWidget.h:53
Definition: AdapterWidget.h:24