From b3187d850aa6e0a4818e2a982d13aab77ca20a82 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Thu, 28 Jul 2011 10:55:21 +0200 Subject: Fix gamma corrected source color in GL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GL_EXT_framebuffer_sRGB expects linear RGB as input color, thus we need to convert sRGB based input color into linear RGB first before using glBlendColor with it. Task-number: QTBUG-20574 Reviewed-by: Samuel Rødal --- .../gl2paintengineex/qpaintengineex_opengl2.cpp | 48 ++++++++++++++-------- 1 file changed, 30 insertions(+), 18 deletions(-) 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); -- cgit v0.12 From 6cc32482afd610e2808bde42b6a01dd78b79d809 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 2 Aug 2011 13:38:04 +0200 Subject: Detect linked fonts by name (insead of via CLinkedTypeface* Api) The detection of Linked Fonts via CLinkedTypeface* Api does not work in all cases. It works in QML apps, but not in QWidgets based apps. The reason is still unclear. This commit replaces the CLinkedTypeface* Api based code of commit fa344b355d311fce7954e2fd1a22a87a88194783 whith a simple type face anme analysis. Assumption is that the names of Linked Fonts always end with "LF" and are all upper case. This patch has been tested by more people than just me, but it is too dirty to mention the others as reviewer. I take the shame and blame. Task-Number: QTBUG-20007 --- src/gui/text/qfontdatabase_s60.cpp | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/src/gui/text/qfontdatabase_s60.cpp b/src/gui/text/qfontdatabase_s60.cpp index ffecca7..f29c880 100644 --- a/src/gui/text/qfontdatabase_s60.cpp +++ b/src/gui/text/qfontdatabase_s60.cpp @@ -62,33 +62,14 @@ #define SYMBIAN_LINKEDFONTS_SUPPORTED #endif // !SYMBIAN_VERSION_9_4 -#ifdef SYMBIAN_LINKEDFONTS_SUPPORTED -#include -#endif // SYMBIAN_LINKEDFONTS_SUPPORTED - QT_BEGIN_NAMESPACE -#ifdef SYMBIAN_LINKEDFONTS_SUPPORTED -static bool isLinkedFontL(const TDesC &aTypefaceName) -{ - CLinkedTypefaceSpecification *linkedspec = CLinkedTypefaceSpecification::NewLC(aTypefaceName); - CFbsTypefaceStore *tfs = CFbsTypefaceStore::NewL(NULL); - CleanupStack::PushL(tfs); - linkedspec->FetchLinkedTypefaceSpecificationL(*tfs); - CleanupStack::PopAndDestroy(tfs); - CleanupStack::PopAndDestroy(linkedspec); - return true; -} -#endif // SYMBIAN_LINKEDFONTS_SUPPORTED - bool qt_symbian_isLinkedFont(const TDesC &typefaceName) // Also used in qfont_s60.cpp { bool isLinkedFont = false; #ifdef SYMBIAN_LINKEDFONTS_SUPPORTED - if (RFbsSession::Connect() == KErrNone) { - TRAP_IGNORE(isLinkedFont = isLinkedFontL(typefaceName)); - RFbsSession::Disconnect(); - } + const QString name((const QChar*)typefaceName.Ptr(), typefaceName.Length()); + isLinkedFont = name.endsWith(QLatin1String("LF")) && name == name.toUpper(); #endif // SYMBIAN_LINKEDFONTS_SUPPORTED return isLinkedFont; } -- cgit v0.12 From 6dae82b00861175051b563e3c7db4113825e010f Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 2 Aug 2011 14:44:12 +0300 Subject: Mark all Symbian debug binaries debuggable by default CODA 4.1.* cannot be used to debug binaries that do not have DEBUGGABLE_UDEBONLY keyword specified, so add this keyword to all projects by default. Adding this keyword has no impact for previous versions of CODA or TRK. Task-number: QTBUG-20669 Reviewed-by: Shane Kearns --- mkspecs/common/symbian/symbian-mmp.conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mkspecs/common/symbian/symbian-mmp.conf b/mkspecs/common/symbian/symbian-mmp.conf index 8ed326a..fa2a815 100644 --- a/mkspecs/common/symbian/symbian-mmp.conf +++ b/mkspecs/common/symbian/symbian-mmp.conf @@ -58,3 +58,5 @@ symbian-sbsv2 { QMAKE_SBSV2_DEL_TREE = $(GNURM) -rf } +# Mark all debug executables debuggable. +MMP_RULES += DEBUGGABLE_UDEBONLY -- cgit v0.12 From 983dca7f3d92bd4f284f83464c164d5fa580b48f Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Tue, 2 Aug 2011 16:37:51 +0200 Subject: Support debuggable in the makefile build system Task-number: QTBUG-20697 Reviewed-by: Shane Kearns Reviewed-by: Miikka Heikkinen --- mkspecs/common/symbian/symbian-makefile.conf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mkspecs/common/symbian/symbian-makefile.conf b/mkspecs/common/symbian/symbian-makefile.conf index a725df3..14acd69 100644 --- a/mkspecs/common/symbian/symbian-makefile.conf +++ b/mkspecs/common/symbian/symbian-makefile.conf @@ -34,6 +34,11 @@ QMAKE_ELF2E32_FLAGS = --dlldata \ --compressionmethod bytepair \ --unpaged +CONFIG(debug, debug|release) { + QMAKE_ELF2E32_FLAGS += \ + --debuggable +} + QMAKE_PREFIX_SHLIB = CONFIG *= no_plugin_name_prefix QMAKE_PREFIX_STATICLIB = -- cgit v0.12 From 5e90ec1151c45ff26143d5eae0714bb2c8cca3e7 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Tue, 2 Aug 2011 18:42:20 +0200 Subject: Remove DerivedSources.pro from WebKit. This .pro file gets processed by qmake while looking recursively for pro files. This may cause warnings and the file isn't necessary since derived sources have to be pre-generated before importing WebKit into src/3rdparty. Reviewed-by: Benjamin Poulain --- .../webkit/WebKit/qt/Api/DerivedSources.pro | 107 --------------------- 1 file changed, 107 deletions(-) delete mode 100644 src/3rdparty/webkit/WebKit/qt/Api/DerivedSources.pro diff --git a/src/3rdparty/webkit/WebKit/qt/Api/DerivedSources.pro b/src/3rdparty/webkit/WebKit/qt/Api/DerivedSources.pro deleted file mode 100644 index 62546f6..0000000 --- a/src/3rdparty/webkit/WebKit/qt/Api/DerivedSources.pro +++ /dev/null @@ -1,107 +0,0 @@ -TEMPLATE = lib -TARGET = dummy - -include(headers.pri) - -CONFIG -= debug_and_release - -DESTDIR = ../../../include/QtWebKit - -QUOTE = "" -DOUBLE_ESCAPED_QUOTE = "" -ESCAPE = "" -win32-msvc*|symbian { - ESCAPE = "^" -} else:win32-g++*:isEmpty(QMAKE_SH) { - # MinGW's make will run makefile commands using sh, even if make - # was run from the Windows shell, if it finds sh in the path. - ESCAPE = "^" -} else { - QUOTE = "\'" - DOUBLE_ESCAPED_QUOTE = "\\\'" -} - -qtheader_module.target = $${DESTDIR}/QtWebKit -qtheader_module.depends = $${_PRO_FILE_} -qtheader_module.commands = echo $${QUOTE}$${LITERAL_HASH}ifndef QT_QTWEBKIT_MODULE_H$${QUOTE} > $${qtheader_module.target} && -qtheader_module.commands += echo $${QUOTE}$${LITERAL_HASH}define QT_QTWEBKIT_MODULE_H$${QUOTE} >> $${qtheader_module.target} && -qtheader_module.commands += echo $${QUOTE}$${LITERAL_HASH}include $${ESCAPE}$${QUOTE} >> $${qtheader_module.target} && -WEBKIT_CLASS_HEADERS = $${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}PWD/QtWebKit - -regex = ".*\\sclass\\sQWEBKIT_EXPORT\\s(\\w+)\\s(.*)" - -for(HEADER, WEBKIT_API_HEADERS) { - # 1. Append to QtWebKit header that includes all other header files - # Quotes need to be escaped once more when placed in eval() - eval(qtheader_module.commands += echo $${DOUBLE_ESCAPED_QUOTE}\$${LITERAL_HASH}include \\\"$$basename(HEADER)\\\"$${DOUBLE_ESCAPED_QUOTE} >> $${qtheader_module.target} &&) - - HEADER_NAME = $$basename(HEADER) - HEADER_TARGET = $$replace(HEADER_NAME, [^a-zA-Z0-9_], -) - HEADER_TARGET = "qtheader-$${HEADER_TARGET}" - - # 2. Create forwarding header files for qwebframe.h, etc. - # Normally they contain absolute paths, for package builds we make the path relative so that - # the package sources are relocatable. - - PATH_TO_HEADER = $$HEADER - CONFIG(standalone_package): PATH_TO_HEADER = ../../WebKit/qt/Api/$$basename(HEADER) - - eval($${HEADER_TARGET}.target = $${DESTDIR}/$${HEADER_NAME}) - eval($${HEADER_TARGET}.depends = $$HEADER) - eval($${HEADER_TARGET}.commands = echo $${DOUBLE_ESCAPED_QUOTE}\$${LITERAL_HASH}include \\\"$$PATH_TO_HEADER\\\"$${DOUBLE_ESCAPED_QUOTE} > $$eval($${HEADER_TARGET}.target)) - - QMAKE_EXTRA_TARGETS += $$HEADER_TARGET - qtheader_module.depends += $$eval($${HEADER_TARGET}.target) - - # 3. Extract class names of exported classes from the headers and generate - # the class name header files - - src_words = $$cat($$HEADER) - # Really make sure we're dealing with words - src_words = $$split(src_words, " ") - - src = $$join(src_words, $${LITERAL_WHITESPACE}) - for(ever) { - # Looking up by line is faster, so we try that first - res = $$find(src_words, "QWEBKIT_EXPORT") - isEmpty(res):break() - - # Then do a slow lookup to ensure we're dealing with an exported class - res = $$find(src, $$regex) - isEmpty(res):break() - - exp = $$replace(src, $$regex, "EXPORTED_CLASS = \\1") - eval($$exp) - - CLASS_TARGET = "qtheader_$${EXPORTED_CLASS}" - - eval($${CLASS_TARGET}.target = $${DESTDIR}/$${EXPORTED_CLASS}) - eval($${CLASS_TARGET}.depends = $$eval($${HEADER_TARGET}.target)) - eval($${CLASS_TARGET}.commands = echo $${DOUBLE_ESCAPED_QUOTE}\$${LITERAL_HASH}include \\\"$$basename(HEADER)\\\"$${DOUBLE_ESCAPED_QUOTE} > $$eval($${CLASS_TARGET}.target)) - - QMAKE_EXTRA_TARGETS += $$CLASS_TARGET - WEBKIT_CLASS_HEADERS += $${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}PWD/$${EXPORTED_CLASS} - - generated_files.depends += $$eval($${CLASS_TARGET}.target) - qtheader_pri.depends += $$eval($${CLASS_TARGET}.target) - - # Qt's QRegExp does not support inline non-greedy matching, - # so we'll have to work around it by updating the haystack - src = $$replace(src, $$regex, "\\2") - src_words = $$join(src, $${LITERAL_WHITESPACE}) - } -} - -qtheader_module.commands += echo $${QUOTE}$${LITERAL_HASH}endif // QT_QTWEBKIT_MODULE_H$${QUOTE} >> $${qtheader_module.target} -QMAKE_EXTRA_TARGETS += qtheader_module - -qtheader_pri.target = $${DESTDIR}/classheaders.pri -qtheader_pri.depends += $${_PRO_FILE_} -qtheader_pri.commands = echo $${QUOTE}WEBKIT_CLASS_HEADERS = $${WEBKIT_CLASS_HEADERS}$${QUOTE} > $${qtheader_pri.target} -QMAKE_EXTRA_TARGETS += qtheader_pri - -generated_files.depends += $${qtheader_module.target} $${qtheader_pri.target} -QMAKE_EXTRA_TARGETS += generated_files - - - -- cgit v0.12 From e110428463ac32a439bad720c4276660fd8e3023 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 3 Aug 2011 09:23:07 +0200 Subject: Fixed regression introduced by 5842d19cf3dff37a85c. We need a normalized rectangle. Reviewed-by: aavit --- src/gui/painting/qpaintengine_raster.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 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; -- cgit v0.12 From bd3d0818c99ea2f8b7b3149b2e311b4b89e01d71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 3 Aug 2011 09:27:19 +0200 Subject: Fixed compile error in qwindowsurface_qws.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTBUG-20713 Reviewed-by: Jørgen Lind --- src/gui/painting/qwindowsurface_qws.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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(); } -- cgit v0.12