Skip to content

Commit

Permalink
Simplify support for major Qt versions.
Browse files Browse the repository at this point in the history
  • Loading branch information
VolkerEnderlein committed Feb 4, 2024
1 parent 78b1ce0 commit 18a1422
Show file tree
Hide file tree
Showing 9 changed files with 53 additions and 128 deletions.
39 changes: 16 additions & 23 deletions include/Quarter/QuarterWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,14 @@
#if QT_VERSION >= 0x060000
#include <QOpenGLWidget>
#include <QOpenGLContext>
#define QUARTER_GL_WIDGET QOpenGLWidget
#define QUARTER_GL_CONTEXT QOpenGLContext
#define QUARTER_GL_FORMAT QSurfaceFormat
#else
#include <QGLWidget>
#define QUARTER_GL_WIDGET QGLWidget
#define QUARTER_GL_CONTEXT QGLContext
#define QUARTER_GL_FORMAT QGLFormat
#endif
#include <Quarter/Basic.h>

Expand All @@ -62,13 +68,8 @@ namespace SIM { namespace Coin3D { namespace Quarter {
class EventFilter;
const char DEFAULT_NAVIGATIONFILE [] = "coin:///scxml/navigation/examiner.xml";

#if QT_VERSION >= 0x060000
class QUARTER_DLL_API QuarterWidget : public QOpenGLWidget {
typedef QOpenGLWidget inherited;
#else
class QUARTER_DLL_API QuarterWidget : public QGLWidget {
typedef QGLWidget inherited;
#endif
class QUARTER_DLL_API QuarterWidget : public QUARTER_GL_WIDGET {
typedef QUARTER_GL_WIDGET inherited;
Q_OBJECT

Q_PROPERTY(QUrl navigationModeFile READ navigationModeFile WRITE setNavigationModeFile RESET resetNavigationModeFile)
Expand All @@ -91,18 +92,14 @@ class QUARTER_DLL_API QuarterWidget : public QGLWidget {


public:
#if QT_VERSION >= 0x060000
explicit QuarterWidget(QWidget * parent = 0, const QOpenGLWidget* sharewidget = 0, Qt::WindowFlags f = Qt::WindowFlags());
explicit QuarterWidget(QOpenGLContext * context, QWidget * parent = 0, const QOpenGLWidget* sharewidget = 0, Qt::WindowFlags f = Qt::WindowFlags());
explicit QuarterWidget(const QSurfaceFormat & format, QWidget * parent = 0, const QOpenGLWidget* shareWidget = 0, Qt::WindowFlags f = Qt::WindowFlags());
#elif QT_VERSION >= 0x050F00
explicit QuarterWidget(QWidget * parent = 0, const QGLWidget * sharewidget = 0, Qt::WindowFlags f = Qt::WindowFlags());
explicit QuarterWidget(QGLContext * context, QWidget * parent = 0, const QGLWidget * sharewidget = 0, Qt::WindowFlags f = Qt::WindowFlags());
explicit QuarterWidget(const QGLFormat & format, QWidget * parent = 0, const QGLWidget * shareWidget = 0, Qt::WindowFlags f = Qt::WindowFlags());
#if QT_VERSION >= 0x050F00
explicit QuarterWidget(QWidget * parent = 0, const QUARTER_GL_WIDGET * sharewidget = 0, Qt::WindowFlags f = Qt::WindowFlags());
explicit QuarterWidget(QUARTER_GL_CONTEXT * context, QWidget * parent = 0, const QUARTER_GL_WIDGET * sharewidget = 0, Qt::WindowFlags f = Qt::WindowFlags());
explicit QuarterWidget(const QUARTER_GL_FORMAT & format, QWidget * parent = 0, const QUARTER_GL_WIDGET * shareWidget = 0, Qt::WindowFlags f = Qt::WindowFlags());
#else
explicit QuarterWidget(QWidget* parent = 0, const QGLWidget* sharewidget = 0, Qt::WindowFlags f = 0);
explicit QuarterWidget(QGLContext* context, QWidget* parent = 0, const QGLWidget* sharewidget = 0, Qt::WindowFlags f = 0);
explicit QuarterWidget(const QGLFormat& format, QWidget* parent = 0, const QGLWidget* shareWidget = 0, Qt::WindowFlags f = 0);
explicit QuarterWidget(QWidget * parent = 0, const QUARTER_GL_WIDGET * sharewidget = 0, Qt::WindowFlags f = 0);
explicit QuarterWidget(QUARTER_GL_CONTEXT * context, QWidget* parent = 0, const QUARTER_GL_WIDGET * sharewidget = 0, Qt::WindowFlags f = 0);
explicit QuarterWidget(const QUARTER_GL_FORMAT & format, QWidget * parent = 0, const QUARTER_GL_WIDGET * shareWidget = 0, Qt::WindowFlags f = 0);
#endif
virtual ~QuarterWidget();

Expand Down Expand Up @@ -217,11 +214,7 @@ public slots:
virtual bool updateDevicePixelRatio(void);

private:
#if QT_VERSION >= 0x060000
void constructor(const QOpenGLWidget* sharewidget);
#else
void constructor(const QGLWidget* sharewidget);
#endif
void constructor(const QUARTER_GL_WIDGET * sharewidget);
friend class QuarterWidgetP;
class QuarterWidgetP * pimpl;
};
Expand Down
15 changes: 4 additions & 11 deletions src/Quarter/QuarterWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,49 +124,42 @@ using namespace SIM::Coin3D::Quarter;
#define PRIVATE(obj) obj->pimpl

/*! constructor */
QuarterWidget::QuarterWidget(const QUARTER_GL_FORMAT & format, QWidget * parent, const QUARTER_GL_WIDGET * sharewidget, Qt::WindowFlags f)
#if QT_VERSION >= 0x060000
QuarterWidget::QuarterWidget(const QSurfaceFormat & format, QWidget * parent, const QOpenGLWidget* sharewidget, Qt::WindowFlags f)
: inherited(parent, f)
{
this->setFormat(format);
#else
QuarterWidget::QuarterWidget(const QGLFormat & format, QWidget * parent, const QGLWidget * sharewidget, Qt::WindowFlags f)
: inherited(format, parent, sharewidget, f)
{
#endif
this->constructor(sharewidget);
}

/*! constructor */
QuarterWidget::QuarterWidget(QWidget * parent, const QUARTER_GL_WIDGET * sharewidget, Qt::WindowFlags f)
#if QT_VERSION >= 0x060000
QuarterWidget::QuarterWidget(QWidget * parent, const QOpenGLWidget* sharewidget, Qt::WindowFlags f)
: inherited(parent, f)
#else
QuarterWidget::QuarterWidget(QWidget * parent, const QGLWidget * sharewidget, Qt::WindowFlags f)
: inherited(parent, sharewidget, f)
#endif
{
this->constructor(sharewidget);
}

/*! constructor */
QuarterWidget::QuarterWidget(QUARTER_GL_CONTEXT * context, QWidget * parent, const QUARTER_GL_WIDGET * sharewidget, Qt::WindowFlags f)
#if QT_VERSION >= 0x060000
QuarterWidget::QuarterWidget(QOpenGLContext* context, QWidget * parent, const QOpenGLWidget * sharewidget, Qt::WindowFlags f)
: inherited(/*context, */parent, f)
#else
QuarterWidget::QuarterWidget(QGLContext * context, QWidget * parent, const QGLWidget * sharewidget, Qt::WindowFlags f)
: inherited(context, parent, sharewidget, f)
#endif
{
this->constructor(sharewidget);
}

void
#if QT_VERSION >= 0x060000
QuarterWidget::constructor(const QOpenGLWidget * sharewidget)
#else
QuarterWidget::constructor(const QGLWidget* sharewidget)
#endif
QuarterWidget::constructor(const QUARTER_GL_WIDGET * sharewidget)
{
PRIVATE(this) = new QuarterWidgetP(this, sharewidget);

Expand Down
58 changes: 10 additions & 48 deletions src/Quarter/QuarterWidgetP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,20 +61,12 @@ using namespace SIM::Coin3D::Quarter;
class QuarterWidgetP_cachecontext {
public:
uint32_t id;
#if QT_VERSION >= 0x060000
SbList <const QOpenGLWidget *> widgetlist;
#else
SbList <const QGLWidget *> widgetlist;
#endif
SbList <const QUARTER_GL_WIDGET *> widgetlist;
};

static SbList <QuarterWidgetP_cachecontext *> * cachecontext_list = NULL;

#if QT_VERSION >= 0x060000
QuarterWidgetP::QuarterWidgetP(QuarterWidget * masterptr, const QOpenGLWidget * sharewidget)
#else
QuarterWidgetP::QuarterWidgetP(QuarterWidget * masterptr, const QGLWidget * sharewidget)
#endif
QuarterWidgetP::QuarterWidgetP(QuarterWidget * masterptr, const QUARTER_GL_WIDGET * sharewidget)
: master(masterptr),
scene(NULL),
eventfilter(NULL),
Expand Down Expand Up @@ -133,11 +125,7 @@ QuarterWidgetP::getCacheContextId(void) const
}

QuarterWidgetP_cachecontext *
#if QT_VERSION >= 0x060000
QuarterWidgetP::findCacheContext(QuarterWidget * widget, const QOpenGLWidget * sharewidget)
#else
QuarterWidgetP::findCacheContext(QuarterWidget * widget, const QGLWidget * sharewidget)
#endif
QuarterWidgetP::findCacheContext(QuarterWidget * widget, const QUARTER_GL_WIDGET * sharewidget)
{
if (cachecontext_list == NULL) {
// FIXME: static memory leak
Expand All @@ -148,56 +136,34 @@ QuarterWidgetP::findCacheContext(QuarterWidget * widget, const QGLWidget * share

for (int j = 0; j < cachecontext->widgetlist.getLength(); j++) {
if (cachecontext->widgetlist[j] == sharewidget) {
#if QT_VERSION >= 0x060000
cachecontext->widgetlist.append((const QOpenGLWidget*) widget);
#else
cachecontext->widgetlist.append((const QGLWidget*) widget);
#endif
cachecontext->widgetlist.append((const QUARTER_GL_WIDGET*) widget);
return cachecontext;
}
}
}
QuarterWidgetP_cachecontext * cachecontext = new QuarterWidgetP_cachecontext;
cachecontext->id = SoGLCacheContextElement::getUniqueCacheContext();
#if QT_VERSION >= 0x060000
cachecontext->widgetlist.append((const QOpenGLWidget*) widget);
#else
cachecontext->widgetlist.append((const QGLWidget*) widget);
#endif
cachecontext->widgetlist.append((const QUARTER_GL_WIDGET*) widget);
cachecontext_list->append(cachecontext);

return cachecontext;
}

void
#if QT_VERSION >= 0x060000
QuarterWidgetP::removeFromCacheContext(QuarterWidgetP_cachecontext * context, const QOpenGLWidget * widget)
QuarterWidgetP::removeFromCacheContext(QuarterWidgetP_cachecontext * context, const QUARTER_GL_WIDGET * widget)
{
context->widgetlist.removeItem((const QOpenGLWidget*) widget);
#else
QuarterWidgetP::removeFromCacheContext(QuarterWidgetP_cachecontext * context, const QGLWidget * widget)
{
context->widgetlist.removeItem((const QGLWidget*) widget);
#endif
context->widgetlist.removeItem((const QUARTER_GL_WIDGET*) widget);

if (context->widgetlist.getLength() == 0) { // last context in this share group?
assert(cachecontext_list);

for (int i = 0; i < cachecontext_list->getLength(); i++) {
if ((*cachecontext_list)[i] == context) {
#if QT_VERSION >= 0x060000
QOpenGLContext* glcontext = widget->context();
#else
QGLContext* glcontext = widget->context();
#endif
QUARTER_GL_CONTEXT* glcontext = widget->context();
if (glcontext) {
// set the context while calling destructingContext() (might trigger OpenGL calls)
if (glcontext->isValid()) {
#if QT_VERSION >= 0x060000
const_cast<QOpenGLWidget*> (widget)->makeCurrent();
#else
const_cast<QGLWidget*> (widget)->makeCurrent();
#endif
const_cast<QUARTER_GL_WIDGET*> (widget)->makeCurrent();
}
// fetch the cc_glglue context instance as a workaround for a bug fixed in Coin r12818
(void) cc_glglue_instance(context->id);
Expand All @@ -206,11 +172,7 @@ QuarterWidgetP::removeFromCacheContext(QuarterWidgetP_cachecontext * context, co
SoContextHandler::destructingContext(context->id);
if (glcontext) {
if (glcontext->isValid()) {
#if QT_VERSION >= 0x060000
const_cast<QOpenGLWidget*> (widget)->doneCurrent();
#else
const_cast<QGLWidget*> (widget)->doneCurrent();
#endif
const_cast<QUARTER_GL_WIDGET*> (widget)->doneCurrent();
}
}
delete context;
Expand Down
29 changes: 12 additions & 17 deletions src/Quarter/QuarterWidgetP.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,17 +39,21 @@
#include <QList>
#include <QUrl>

#if QT_VERSION >= 0x060000
#define QUARTER_GL_WIDGET QOpenGLWidget
#define QUARTER_GL_CONTEXT QOpenGLContext
#else
#define QUARTER_GL_WIDGET QGLWidget
#define QUARTER_GL_CONTEXT QGLContext
#endif

class SoNode;
class SoCamera;
class SoRenderManager;
class SoEventManager;
class SoDirectionalLight;
class QuarterWidgetP_cachecontext;
#if QT_VERSION >= 0x060000
class QOpenGLWidget;
#else
class QGLWidget;
#endif
class QUARTER_GL_WIDGET;
class QAction;
class QActionGroup;
class QMenu;
Expand All @@ -66,11 +70,7 @@ class ContextMenu;
class QuarterWidgetP {
public:

#if QT_VERSION >= 0x060000
QuarterWidgetP(class QuarterWidget * master, const QOpenGLWidget * sharewidget);
#else
QuarterWidgetP(class QuarterWidget * master, const QGLWidget * sharewidget);
#endif
QuarterWidgetP(class QuarterWidget * master, const QUARTER_GL_WIDGET * sharewidget);
~QuarterWidgetP();

SoCamera * searchForCamera(SoNode * root);
Expand Down Expand Up @@ -120,13 +120,8 @@ class QuarterWidgetP {
static bool nativeEventFilter(void * message, long * result);

private:
#if QT_VERSION >= 0x060000
QuarterWidgetP_cachecontext * findCacheContext(QuarterWidget * widget, const QOpenGLWidget * sharewidget);
static void removeFromCacheContext(QuarterWidgetP_cachecontext * context, const QOpenGLWidget* widget);
#else
QuarterWidgetP_cachecontext * findCacheContext(QuarterWidget * widget, const QGLWidget * sharewidget);
static void removeFromCacheContext(QuarterWidgetP_cachecontext * context, const QGLWidget * widget);
#endif
QuarterWidgetP_cachecontext * findCacheContext(QuarterWidget * widget, const QUARTER_GL_WIDGET * sharewidget);
static void removeFromCacheContext(QuarterWidgetP_cachecontext * context, const QUARTER_GL_WIDGET * widget);
};

#endif // QUARTER_QUARTERWIDGETP_H
Expand Down
6 changes: 1 addition & 5 deletions src/examples/MdiMainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,11 +150,7 @@ MdiMainWindow::createMdiChild(void)
this->mdiarea->addSubWindow(widget);

if (this->firstwidget == 0) {
#if QT_VERSION >= 0x060000
this->firstwidget = (QOpenGLWidget *) widget->quarterWidget();
#else
this->firstwidget = (QGLWidget*)widget->quarterWidget();
#endif
this->firstwidget = (QUARTER_GL_WIDGET *) widget->quarterWidget();
}

return widget;
Expand Down
11 changes: 4 additions & 7 deletions src/examples/MdiMainWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,11 @@

class QString;
#if QT_VERSION >= 0x060000
class QOpenGLWidget;
#define QUARTER_GL_WIDGET QOpenGLWidget
#else
class QGLWidget;
#define QUARTER_GL_WIDGET QGLWidget
#endif
class QUARTER_GL_WIDGET;
class QMdiArea;
class QDropEvent;
class QCloseEvent;
Expand Down Expand Up @@ -70,11 +71,7 @@ private slots:
MdiQuarterWidget * findMdiChild(const QString & filename);

QMdiArea * mdiarea;
#if QT_VERSION >= 0x060000
QOpenGLWidget* firstwidget; // for context sharing
#else
QGLWidget* firstwidget; // for context sharing
#endif
QUARTER_GL_WIDGET * firstwidget; // for context sharing
};

#endif // QUARTER_MDI_MAINWINDOW_H
6 changes: 1 addition & 5 deletions src/examples/MdiQuarterWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,7 @@ using namespace SIM::Coin3D::Quarter;
#include <Inventor/SoInput.h>
#include <Inventor/nodes/SoSeparator.h>

#if QT_VERSION >= 0x060000
MdiQuarterWidget::MdiQuarterWidget(QWidget * parent, const QOpenGLWidget * sharewidget)
#else
MdiQuarterWidget::MdiQuarterWidget(QWidget* parent, const QGLWidget* sharewidget)
#endif
MdiQuarterWidget::MdiQuarterWidget(QWidget * parent, const QUARTER_GL_WIDGET * sharewidget)
: inherited(parent)
{
this->quarterwidget = new QuarterWidget(this, sharewidget);
Expand Down
11 changes: 4 additions & 7 deletions src/examples/MdiQuarterWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,20 +42,17 @@ namespace SIM { namespace Coin3D { namespace Quarter {

class QString;
#if QT_VERSION >= 0x060000
class QOpenGLWidget;
#define QUARTER_GL_WIDGET QOpenGLWidget
#else
class QGLWidget;
#define QUARTER_GL_WIDGET QGLWidget
#endif
class QUARTER_GL_WIDGET;
using namespace SIM::Coin3D::Quarter;

class MdiQuarterWidget : public QMdiSubWindow {
typedef QMdiSubWindow inherited;
public:
#if QT_VERSION >= 0x060000
MdiQuarterWidget(QWidget * parent = 0, const QOpenGLWidget * sharewidget = 0);
#else
MdiQuarterWidget(QWidget* parent = 0, const QGLWidget* sharewidget = 0);
#endif
MdiQuarterWidget(QWidget * parent = 0, const QUARTER_GL_WIDGET * sharewidget = 0);
~MdiQuarterWidget();

bool loadFile(const QString & filename);
Expand Down
6 changes: 1 addition & 5 deletions src/plugins/QuarterWidgetPlugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,7 @@ class QuarterWidgetPluginP {
QuarterWidgetPluginP(void) {}
bool initialized;
bool manageactions;
#if QT_VERSION >= 0x060000
QOpenGLWidget* firstwidget; // for context sharing
#else
QGLWidget* firstwidget; // for context sharing
#endif
QUARTER_GL_WIDGET* firstwidget; // for context sharing
QDesignerFormEditorInterface * formeditor;
QList<QAction *> transparencytypeactions;
};
Expand Down

0 comments on commit 18a1422

Please sign in to comment.