Main Page | Modules | Class Hierarchy | Class List | File List | Class Members

SoQtGLWidget.h

00001 /**************************************************************************\ 00002 * 00003 * This file is part of the Coin 3D visualization library. 00004 * Copyright (C) 1998-2003 by Systems in Motion. All rights reserved. 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU General Public License 00008 * ("GPL") version 2 as published by the Free Software Foundation. 00009 * See the file LICENSE.GPL at the root directory of this source 00010 * distribution for additional information about the GNU GPL. 00011 * 00012 * For using Coin with software that can not be combined with the GNU 00013 * GPL, and for taking advantage of the additional benefits of our 00014 * support services, please contact Systems in Motion about acquiring 00015 * a Coin Professional Edition License. 00016 * 00017 * See <URL:http://www.coin3d.org> for more information. 00018 * 00019 * Systems in Motion, Teknobyen, Abels Gate 5, 7030 Trondheim, NORWAY. 00020 * <URL:http://www.sim.no>. 00021 * 00022 \**************************************************************************/ 00023 00024 #ifndef SOQT_GLWIDGET_H 00025 #define SOQT_GLWIDGET_H 00026 00027 #include <Inventor/SbBasic.h> 00028 #include <Inventor/Qt/SoQtBasic.h> 00029 #include <Inventor/Qt/SoQtComponent.h> 00030 00031 #ifdef __COIN_SOQT__ 00032 class QEvent; 00033 #endif // __COIN_SOQT__ 00034 #ifdef __COIN_SOXT__ 00035 #include <GL/glx.h> 00036 #endif // __COIN_SOXT__ 00037 #ifdef __COIN_SOGTK__ 00038 #include <gtk/gtk.h> 00039 #endif // __COIN_SOGTK__ 00040 #ifdef __COIN_SOWIN__ 00041 #include <windows.h> 00042 #endif // __COIN_SOWIN__ 00043 00044 // ************************************************************************* 00045 00046 enum GLModes { 00047 SO_GL_RGB = 0x01, SO_GLX_RGB = SO_GL_RGB, 00048 SO_GL_DOUBLE = 0x02, SO_GLX_DOUBLE = SO_GL_DOUBLE, 00049 SO_GL_ZBUFFER = 0x04, SO_GLX_ZBUFFER = SO_GL_ZBUFFER, 00050 SO_GL_OVERLAY = 0x08, SO_GLX_OVERLAY = SO_GL_OVERLAY, 00051 SO_GL_STEREO = 0x10, SO_GLX_STEREO = SO_GL_STEREO 00052 }; 00053 00054 // ************************************************************************* 00055 00056 class SOQT_DLL_API SoQtGLWidget : public SoQtComponent { 00057 SOQT_OBJECT_ABSTRACT_HEADER(SoQtGLWidget, SoQtComponent); 00058 00059 public: 00060 00061 void setBorder(const SbBool enable); 00062 SbBool isBorder(void) const; 00063 00064 virtual void setDoubleBuffer(const SbBool enable); 00065 SbBool isDoubleBuffer(void) const; 00066 00067 void setDrawToFrontBufferEnable(const SbBool enable); 00068 SbBool isDrawToFrontBufferEnable(void) const; 00069 00070 void setQuadBufferStereo(const SbBool enable); 00071 SbBool isQuadBufferStereo(void) const; 00072 00073 void setAccumulationBuffer(const SbBool enable); 00074 SbBool getAccumulationBuffer(void) const; 00075 00076 void setStencilBuffer(const SbBool enable); 00077 SbBool getStencilBuffer(void) const; 00078 00079 void setOverlayRender(const SbBool onoff); 00080 SbBool isOverlayRender(void) const; 00081 00082 QWidget * getGLWidget(void) const; 00083 QWidget * getNormalWidget(void) const; 00084 QWidget * getOverlayWidget(void) const; 00085 00086 SbBool hasOverlayGLArea(void) const; 00087 SbBool hasNormalGLArea(void) const; 00088 00089 unsigned long getOverlayTransparentPixel(void); 00090 00091 // OpenGL query functions. 00092 void getPointSizeLimits(SbVec2f & range, float & granularity); 00093 void getLineWidthLimits(SbVec2f & range, float & granularity); 00094 00095 protected: 00096 SoQtGLWidget(QWidget * const parent = NULL, 00097 const char * const name = NULL, 00098 const SbBool embed = TRUE, 00099 const int glmodes = SO_GL_RGB, 00100 const SbBool build = TRUE); 00101 ~SoQtGLWidget(); 00102 00103 virtual void processEvent(QEvent * event); 00104 00105 QWidget * buildWidget(QWidget * parent); 00106 00107 virtual void redraw(void) = 0; 00108 virtual void redrawOverlay(void); 00109 00110 virtual void initGraphic(void); 00111 virtual void initOverlayGraphic(void); 00112 00113 virtual void sizeChanged(const SbVec2s & size); 00114 virtual void widgetChanged(QWidget * w); 00115 00116 void setGLSize(const SbVec2s size); 00117 SbVec2s getGLSize(void) const; 00118 float getGLAspectRatio(void) const; 00119 00120 // old aliases 00121 void setGlxSize(const SbVec2s size) { this->setGLSize(size); } 00122 SbVec2s getGlxSize(void) const { return this->getGLSize(); } 00123 float getGlxAspectRatio(void) const { return this->getGLAspectRatio(); } 00124 00125 void setStereoBuffer(SbBool flag); 00126 SbBool isStereoBuffer(void) const; 00127 00128 SbBool isRGBMode(void); 00129 00130 SbBool waitForExpose; 00131 SbBool drawToFrontBuffer; 00132 00133 void glLockNormal(void); 00134 void glUnlockNormal(void); 00135 00136 void glLockOverlay(void); 00137 void glUnlockOverlay(void); 00138 00139 void glSwapBuffers(void); 00140 void glFlushBuffer(void); 00141 00142 virtual SbBool glScheduleRedraw(void); 00143 00144 private: 00145 class SoQtGLWidgetP * pimpl; 00146 #ifndef DOXYGEN_SKIP_THIS 00147 friend class SoGuiGLWidgetP; 00148 friend class SoQtGLWidgetP; 00149 #endif // DOXYGEN_SKIP_THIS 00150 00151 // FIXME: get rid of toolkit-specific stuff below. 20020613 mortene. 00152 00153 #ifdef __COIN_SOXT__ 00154 public: 00155 Window getNormalWindow(void); 00156 Window getOverlayWindow(void); 00157 00158 int getOverlayColorMapSize(void); 00159 int getColorMapSize(void); 00160 00161 virtual void setNormalVisual(XVisualInfo * visual); 00162 XVisualInfo * getNormalVisual(void); 00163 virtual void setOverlayVisual(XVisualInfo * visual); 00164 XVisualInfo * getOverlayVisual(void); 00165 00166 protected: 00167 int getDisplayListShareGroup(GLXContext context); 00168 Widget getGlxMgrWidget(void); 00169 #endif // __COIN_SOXT__ 00170 #ifdef __COIN_SOWIN__ 00171 public: 00172 HWND getNormalWindow(void) const; 00173 HWND getOverlayWindow(void) const; 00174 HDC getNormalDC(void) const; 00175 HDC getOverlayDC(void) const; 00176 00177 void setStealFocus(SbBool doStealFocus); 00178 00179 virtual void setNormalVisual(PIXELFORMATDESCRIPTOR * vis); 00180 PIXELFORMATDESCRIPTOR * getNormalVisual(void); 00181 virtual void setOverlayVisual(PIXELFORMATDESCRIPTOR * vis); 00182 PIXELFORMATDESCRIPTOR * getOverlayVisual(void); 00183 virtual void setPixelFormat(int format); 00184 int getPixelFormat(void); 00185 #endif // __COIN_SOWIN__ 00186 00187 #ifdef __COIN_SOGTK__ 00188 protected: 00189 virtual SbBool eventFilter(GtkWidget * object, GdkEvent * event); 00190 #endif // __COIN_SOGTK__ 00191 }; 00192 00193 // ************************************************************************* 00194 00195 #endif // ! SOQT_GLWIDGET_H

Generated on Wed Aug 18 12:57:38 2004 for SoQt by doxygen 1.3.7