diff options
Diffstat (limited to 'src/plugins/platforms/windows')
7 files changed, 35 insertions, 7 deletions
diff --git a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp index e1b0d36922..a237013c87 100644 --- a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp +++ b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp @@ -1319,7 +1319,7 @@ void QWindowsNativeFileDialogBase::setLabelText(QFileDialogOptions::DialogLabel static inline bool isClsid(const QString &s) { // detect "374DE290-123F-4565-9164-39C4925E467B". - static const QRegularExpression pattern(QLatin1String("[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{8}")); + static const QRegularExpression pattern(QLatin1String("\\A[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\z")); Q_ASSERT(pattern.isValid()); return pattern.match(s).hasMatch(); } @@ -2161,6 +2161,7 @@ namespace QWindowsDialogs { // QWindowsDialogHelperBase creation functions bool useHelper(QPlatformTheme::DialogType type) { +#if !defined(_WIN32_WCE) || _WIN32_WCE < 0x800 if (QWindowsIntegration::instance()->options() & QWindowsIntegration::NoNativeDialogs) return false; switch (type) { @@ -2179,10 +2180,14 @@ bool useHelper(QPlatformTheme::DialogType type) break; } return false; +#else + return false; +#endif // !defined(_WIN32_WCE) || _WIN32_WCE < 0x800 } QPlatformDialogHelper *createHelper(QPlatformTheme::DialogType type) { +#if !defined(_WIN32_WCE) || _WIN32_WCE < 0x800 if (QWindowsIntegration::instance()->options() & QWindowsIntegration::NoNativeDialogs) return 0; switch (type) { @@ -2206,6 +2211,9 @@ QPlatformDialogHelper *createHelper(QPlatformTheme::DialogType type) break; } return 0; +#else + return 0; +#endif // !defined(_WIN32_WCE) || _WIN32_WCE < 0x800 } } // namespace QWindowsDialogs diff --git a/src/plugins/platforms/windows/qwindowsfontengine.cpp b/src/plugins/platforms/windows/qwindowsfontengine.cpp index a160086326..0c213b933c 100644 --- a/src/plugins/platforms/windows/qwindowsfontengine.cpp +++ b/src/plugins/platforms/windows/qwindowsfontengine.cpp @@ -1150,6 +1150,11 @@ QFontEngine *QWindowsFontEngine::cloneWithSize(qreal pixelSize) const return fontEngine; } +Qt::HANDLE QWindowsFontEngine::handle() const +{ + return hfont; +} + void QWindowsFontEngine::initFontInfo(const QFontDef &request, int dpi) { diff --git a/src/plugins/platforms/windows/qwindowsfontengine.h b/src/plugins/platforms/windows/qwindowsfontengine.h index 7d85b7ef24..d4d98422a1 100644 --- a/src/plugins/platforms/windows/qwindowsfontengine.h +++ b/src/plugins/platforms/windows/qwindowsfontengine.h @@ -114,6 +114,7 @@ public: glyph_metrics_t alphaMapBoundingBox(glyph_t glyph, QFixed, const QTransform &matrix, GlyphFormat) Q_DECL_OVERRIDE; QFontEngine *cloneWithSize(qreal pixelSize) const Q_DECL_OVERRIDE; + Qt::HANDLE handle() const Q_DECL_OVERRIDE; bool supportsTransformation(const QTransform &transform) const Q_DECL_OVERRIDE; #ifndef Q_CC_MINGW diff --git a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp index eeb9e5eb6e..9dbfac34ef 100644 --- a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp +++ b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp @@ -645,6 +645,11 @@ QFontEngine *QWindowsFontEngineDirectWrite::cloneWithSize(qreal pixelSize) const return fontEngine; } +Qt::HANDLE QWindowsFontEngineDirectWrite::handle() const +{ + return m_directWriteFontFace; +} + void QWindowsFontEngineDirectWrite::initFontInfo(const QFontDef &request, int dpi) { diff --git a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h index 4558cfbdcc..0aa7e41500 100644 --- a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h +++ b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h @@ -98,6 +98,7 @@ public: QImage alphaRGBMapForGlyph(glyph_t t, QFixed subPixelPosition, const QTransform &xform) Q_DECL_OVERRIDE; QFontEngine *cloneWithSize(qreal pixelSize) const Q_DECL_OVERRIDE; + Qt::HANDLE handle() const Q_DECL_OVERRIDE; const QSharedPointer<QWindowsFontEngineData> &fontEngineData() const { return m_fontEngineData; } diff --git a/src/plugins/platforms/windows/qwindowsinputcontext.cpp b/src/plugins/platforms/windows/qwindowsinputcontext.cpp index 1fa208031f..ddadbbea5d 100644 --- a/src/plugins/platforms/windows/qwindowsinputcontext.cpp +++ b/src/plugins/platforms/windows/qwindowsinputcontext.cpp @@ -54,6 +54,8 @@ #include <QtGui/QPalette> #include <QtGui/QGuiApplication> +#include <private/qhighdpiscaling_p.h> + #include <algorithm> QT_BEGIN_NAMESPACE @@ -165,7 +167,8 @@ Q_CORE_EXPORT QLocale qt_localeFromLCID(LCID id); // from qlocale_win.cpp HIMC QWindowsInputContext::m_defaultContext = 0; QWindowsInputContext::CompositionContext::CompositionContext() : - hwnd(0), haveCaret(false), position(0), isComposing(false) + hwnd(0), haveCaret(false), position(0), isComposing(false), + factor(1) { } @@ -270,9 +273,12 @@ void QWindowsInputContext::cursorRectChanged() if (!m_compositionContext.hwnd) return; const QInputMethod *inputMethod = QGuiApplication::inputMethod(); - const QRect cursorRectangle = inputMethod->cursorRectangle().toRect(); - if (!cursorRectangle.isValid()) + const QRectF cursorRectangleF = inputMethod->cursorRectangle(); + if (!cursorRectangleF.isValid()) return; + const QRect cursorRectangle = + QRectF(cursorRectangleF.topLeft() * m_compositionContext.factor, + cursorRectangleF.size() * m_compositionContext.factor).toRect(); qCDebug(lcQpaInputMethods) << __FUNCTION__<< cursorRectangle; @@ -390,7 +396,7 @@ bool QWindowsInputContext::startComposition(HWND hwnd) qCDebug(lcQpaInputMethods) << __FUNCTION__ << fo << window << "language=" << m_languageId; if (!fo || QWindowsWindow::handleOf(window) != hwnd) return false; - initContext(hwnd, fo); + initContext(hwnd, QHighDpiScaling::factor(window), fo); startContextComposition(); return true; } @@ -522,12 +528,13 @@ bool QWindowsInputContext::endComposition(HWND hwnd) return true; } -void QWindowsInputContext::initContext(HWND hwnd, QObject *focusObject) +void QWindowsInputContext::initContext(HWND hwnd, qreal factor, QObject *focusObject) { if (m_compositionContext.hwnd) doneContext(); m_compositionContext.hwnd = hwnd; m_compositionContext.focusObject = focusObject; + m_compositionContext.factor = factor; // Create a hidden caret which is kept at the microfocus // position in update(). This is important for some // Chinese input methods. diff --git a/src/plugins/platforms/windows/qwindowsinputcontext.h b/src/plugins/platforms/windows/qwindowsinputcontext.h index f8ff08aa7c..4c08fa0ef2 100644 --- a/src/plugins/platforms/windows/qwindowsinputcontext.h +++ b/src/plugins/platforms/windows/qwindowsinputcontext.h @@ -65,6 +65,7 @@ class QWindowsInputContext : public QPlatformInputContext int position; bool isComposing; QPointer<QObject> focusObject; + qreal factor; }; public: explicit QWindowsInputContext(); @@ -94,7 +95,7 @@ private slots: void cursorRectChanged(); private: - void initContext(HWND hwnd, QObject *focusObject); + void initContext(HWND hwnd, qreal factor, QObject *focusObject); void doneContext(); void startContextComposition(); void endContextComposition(); |