From 491b746473cf205cb08f64a2b1633a09d3c33ac4 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Tue, 7 Apr 2015 04:11:35 +0400 Subject: [PATCH] Fix build with -directwrite There were several issues caught by GCC: * deleting object of polymorphic class type which has non-virtual destructor might cause undefined behaviour * comparison between signed and unsigned integer expressions * 'GetUserDefaultLocaleName' was not declared in this scope (depends on WINVER >= 0x0600) Change-Id: I39f2cc0d5e158f4d85377edd55e9f74a512c7303 Reviewed-by: Lars Knoll Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/plugins/platforms/windows/qwindowsfontdatabase.cpp | 8 +++----- .../windows/qwindowsfontenginedirectwrite.cpp | 10 +++++++++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp index d1c02491165..b979dc6c4e5 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp +++ b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp @@ -303,8 +303,7 @@ namespace { , m_referenceCount(0) { } - - ~DirectWriteFontFileStream() + virtual ~DirectWriteFontFileStream() { } @@ -355,7 +354,7 @@ namespace { OUT void **fragmentContext) { *fragmentContext = NULL; - if (fragmentSize + fileOffset <= m_fontData.size()) { + if (fileOffset + fragmentSize <= quint64(m_fontData.size())) { *fragmentStart = m_fontData.data() + fileOffset; return S_OK; } else { @@ -384,8 +383,7 @@ namespace { { public: DirectWriteFontFileLoader() : m_referenceCount(0) {} - - ~DirectWriteFontFileLoader() + virtual ~DirectWriteFontFileLoader() { } diff --git a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp index 85cd92b234d..75449e22ed8 100644 --- a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp +++ b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp @@ -33,6 +33,10 @@ #ifndef QT_NO_DIRECTWRITE +#if WINVER < 0x0600 +# undef WINVER +# define WINVER 0x0600 +#endif #if _WIN32_WINNT < 0x0600 #undef _WIN32_WINNT #define _WIN32_WINNT 0x0600 @@ -61,10 +65,14 @@ namespace { class GeometrySink: public IDWriteGeometrySink { public: - GeometrySink(QPainterPath *path) : m_path(path), m_refCount(0) + GeometrySink(QPainterPath *path) + : m_refCount(0), m_path(path) { Q_ASSERT(m_path != 0); } + virtual ~GeometrySink() + { + } IFACEMETHOD_(void, AddBeziers)(const D2D1_BEZIER_SEGMENT *beziers, UINT bezierCount); IFACEMETHOD_(void, AddLines)(const D2D1_POINT_2F *points, UINT pointCount);