Bug 744112 - Qt QGL context conflict with WebGL context current states. r=dougt

This commit is contained in:
Oleg Romashin 2012-04-24 09:23:26 -04:00
parent d485f6d4b3
commit ef8fed916e
2 changed files with 28 additions and 2 deletions

View File

@ -41,6 +41,7 @@
#include <QApplication>
#include <QGraphicsWidget>
#include <QGraphicsView>
#include <QtOpenGL/QGLWidget>
#include "nsCOMPtr.h"
@ -149,6 +150,7 @@ public:
: QGraphicsView (new QGraphicsScene(), aParent)
, mEventHandler(this)
, mTopLevelWidget(NULL)
, mGLWidget(0)
{
setMouseTracking(true);
setFrameShape(QFrame::NoFrame);
@ -160,6 +162,18 @@ public:
mTopLevelWidget = aTopLevel;
}
void setGLWidgetEnabled(bool aEnabled)
{
if (aEnabled) {
mGLWidget = new QGLWidget();
setViewport(mGLWidget);
} else {
delete mGLWidget;
mGLWidget = 0;
setViewport(new QWidget());
}
}
protected:
virtual bool event(QEvent* aEvent)
@ -180,9 +194,18 @@ protected:
QGraphicsView::closeEvent(aEvent);
}
virtual void paintEvent(QPaintEvent* aEvent)
{
if (mGLWidget) {
mGLWidget->makeCurrent();
}
QGraphicsView::paintEvent(aEvent);
}
private:
MozQGraphicsViewEvents mEventHandler;
IMozQWidget* mTopLevelWidget;
QGLWidget* mGLWidget;
};
#ifdef MOZ_ENABLE_MEEGOTOUCH

View File

@ -2715,11 +2715,14 @@ nsWindow::createQWidget(MozQWidget *parent,
newView->setWindowModality(Qt::WindowModal);
}
#ifdef MOZ_PLATFORM_MAEMO
#if defined(MOZ_PLATFORM_MAEMO) || defined(MOZ_GL_PROVIDER)
if (GetShouldAccelerate()) {
// Only create new OGL widget if it is not yet installed
if (!HasGLContext()) {
newView->setViewport(new QGLWidget());
MozQGraphicsView *qview = qobject_cast<MozQGraphicsView*>(newView);
if (qview) {
qview->setGLWidgetEnabled(true);
}
}
}
#endif