summaryrefslogtreecommitdiffstats
path: root/src/gui/painting
diff options
context:
space:
mode:
authorRohan McGovern <rohan@mcgovern.id.au>2010-03-06 23:44:26 (GMT)
committerRohan McGovern <rohan@mcgovern.id.au>2010-03-06 23:44:26 (GMT)
commitad341d612129287793620bc84d3077afd64f97a4 (patch)
tree3d62b038c34985046ad1f3ff56c1c4e85a194ed2 /src/gui/painting
parentb20ef0ade0aec89b969bd0ae7f754c680e390c67 (diff)
parent2458cb45665b0fe3144266122f876bd541de9c42 (diff)
downloadQt-ad341d612129287793620bc84d3077afd64f97a4.zip
Qt-ad341d612129287793620bc84d3077afd64f97a4.tar.gz
Qt-ad341d612129287793620bc84d3077afd64f97a4.tar.bz2
Merge remote branch 'origin/4.6' into qt-4.7-from-4.6
Conflicts: configure.exe examples/multimedia/audioinput/audioinput.cpp src/corelib/io/qfsfileengine.cpp src/gui/egl/qegl_wince.cpp src/gui/egl/qeglproperties.cpp src/gui/egl/qeglproperties_p.h src/gui/embedded/directfb.pri src/gui/kernel/qapplication_win.cpp src/gui/painting/qdrawutil.cpp src/opengl/qgl_p.h src/sql/drivers/odbc/qsql_odbc.cpp src/sql/drivers/odbc/qsql_odbc.h tests/auto/auto.pro tests/auto/qgl/tst_qgl.cpp translations/assistant_adp_ru.ts
Diffstat (limited to 'src/gui/painting')
-rw-r--r--src/gui/painting/qbackingstore.cpp11
-rw-r--r--src/gui/painting/qgraphicssystem_raster.cpp13
-rw-r--r--src/gui/painting/qwindowsurface_qws.cpp17
-rw-r--r--src/gui/painting/qwindowsurface_qws_p.h2
4 files changed, 41 insertions, 2 deletions
diff --git a/src/gui/painting/qbackingstore.cpp b/src/gui/painting/qbackingstore.cpp
index c73d9f4..8de9eaa 100644
--- a/src/gui/painting/qbackingstore.cpp
+++ b/src/gui/painting/qbackingstore.cpp
@@ -352,6 +352,10 @@ void QWidgetBackingStore::beginPaint(QRegion &toClean, QWidget *widget, QWindowS
// Always flush repainted areas.
dirtyOnScreen += toClean;
+#ifdef Q_WS_QWS
+ toClean.translate(tlwOffset);
+#endif
+
#ifdef QT_NO_PAINT_DEBUG
windowSurface->beginPaint(toClean);
#else
@@ -766,7 +770,12 @@ void QWidgetBackingStore::paintWindowDecoration()
if (decorationRegion.isEmpty())
return;
- windowSurface->beginPaint(decorationRegion);
+ //### The QWS decorations do not always paint the pixels they promise to paint.
+ // This causes painting problems with QWSMemorySurface. Since none of the other
+ // window surfaces actually use the region, passing an empty region is a safe
+ // workaround.
+
+ windowSurface->beginPaint(QRegion());
QPaintEngine *engine = windowSurface->paintDevice()->paintEngine();
Q_ASSERT(engine);
diff --git a/src/gui/painting/qgraphicssystem_raster.cpp b/src/gui/painting/qgraphicssystem_raster.cpp
index f90aea0..909508e 100644
--- a/src/gui/painting/qgraphicssystem_raster.cpp
+++ b/src/gui/painting/qgraphicssystem_raster.cpp
@@ -41,19 +41,32 @@
#include "qgraphicssystem_raster_p.h"
+#ifdef Q_OS_SYMBIAN
+#include "private/qpixmap_s60_p.h"
+#include "private/qwindowsurface_s60_p.h"
+#else
#include "private/qpixmap_raster_p.h"
#include "private/qwindowsurface_raster_p.h"
+#endif
QT_BEGIN_NAMESPACE
QPixmapData *QRasterGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const
{
+#ifdef Q_OS_SYMBIAN
+ return new QS60PixmapData(type);
+#else
return new QRasterPixmapData(type);
+#endif
}
QWindowSurface *QRasterGraphicsSystem::createWindowSurface(QWidget *widget) const
{
+#ifdef Q_OS_SYMBIAN
+ return new QS60WindowSurface(widget);
+#else
return new QRasterWindowSurface(widget);
+#endif
}
QT_END_NAMESPACE
diff --git a/src/gui/painting/qwindowsurface_qws.cpp b/src/gui/painting/qwindowsurface_qws.cpp
index d3fc9de..a816ed2 100644
--- a/src/gui/painting/qwindowsurface_qws.cpp
+++ b/src/gui/painting/qwindowsurface_qws.cpp
@@ -80,7 +80,7 @@ static void qt_insertWindowSurface(int winId, QWSWindowSurface *surface)
inline bool isWidgetOpaque(const QWidget *w)
{
- return w->d_func()->isOpaque;
+ return w->d_func()->isOpaque && !w->testAttribute(Qt::WA_TranslucentBackground);
}
static inline QScreen *getScreen(const QWidget *w)
@@ -873,6 +873,21 @@ bool QWSMemorySurface::isValid() const
return true;
}
+// ### copied from qwindowsurface_raster.cpp -- should be cross-platform
+void QWSMemorySurface::beginPaint(const QRegion &rgn)
+{
+ if (!isWidgetOpaque(window())) {
+ QPainter p(&img);
+ p.setCompositionMode(QPainter::CompositionMode_Source);
+ const QVector<QRect> rects = rgn.rects();
+ const QColor blank = Qt::transparent;
+ for (QVector<QRect>::const_iterator it = rects.begin(); it != rects.end(); ++it) {
+ p.fillRect(*it, blank);
+ }
+ }
+ QWSWindowSurface::beginPaint(rgn);
+}
+
// from qwindowsurface.cpp
extern void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset);
diff --git a/src/gui/painting/qwindowsurface_qws_p.h b/src/gui/painting/qwindowsurface_qws_p.h
index a8371c8..30900dc 100644
--- a/src/gui/painting/qwindowsurface_qws_p.h
+++ b/src/gui/painting/qwindowsurface_qws_p.h
@@ -176,6 +176,8 @@ public:
QImage image() const { return img; }
QPoint painterOffset() const;
+ void beginPaint(const QRegion &rgn);
+
bool lock(int timeout = -1);
void unlock();