diff options
author | Qt Continuous Integration System <qt-info@nokia.com> | 2011-08-03 14:23:55 (GMT) |
---|---|---|
committer | Qt Continuous Integration System <qt-info@nokia.com> | 2011-08-03 14:23:55 (GMT) |
commit | 920ce5ed71bc456e429b887801a8d8bea7a3db0d (patch) | |
tree | ac2f3414c1dbf8ebbbccb55f2c44e709225db850 /src | |
parent | 6376a09e2fd6c2668c771f02217f9e7f58bafd99 (diff) | |
parent | 2eb50141ed4431861512be36d9a578aa7608186e (diff) | |
download | Qt-920ce5ed71bc456e429b887801a8d8bea7a3db0d.zip Qt-920ce5ed71bc456e429b887801a8d8bea7a3db0d.tar.gz Qt-920ce5ed71bc456e429b887801a8d8bea7a3db0d.tar.bz2 |
Merge branch 'master' of scm.dev.nokia.troll.no:qt/qt-fire-staging into master-integration
* 'master' of scm.dev.nokia.troll.no:qt/qt-fire-staging:
Fixed compile error in qwindowsurface_qws.cpp.
Fixed regression introduced by 5842d19cf3dff37a85c.
Fix gamma corrected source color in GL
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/painting/qpaintengine_raster.cpp | 13 | ||||
-rw-r--r-- | src/gui/painting/qwindowsurface_qws.cpp | 2 | ||||
-rw-r--r-- | src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp | 48 |
3 files changed, 40 insertions, 23 deletions
diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index d77ef82..76d7316 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -2399,10 +2399,15 @@ void QRasterPaintEngine::drawImage(const QRectF &r, const QImage &img, const QRe QPointF rr_tl = s->matrix.map(r.topLeft()); QPointF rr_br = s->matrix.map(r.bottomRight()); - const int x1 = qRound(rr_tl.x()); - const int y1 = qRound(rr_tl.y()); - const int x2 = qRound(rr_br.x()); - const int y2 = qRound(rr_br.y()); + int x1 = qRound(rr_tl.x()); + int y1 = qRound(rr_tl.y()); + int x2 = qRound(rr_br.x()); + int y2 = qRound(rr_br.y()); + + if (x1 > x2) + qSwap(x1, x2); + if (y1 > y2) + qSwap(y1, y2); fillRect_normalized(QRect(x1, y1, x2-x1, y2-y1), &d->image_filler_xform, d); return; diff --git a/src/gui/painting/qwindowsurface_qws.cpp b/src/gui/painting/qwindowsurface_qws.cpp index 3789a33..96e2652 100644 --- a/src/gui/painting/qwindowsurface_qws.cpp +++ b/src/gui/painting/qwindowsurface_qws.cpp @@ -1087,7 +1087,7 @@ void QWSSharedMemSurface::setDirectRegion(const QRegion &r, int id) const QRegion QWSSharedMemSurface::directRegion() const { - if (mem.address() && *(uint *)mem.address() == uint(directRegionId()) + if (mem.address() && *(uint *)mem.address() == uint(directRegionId())) return QWSMemorySurface::directRegion(); return QRegion(); } diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index a961366..dbbb07c 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -1580,6 +1580,11 @@ static bool fontSmoothingApproximately(qreal target) } #endif +static inline qreal qt_sRGB_to_linear_RGB(qreal f) +{ + return f > 0.04045 ? qPow((f + 0.055) / 1.055, 2.4) : f / 12.92; +} + // #define QT_OPENGL_DRAWCACHEDGLYPHS_INDEX_ARRAY_VBO void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyphType, @@ -1739,12 +1744,34 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp } QBrush pensBrush = q->state()->pen.brush(); - setBrush(pensBrush); - if (glyphType == QFontEngineGlyphCache::Raster_RGBMask) { + bool srgbFrameBufferEnabled = false; + if (pensBrush.style() == Qt::SolidPattern && + (ctx->d_ptr->extension_flags & QGLExtensions::SRGBFrameBuffer)) { +#if defined(Q_WS_MAC) + if (glyphType == QFontEngineGlyphCache::Raster_RGBMask) +#elif defined(Q_WS_WIN) + if (glyphType != QFontEngineGlyphCache::Raster_RGBMask || fontSmoothingApproximately(2.1)) +#else + if (false) +#endif + { + QColor c = pensBrush.color(); + qreal red = qt_sRGB_to_linear_RGB(c.redF()); + qreal green = qt_sRGB_to_linear_RGB(c.greenF()); + qreal blue = qt_sRGB_to_linear_RGB(c.blueF()); + c = QColor::fromRgbF(red, green, blue, c.alphaF()); + pensBrush.setColor(c); + + glEnable(FRAMEBUFFER_SRGB_EXT); + srgbFrameBufferEnabled = true; + } + } - // Subpixel antialiasing without gamma correction + setBrush(pensBrush); + if (glyphType == QFontEngineGlyphCache::Raster_RGBMask) { + // Subpixel antialiasing with gamma correction QPainter::CompositionMode compMode = q->state()->composition_mode; Q_ASSERT(compMode == QPainter::CompositionMode_Source || compMode == QPainter::CompositionMode_SourceOver); @@ -1851,21 +1878,6 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp } } - bool srgbFrameBufferEnabled = false; - if (ctx->d_ptr->extension_flags & QGLExtensions::SRGBFrameBuffer) { -#if defined(Q_WS_MAC) - if (glyphType == QFontEngineGlyphCache::Raster_RGBMask) -#elif defined(Q_WS_WIN) - if (glyphType != QFontEngineGlyphCache::Raster_RGBMask || fontSmoothingApproximately(2.1)) -#else - if (false) -#endif - { - glEnable(FRAMEBUFFER_SRGB_EXT); - srgbFrameBufferEnabled = true; - } - } - #if defined(QT_OPENGL_DRAWCACHEDGLYPHS_INDEX_ARRAY_VBO) glDrawElements(GL_TRIANGLE_STRIP, 6 * numGlyphs, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); |