summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/windows/qwindowscontext.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/windows/qwindowscontext.h')
-rw-r--r--src/plugins/platforms/windows/qwindowscontext.h171
1 files changed, 171 insertions, 0 deletions
diff --git a/src/plugins/platforms/windows/qwindowscontext.h b/src/plugins/platforms/windows/qwindowscontext.h
new file mode 100644
index 0000000000..8985c7f0f9
--- /dev/null
+++ b/src/plugins/platforms/windows/qwindowscontext.h
@@ -0,0 +1,171 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (info@qt.nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSCONTEXT_H
+#define QWINDOWSCONTEXT_H
+
+#include "qtwindowsglobal.h"
+#include "qtwindows_additional.h"
+
+#include <QtCore/QScopedPointer>
+#include <QtCore/QSharedPointer>
+
+QT_BEGIN_NAMESPACE
+
+class QWindow;
+class QPlatformScreen;
+class QWindowsWindow;
+class QWindowsMimeConverter;
+struct QWindowCreationContext;
+struct QWindowsContextPrivate;
+class QPoint;
+
+struct QWindowsUser32DLL
+{
+ QWindowsUser32DLL();
+ inline void init();
+ inline bool initTouch();
+
+ typedef BOOL (WINAPI *RegisterTouchWindow)(HWND, ULONG);
+ typedef BOOL (WINAPI *GetTouchInputInfo)(HANDLE, UINT, PVOID, int);
+ typedef BOOL (WINAPI *CloseTouchInputHandle)(HANDLE);
+ typedef BOOL (WINAPI *SetLayeredWindowAttributes)(HWND, COLORREF, BYTE, DWORD);
+ typedef BOOL (WINAPI *UpdateLayeredWindow)(HWND, HDC , const POINT *,
+ const SIZE *, HDC, const POINT *, COLORREF,
+ const BLENDFUNCTION *, DWORD);
+ typedef BOOL (WINAPI *UpdateLayeredWindowIndirect)(HWND, const UPDATELAYEREDWINDOWINFO *);
+ typedef BOOL (WINAPI *IsHungAppWindow)(HWND);
+
+ // Functions missing in Q_CC_GNU stub libraries.
+ SetLayeredWindowAttributes setLayeredWindowAttributes;
+ UpdateLayeredWindow updateLayeredWindow;
+ UpdateLayeredWindowIndirect updateLayeredWindowIndirect;
+
+ // Functions missing in older versions of Windows
+ IsHungAppWindow isHungAppWindow;
+
+ // Touch functions from Windows 7 onwards (also for use with Q_CC_MSVC).
+ RegisterTouchWindow registerTouchWindow;
+ GetTouchInputInfo getTouchInputInfo;
+ CloseTouchInputHandle closeTouchInputHandle;
+};
+
+class QWindowsContext
+{
+ Q_DISABLE_COPY(QWindowsContext)
+public:
+ enum SystemInfoFlags
+ {
+ SI_RTL_Extensions = 0x1,
+ SI_SupportsTouch = 0x2
+ };
+
+ // Verbose flag set by environment variable QT_LIGHTHOUSE_WINDOWS_VERBOSE
+ static int verboseIntegration;
+ static int verboseWindows;
+ static int verboseBackingStore;
+ static int verboseEvents;
+ static int verboseFonts;
+ static int verboseGL;
+ static int verboseOLE;
+
+ explicit QWindowsContext(bool isOpenGL);
+ ~QWindowsContext();
+
+ bool isOpenGL() const;
+
+ int defaultDPI() const;
+
+ QString registerWindowClass(const QWindow *w, bool isGL);
+ QString registerWindowClass(QString cname, WNDPROC proc,
+ unsigned style = 0, HBRUSH brush = 0,
+ bool icon = false);
+ HWND createDummyWindow(const QString &classNameIn,
+ const wchar_t *windowName,
+ WNDPROC wndProc = 0, DWORD style = WS_OVERLAPPED);
+
+ HDC displayContext() const;
+ int screenDepth() const;
+
+ static QWindowsContext *instance();
+
+ static QString windowsErrorMessage(unsigned long errorCode);
+
+ void addWindow(HWND, QWindowsWindow *w);
+ void removeWindow(HWND);
+
+ QWindowsWindow *findPlatformWindow(HWND) const;
+ QWindow *findWindow(HWND) const;
+ QWindowsWindow *findPlatformWindowAt(HWND parent, const QPoint &screenPoint,
+ unsigned cwex_flags) const;
+
+ QWindow *windowUnderMouse() const;
+
+ inline bool windowsProc(HWND hwnd, UINT message,
+ QtWindows::WindowsEventType et,
+ WPARAM wParam, LPARAM lParam, LRESULT *result);
+
+ QWindow *keyGrabber() const;
+ void setKeyGrabber(QWindow *hwnd);
+
+ void setWindowCreationContext(const QSharedPointer<QWindowCreationContext> &ctx);
+
+ // Returns a combination of SystemInfoFlags
+ unsigned systemInfo() const;
+
+ QWindowsMimeConverter &mimeConverter() const;
+
+ static QWindowsUser32DLL user32dll;
+
+ static QByteArray comErrorString(HRESULT hr);
+
+private:
+ void unregisterWindowClasses();
+
+ QScopedPointer<QWindowsContextPrivate> d;
+ static QWindowsContext *m_instance;
+};
+
+extern "C" LRESULT QT_WIN_CALLBACK qWindowsWndProc(HWND, UINT, WPARAM, LPARAM);
+
+QT_END_NAMESPACE
+
+#endif // QWINDOWSCONTEXT_H