1
/****************************************************************************
3
** Copyright (C) 2016 The Qt Company Ltd.
4
** Contact: https://www.qt.io/licensing/
6
** This file is part of the plugins of the Qt Toolkit.
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.
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.
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.
38
****************************************************************************/
40
#include "qdirectfbintegration.h"
41
#include "qdirectfbbackingstore.h"
42
#include "qdirectfbblitter.h"
43
#include "qdirectfbconvenience.h"
44
#include "qdirectfbcursor.h"
45
#include "qdirectfbwindow.h"
47
#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
48
#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
49
#include <QtPlatformSupport/private/qgenericunixservices_p.h>
51
#include <QtGui/private/qpixmap_blitter_p.h>
52
#include <QtGui/private/qpixmap_raster_p.h>
53
#include <QtGui/private/qguiapplication_p.h>
54
#include <qpa/qplatformpixmap.h>
55
#include <QtCore/QCoreApplication>
56
#include <QtCore/QThread>
57
#include <QtCore/QAbstractEventDispatcher>
58
#include <qpa/qplatforminputcontextfactory_p.h>
62
QDirectFbIntegration::QDirectFbIntegration()
63
: m_fontDb(new QGenericUnixFontDatabase())
64
, m_services(new QGenericUnixServices)
68
void QDirectFbIntegration::connectToDirectFb()
74
m_inputContext = QPlatformInputContextFactory::create();
77
bool QDirectFbIntegration::hasCapability(Capability cap) const
80
case ThreadedPixmaps: return true;
81
case MultipleWindows: return true;
82
#ifdef DIRECTFB_GL_EGL
83
case OpenGL: return true;
84
case ThreadedOpenGL: return true;
86
default: return QPlatformIntegration::hasCapability(cap);
90
void QDirectFbIntegration::initializeDirectFB()
92
const QStringList args = QCoreApplication::arguments();
93
int argc = args.size();
94
char **argv = new char*[argc];
96
for (int i = 0; i < argc; ++i)
97
argv[i] = qstrdup(args.at(i).toLocal8Bit().constData());
99
DFBResult result = DirectFBInit(&argc, &argv);
100
if (result != DFB_OK) {
101
DirectFBError("QDirectFBScreen: error initializing DirectFB",
105
for (int i = 0; i < argc; ++i)
109
// This must happen after DirectFBInit.
110
m_dfb.reset(QDirectFbConvenience::dfbInterface());
113
void QDirectFbIntegration::initializeScreen()
115
m_primaryScreen.reset(new QDirectFbScreen(0));
116
screenAdded(m_primaryScreen.data());
119
void QDirectFbIntegration::initializeInput()
121
m_input.reset(new QDirectFbInput(m_dfb.data(), m_primaryScreen->dfbLayer()));
125
QDirectFbIntegration::~QDirectFbIntegration()
127
m_input->stopInputEventLoop();
131
QPlatformPixmap *QDirectFbIntegration::createPlatformPixmap(QPlatformPixmap::PixelType type) const
133
if (type == QPlatformPixmap::BitmapType)
134
return new QRasterPlatformPixmap(type);
136
return new QDirectFbBlitterPlatformPixmap;
139
QPlatformWindow *QDirectFbIntegration::createPlatformWindow(QWindow *window) const
141
QDirectFbWindow *dfbWindow = new QDirectFbWindow(window, m_input.data());
142
dfbWindow->createDirectFBWindow();
146
QAbstractEventDispatcher *QDirectFbIntegration::createEventDispatcher() const
148
return createUnixEventDispatcher();
151
QPlatformBackingStore *QDirectFbIntegration::createPlatformBackingStore(QWindow *window) const
153
return new QDirectFbBackingStore(window);
156
QPlatformFontDatabase *QDirectFbIntegration::fontDatabase() const
158
return m_fontDb.data();
161
QPlatformServices *QDirectFbIntegration::services() const
163
return m_services.data();
166
QPlatformNativeInterface *QDirectFbIntegration::nativeInterface() const
168
return const_cast<QDirectFbIntegration *>(this);