summaryrefslogtreecommitdiffstats
path: root/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2011-03-08 21:41:58 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2011-03-08 21:41:58 (GMT)
commit5ddf54654044df30bf4febada6cbdc46fcdbde62 (patch)
tree6fa945056c0deb3d5d303e8f5c4e996d66a9608a /src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp
parent3fde625831df6970ff2ad1e58b374541d46dfa97 (diff)
parent1e9b107b082282d4aadcffedcd67cb7e5e56aef8 (diff)
downloadQt-5ddf54654044df30bf4febada6cbdc46fcdbde62.zip
Qt-5ddf54654044df30bf4febada6cbdc46fcdbde62.tar.gz
Qt-5ddf54654044df30bf4febada6cbdc46fcdbde62.tar.bz2
Merge branch 'qt-master-from-4.7' of scm.dev.nokia.troll.no:qt/qt-integration into master-integration
* 'qt-master-from-4.7' of scm.dev.nokia.troll.no:qt/qt-integration: Invalidate the EGL surface of QMeeGoLivePixmapData when switching to Raster PinchArea example produced incorrect scaling. Added image conversion flag to prevent conversions. Fix TextInput auto test failure on mac. Fix word selection locking on string boundaries. Fix potential crash in QTextControl. QDeclarativePropertyMap::keys() cannot be called from qml Compensate for horizontal scroll in TextInput micro focus.
Diffstat (limited to 'src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp')
-rw-r--r--src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp b/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp
index e4f1900..2a2a098 100644
--- a/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp
+++ b/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp
@@ -49,6 +49,8 @@
#include <private/qpixmap_x11_p.h>
#include <stdio.h>
+static QMeeGoLivePixmapDataList all_live_pixmaps;
+
static EGLint lock_attribs[] = {
EGL_MAP_PRESERVE_PIXELS_KHR, EGL_TRUE,
EGL_LOCK_USAGE_HINT_KHR, EGL_READ_SURFACE_BIT_KHR | EGL_WRITE_SURFACE_BIT_KHR,
@@ -118,21 +120,29 @@ QMeeGoLivePixmapData::QMeeGoLivePixmapData(int w, int h, QImage::Format format)
backingX11Pixmap = new QPixmap(pmd);
initializeThroughEGLImage();
+
+ pos = all_live_pixmaps.insert(all_live_pixmaps.begin(), this);
}
QMeeGoLivePixmapData::QMeeGoLivePixmapData(Qt::HANDLE h) : QGLPixmapData(QPixmapData::PixmapType)
{
backingX11Pixmap = new QPixmap(QPixmap::fromX11Pixmap(h));
initializeThroughEGLImage();
+
+ pos = all_live_pixmaps.insert(all_live_pixmaps.begin(), this);
}
QMeeGoLivePixmapData::~QMeeGoLivePixmapData()
{
delete backingX11Pixmap;
+ all_live_pixmaps.erase(pos);
}
void QMeeGoLivePixmapData::initializeThroughEGLImage()
{
+ if (texture()->id != 0)
+ return;
+
QGLShareContextScope ctx(qt_gl_share_widget()->context());
QMeeGoExtensions::ensureInitialized();
@@ -245,6 +255,8 @@ bool QMeeGoLivePixmapData::scroll(int dx, int dy, const QRect &rect)
EGLSurface QMeeGoLivePixmapData::getSurfaceForBackingPixmap()
{
+ initializeThroughEGLImage();
+
// This code is a crative remix of the stuff that can be found in the
// Qt's TFP implementation in /src/opengl/qgl_x11egl.cpp ::bindiTextureFromNativePixmap
QX11PixmapData *pixmapData = static_cast<QX11PixmapData*>(backingX11Pixmap->data_ptr().data());
@@ -290,3 +302,12 @@ void QMeeGoLivePixmapData::destroySurfaceForPixmapData(QPixmapData* pmd)
pixmapData->gl_surface = 0;
}
}
+
+void QMeeGoLivePixmapData::invalidateSurfaces()
+{
+ foreach (QMeeGoLivePixmapData *data, all_live_pixmaps) {
+ QX11PixmapData *pixmapData = static_cast<QX11PixmapData*>(data->backingX11Pixmap->data_ptr().data());
+ *data->texture() = QGLTexture();
+ pixmapData->gl_surface = 0;
+ }
+}