aboutsummaryrefslogtreecommitdiffstats
path: root/src/winextras/qwinfunctions.h
blob: bfa14d15910df09eb773cb17e1b010b6270fb63d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
/****************************************************************************
**
** Copyright (C) 2013 Ivan Vizir <define-true-false@yandex.com>
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtWinExtras module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.  For licensing terms and
** conditions see http://qt.digia.com/licensing.  For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, 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, Digia gives you certain additional
** rights.  These rights are described in the Digia 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.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/

#ifndef QWINFUNCTIONS_H
#define QWINFUNCTIONS_H

#if 0
#pragma qt_class(QtWin)
#endif

#include <QtCore/qobject.h>
#include <QtCore/qt_windows.h>
#include <QtWinExtras/qwinextrasglobal.h>
#ifdef QT_WIDGETS_LIB
#include <QtWidgets/qwidget.h>
#endif

QT_BEGIN_NAMESPACE

class QPixmap;
class QImage;
class QBitmap;
class QColor;
class QWindow;
class QString;
class QMargins;

namespace QtWin
{
    enum HBitmapFormat
    {
        HBitmapNoAlpha,
        HBitmapPremultipliedAlpha,
        HBitmapAlpha
    };

    enum WindowFlip3DPolicy
    {
        FlipDefault,
        FlipExcludeBelow,
        FlipExcludeAbove
    };

    Q_WINEXTRAS_EXPORT HBITMAP createMask(const QBitmap &bitmap);
    Q_WINEXTRAS_EXPORT HBITMAP toHBITMAP(const QPixmap &p, HBitmapFormat format = HBitmapNoAlpha);
    Q_WINEXTRAS_EXPORT QPixmap fromHBITMAP(HBITMAP bitmap, HBitmapFormat format = HBitmapNoAlpha);
    Q_WINEXTRAS_EXPORT HICON toHICON(const QPixmap &p);
    Q_WINEXTRAS_EXPORT QImage imageFromHBITMAP(HDC hdc, HBITMAP bitmap, int width, int height);
    Q_WINEXTRAS_EXPORT QPixmap fromHICON(HICON icon);
    Q_WINEXTRAS_EXPORT HRGN toHRGN(const QRegion &region);
    Q_WINEXTRAS_EXPORT QRegion fromHRGN(HRGN hrgn);

    Q_WINEXTRAS_EXPORT QString stringFromHresult(HRESULT hresult);
    Q_WINEXTRAS_EXPORT QString errorStringFromHresult(HRESULT hresult);

    Q_WINEXTRAS_EXPORT QColor colorizationColor(bool *opaqueBlend = 0);
    Q_WINEXTRAS_EXPORT QColor realColorizationColor();

    Q_WINEXTRAS_EXPORT void setWindowExcludedFromPeek(QWindow *window, bool exclude);
    Q_WINEXTRAS_EXPORT bool isWindowExcludedFromPeek(QWindow *window);
    Q_WINEXTRAS_EXPORT void setWindowDisallowPeek(QWindow *window, bool disallow);
    Q_WINEXTRAS_EXPORT bool isWindowPeekDisallowed(QWindow *window);
    Q_WINEXTRAS_EXPORT void setWindowFlip3DPolicy(QWindow *window, WindowFlip3DPolicy policy);
    Q_WINEXTRAS_EXPORT WindowFlip3DPolicy windowFlip3DPolicy(QWindow *);

    Q_WINEXTRAS_EXPORT void extendFrameIntoClientArea(QWindow *window, int left, int top, int right, int bottom);
    Q_WINEXTRAS_EXPORT void extendFrameIntoClientArea(QWindow *window, const QMargins &margins);
    Q_WINEXTRAS_EXPORT void resetExtendedFrame(QWindow *window);

    Q_WINEXTRAS_EXPORT void enableBlurBehindWindow(QWindow *window, const QRegion &region);
    Q_WINEXTRAS_EXPORT void enableBlurBehindWindow(QWindow *window);
    Q_WINEXTRAS_EXPORT void disableBlurBehindWindow(QWindow *window);

    Q_WINEXTRAS_EXPORT bool isCompositionEnabled();
    Q_WINEXTRAS_EXPORT void setCompositionEnabled(bool enabled);
    Q_WINEXTRAS_EXPORT bool isCompositionOpaque();

    Q_WINEXTRAS_EXPORT void setCurrentProcessExplicitAppUserModelID(const QString &id);

    Q_WINEXTRAS_EXPORT void markFullscreenWindow(QWindow *, bool fullscreen = true);

    Q_WINEXTRAS_EXPORT void taskbarActivateTab(QWindow *);
    Q_WINEXTRAS_EXPORT void taskbarActivateTabAlt(QWindow *);
    Q_WINEXTRAS_EXPORT void taskbarAddTab(QWindow *);
    Q_WINEXTRAS_EXPORT void taskbarDeleteTab(QWindow *);

#ifdef QT_WIDGETS_LIB
    inline void setWindowExcludedFromPeek(QWidget *window, bool exclude)
    {
        window->createWinId();
        setWindowExcludedFromPeek(window->windowHandle(), exclude);
    }

    inline bool isWindowExcludedFromPeek(QWidget *window)
    {
        if (!window->windowHandle())
            return false;
        else
            return isWindowExcludedFromPeek(window->windowHandle());
    }

    inline void setWindowDisallowPeek(QWidget *window, bool disallow)
    {
        window->createWinId();
        setWindowDisallowPeek(window->windowHandle(), disallow);
    }

    inline bool isWindowPeekDisallowed(QWidget *window)
    {
        if (!window->windowHandle())
            return false;
        else
            return isWindowPeekDisallowed(window->windowHandle());
    }

    inline void setWindowFlip3DPolicy(QWidget *window, WindowFlip3DPolicy policy)
    {
        window->createWinId();
        setWindowFlip3DPolicy(window->windowHandle(), policy);
    }

    inline WindowFlip3DPolicy windowFlip3DPolicy(QWidget *window)
    {
        if (!window->windowHandle())
            return FlipDefault;
        else
            return windowFlip3DPolicy(window->windowHandle());
    }

    inline void extendFrameIntoClientArea(QWidget *window, const QMargins &margins)
    {
        window->createWinId();
        extendFrameIntoClientArea(window->windowHandle(), margins);
    }

    inline void extendFrameIntoClientArea(QWidget *window, int left, int top, int right, int bottom)
    {
        window->createWinId();
        extendFrameIntoClientArea(window->windowHandle(), left, top, right, bottom);
    }

    inline void resetExtendedFrame(QWidget *window)
    {
        if (window->windowHandle())
            resetExtendedFrame(window->windowHandle());
    }

    inline void enableBlurBehindWindow(QWidget *window, const QRegion &region)
    {
        window->createWinId();
        enableBlurBehindWindow(window->windowHandle(), region);
    }

    inline void enableBlurBehindWindow(QWidget *window)
    {
        window->createWinId();
        enableBlurBehindWindow(window->windowHandle());
    }

    inline void disableBlurBehindWindow(QWidget *window)
    {
        if (window->windowHandle())
            disableBlurBehindWindow(window->windowHandle());
    }

    inline void markFullscreenWindow(QWidget *window, bool fullscreen = true)
    {
        window->createWinId();
        markFullscreenWindow(window->windowHandle(), fullscreen);
    }

    inline void taskbarActivateTab(QWidget *window)
    {
        window->createWinId();
        taskbarActivateTab(window->windowHandle());
    }

    inline void taskbarActivateTabAlt(QWidget *window)
    {
        window->createWinId();
        taskbarActivateTabAlt(window->windowHandle());
    }

    inline void taskbarAddTab(QWidget *window)
    {
        window->createWinId();
        taskbarAddTab(window->windowHandle());
    }

    inline void taskbarDeleteTab(QWidget *window)
    {
        window->createWinId();
        taskbarDeleteTab(window->windowHandle());
    }
#endif // QT_WIDGETS_LIB
}

QT_END_NAMESPACE

#endif // QWINFUNCTIONS_H