00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifdef G4VIS_BUILD_OPENGLQT_DRIVER
00034
00035 #include "G4OpenGLImmediateQtViewer.hh"
00036 #include "G4OpenGLImmediateSceneHandler.hh"
00037
00038 #include "G4ios.hh"
00039
00040 #include <qapplication.h>
00041
00042 G4OpenGLImmediateQtViewer::G4OpenGLImmediateQtViewer
00043 (G4OpenGLImmediateSceneHandler& sceneHandler,
00044 const G4String& name):
00045 G4VViewer (sceneHandler, sceneHandler.IncrementViewCount (), name),
00046 G4OpenGLViewer (sceneHandler),
00047 G4OpenGLQtViewer (sceneHandler),
00048 G4OpenGLImmediateViewer (sceneHandler)
00049 {
00050
00051 setFocusPolicy(Qt::StrongFocus);
00052 fHasToRepaint = false;
00053 fIsRepainting = false;
00054
00055 resize(fVP.GetWindowSizeHintX(),fVP.GetWindowSizeHintY());
00056
00057 if (fViewId < 0) return;
00058 }
00059
00060 G4OpenGLImmediateQtViewer::~G4OpenGLImmediateQtViewer() {
00061 makeCurrent();
00062 }
00063
00064 void G4OpenGLImmediateQtViewer::Initialise() {
00065 #ifdef G4DEBUG_VIS_OGL
00066 printf("G4OpenGLImmediateQtViewer::Initialise \n");
00067 #endif
00068 fReadyToPaint = false;
00069 CreateMainWindow (this,QString(GetName()));
00070 CreateFontLists ();
00071
00072 fReadyToPaint = true;
00073 }
00074
00075 void G4OpenGLImmediateQtViewer::initializeGL () {
00076
00077 InitializeGLView ();
00078
00079
00080
00081
00082
00083 if (fSceneHandler.GetScene() == 0) {
00084 fHasToRepaint =false;
00085 } else {
00086 fHasToRepaint =true;
00087 }
00088
00089
00090 setVisible(true) ;
00091
00092
00093 QCoreApplication::sendPostedEvents () ;
00094 }
00095
00096
00097 void G4OpenGLImmediateQtViewer::DrawView() {
00098 updateQWidget();
00099 }
00100
00101
00102 void G4OpenGLImmediateQtViewer::ComputeView () {
00103
00104 #ifdef G4DEBUG_VIS_OGL
00105 printf("G4OpenGLImmediateQtViewer::ComputeView %d %d VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\n",getWinWidth(), getWinHeight());
00106 #endif
00107 makeCurrent();
00108
00109
00110
00111
00112 G4ViewParameters::DrawingStyle dstyle = GetViewParameters().GetDrawingStyle();
00113
00114 if(dstyle!=G4ViewParameters::hlr &&
00115 haloing_enabled) {
00116
00117 HaloingFirstPass ();
00118 NeedKernelVisit ();
00119 ProcessView ();
00120 FinishView();
00121 #ifdef G4DEBUG_VIS_OGL
00122 printf("G4OpenGLImmediateQtViewer::ComputeView First ProcessView ok\n");
00123 #endif
00124 HaloingSecondPass ();
00125
00126 }
00127
00128 NeedKernelVisit ();
00129 ProcessView ();
00130
00131 if (isRecording()) {
00132 savePPMToTemp();
00133 }
00134
00135 #ifdef G4DEBUG_VIS_OGL
00136 printf("G4OpenGLImmediateQtViewer::ComputeView %d %d ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n",getWinWidth(), getWinHeight());
00137 #endif
00138 fHasToRepaint = true;
00139 }
00140
00144 void G4OpenGLImmediateQtViewer::resizeGL(
00145 int aWidth
00146 ,int aHeight)
00147 {
00148 if ((aWidth > 0) && (aHeight > 0)) {
00149 ResizeWindow(aWidth,aHeight);
00150 fHasToRepaint = sizeHasChanged();
00151 }
00152 }
00153
00154
00155 void G4OpenGLImmediateQtViewer::paintGL()
00156 {
00157 updateToolbarAndMouseContextMenu();
00158
00159 if (fIsRepainting) {
00160
00161 }
00162 if (!fReadyToPaint) {
00163 fReadyToPaint= true;
00164 return;
00165 }
00166 if ((getWinWidth() == 0) && (getWinHeight() == 0)) {
00167 return;
00168 }
00169
00170
00171 if ( !fHasToRepaint) {
00172
00173
00174 int sw = 0;
00175 int sh = 0;
00176 if (!isMaximized() && !isFullScreen()) {
00177 sw = normalGeometry().width();
00178 sh = normalGeometry().height();
00179 } else {
00180 sw = frameGeometry().width();
00181 sh = frameGeometry().height();
00182 }
00183 if ((getWinWidth() == (unsigned int)sw) &&(getWinHeight() == (unsigned int)sh)) {
00184 return;
00185
00186 } else if ((sw == 0) && (sh == 0)) {
00187 if (((getWinWidth() == (unsigned int)width())) &&(getWinHeight() == (unsigned int) height())) {
00188 return;
00189 }
00190 }
00191 }
00192 #ifdef G4DEBUG_VIS_OGL
00193 printf("G4OpenGLImmediateQtViewer::paintGL VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ready %d\n",fReadyToPaint);
00194 #endif
00195
00196 SetView();
00197
00198 ClearView ();
00199 ComputeView();
00200
00201 fHasToRepaint = false;
00202
00203 #ifdef G4DEBUG_VIS_OGL
00204 printf("G4OpenGLImmediateQtViewer::paintGL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ready %d\n\n\n",fReadyToPaint);
00205 #endif
00206 fIsRepainting = false;
00207 }
00208
00209 void G4OpenGLImmediateQtViewer::mousePressEvent(QMouseEvent *event)
00210 {
00211 G4MousePressEvent(event);
00212 }
00213
00214 void G4OpenGLImmediateQtViewer::keyPressEvent (QKeyEvent * event)
00215 {
00216 G4keyPressEvent(event);
00217 }
00218
00219 void G4OpenGLImmediateQtViewer::wheelEvent (QWheelEvent * event)
00220 {
00221 G4wheelEvent(event);
00222 }
00223
00224 void G4OpenGLImmediateQtViewer::showEvent (QShowEvent *)
00225 {
00226 fHasToRepaint = true;
00227 }
00228
00229
00234 void G4OpenGLImmediateQtViewer::mouseDoubleClickEvent(QMouseEvent *)
00235 {
00236 G4MouseDoubleClickEvent();
00237 }
00238
00239 void G4OpenGLImmediateQtViewer::mouseReleaseEvent(QMouseEvent *)
00240 {
00241 G4MouseReleaseEvent();
00242 }
00243
00244 void G4OpenGLImmediateQtViewer::mouseMoveEvent(QMouseEvent *event)
00245 {
00246 G4MouseMoveEvent(event);
00247 }
00248
00249
00250 void G4OpenGLImmediateQtViewer::contextMenuEvent(QContextMenuEvent *e)
00251 {
00252 G4manageContextMenuEvent(e);
00253 }
00254
00255 void G4OpenGLImmediateQtViewer::paintEvent(QPaintEvent *) {
00256 if ( fHasToRepaint) {
00257 updateGL();
00258 }
00259 }
00260
00261
00262 void G4OpenGLImmediateQtViewer::updateQWidget() {
00263 fHasToRepaint= true;
00264 updateGL();
00265 repaint();
00266 fHasToRepaint= false;
00267 }
00268
00269
00270 void G4OpenGLImmediateQtViewer::ShowView (
00271 )
00272
00273
00274 {
00275 fHasToRepaint = true;
00276 activateWindow();
00277 }
00278 #endif