1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the plugins of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or (at your option) the GNU General
28 ** Public license version 3 or any later version approved by the KDE Free
29 ** Qt Foundation. The licenses are as published by the Free Software
30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31 ** included in the packaging of this file. Please review the following
32 ** information to ensure the GNU General Public License requirements will
33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34 ** https://www.gnu.org/licenses/gpl-3.0.html.
35 **
36 ** $QT_END_LICENSE$
37 **
38 ****************************************************************************/
39 
40 #ifndef QDIRECTFBCONVENIENCE_H
41 #define QDIRECTFBCONVENIENCE_H
42 
43 #include <QtGui/qimage.h>
44 #include <QtCore/QHash>
45 #include <QtCore/QEvent>
46 #include <QtGui/QPixmap>
47 
48 #include <directfb.h>
49 
50 QT_BEGIN_NAMESPACE
51 
52 class QDirectFbScreen;
53 class QPlatformScreen;
54 
55 class QDirectFbKeyMap: public QHash<DFBInputDeviceKeySymbol, Qt::Key>
56 {
57 public:
58     QDirectFbKeyMap();
59 };
60 
61 
62 class QDirectFbConvenience
63 {
64 public:
65     static QImage::Format imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps);
pixelFomatHasAlpha(const DFBSurfacePixelFormat format)66     static bool pixelFomatHasAlpha(const DFBSurfacePixelFormat format) { return (1 << 16) & format; }
67     static int colorDepthForSurface(const DFBSurfacePixelFormat format);
68 
69     //This is set by the graphicssystem constructor
70     static IDirectFB *dfbInterface();
71     static IDirectFBDisplayLayer *dfbDisplayLayer(int display = DLID_PRIMARY);
72 
73     static IDirectFBSurface *dfbSurfaceForPlatformPixmap(QPlatformPixmap *);
74 
75     static Qt::MouseButton mouseButton(DFBInputDeviceButtonIdentifier identifier);
76     static Qt::MouseButtons mouseButtons(DFBInputDeviceButtonMask mask);
77     static Qt::KeyboardModifiers keyboardModifiers(DFBInputDeviceModifierMask mask);
78     static QEvent::Type eventType(DFBWindowEventType type);
79 
80     static QDirectFbKeyMap *keyMap();
81 
82 private:
83     static QDirectFbKeyMap *dfbKeymap;
84     friend class QDirectFbIntegration;
85 };
86 
87 template <typename T> struct QDirectFBInterfaceCleanupHandler
88 {
cleanupQDirectFBInterfaceCleanupHandler89     static void cleanup(T *t)
90     {
91         if (!t)
92             return;
93         t->Release(t);
94     }
95 };
96 
97 template <typename T>
98 class QDirectFBPointer : public QScopedPointer<T, QDirectFBInterfaceCleanupHandler<T> >
99 {
100 public:
101     QDirectFBPointer(T *t = 0)
102         : QScopedPointer<T, QDirectFBInterfaceCleanupHandler<T> >(t)
103     {}
104 
outPtr()105     T** outPtr()
106     {
107         this->reset(0);
108         return &this->d;
109     }
110 };
111 
112 // Helper conversions from internal to DFB types
113 QDirectFbScreen *toDfbScreen(QWindow *window);
114 IDirectFBDisplayLayer *toDfbLayer(QPlatformScreen *screen);
115 
116 #define QDFB_STRINGIFY(x) #x
117 #define QDFB_TOSTRING(x) QDFB_STRINGIFY(x)
118 #define QDFB_PRETTY \
119     (__FILE__ ":" QDFB_TOSTRING(__LINE__))
120 
121 QT_END_NAMESPACE
122 
123 
124 #endif // QDIRECTFBCONVENIENCE_H
125