From 58f644dbcffdb9afc77c5635b732c88c2660a79d Mon Sep 17 00:00:00 2001 From: Girish Ramakrishnan Date: Mon, 2 Jul 2012 15:31:17 +0530 Subject: [PATCH] linuxfb: make linuxfb compile MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The plugin now compiles, it is not known to work. Change-Id: I8dd086eb7fc41c6e197debc2601eebba3404187c Reviewed-by: Samuel Rødal Reviewed-by: Girish Ramakrishnan --- src/plugins/platforms/linuxfb/linuxfb.pro | 7 +- .../platforms/linuxfb/qlinuxfbintegration.cpp | 77 +++------------ .../platforms/linuxfb/qlinuxfbintegration.h | 36 ++----- src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp | 107 +++++++++++++++++++++ src/plugins/platforms/linuxfb/qlinuxfbscreen.h | 73 ++++++++++++++ 5 files changed, 205 insertions(+), 95 deletions(-) create mode 100644 src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp create mode 100644 src/plugins/platforms/linuxfb/qlinuxfbscreen.h diff --git a/src/plugins/platforms/linuxfb/linuxfb.pro b/src/plugins/platforms/linuxfb/linuxfb.pro index ff0105a..11b4a9c 100644 --- a/src/plugins/platforms/linuxfb/linuxfb.pro +++ b/src/plugins/platforms/linuxfb/linuxfb.pro @@ -1,14 +1,13 @@ -TARGET = qlinuxfbgraphicssystem +TARGET = qlinuxfb load(qt_plugin) DESTDIR = $$QT.gui.plugins/platforms QT += core-private gui-private platformsupport-private -SOURCES = main.cpp qlinuxfbintegration.cpp -HEADERS = qlinuxfbintegration.h +SOURCES = main.cpp qlinuxfbintegration.cpp qlinuxfbscreen.cpp +HEADERS = qlinuxfbintegration.h qlinuxfbscreen.h -include(../../../platformsupport/fb_base/fb_base.pri) CONFIG += qpa/genericunixfontdatabase target.path += $$[QT_INSTALL_PLUGINS]/platforms diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp index ed19c1c..08cc02c 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp +++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp @@ -40,9 +40,14 @@ ****************************************************************************/ #include "qlinuxfbintegration.h" -#include "../fb_base/fb_base.h" -#include "qgenericunixfontdatabase.h" +#include "qlinuxfbscreen.h" + +#include #include +#include +#include +#include + #include #include // overrides QT_OPEN #include @@ -797,21 +802,20 @@ QPlatformPixmap *QLinuxFbIntegration::createPlatformPixmap(QPlatformPixmap::Pixe return new QRasterPlatformPixmap(type); } -QWindowSurface *QLinuxFbIntegration::createWindowSurface(QWidget *widget, WId) const +QPlatformBackingStore *QLinuxFbIntegration::createPlatformBackingStore(QWindow *window) const { - QFbWindowSurface * surface = - new QFbWindowSurface(mPrimaryScreen, widget); + QFbBackingStore *surface = new QFbBackingStore(mPrimaryScreen, window); return surface; } -QPlatformWindow *QLinuxFbIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const +QPlatformWindow *QLinuxFbIntegration::createPlatformWindow(QWindow *window) const { - QFbWindow *w = new QFbWindow(widget); + QFbWindow *w = new QFbWindow(window); mPrimaryScreen->addWindow(w); return w; } -QAbstractEventDispatcher *QMinimalIntegration::createEventDispatcher() const +QAbstractEventDispatcher *QLinuxFbIntegration::guiThreadEventDispatcher() const { return createUnixEventDispatcher(); } @@ -821,61 +825,4 @@ QPlatformFontDatabase *QLinuxFbIntegration::fontDatabase() const return fontDb; } -QLinuxFbScreen::QLinuxFbScreen(uchar * d, int w, - int h, int lstep, QImage::Format screenFormat) : compositePainter(0) -{ - data = d; - mGeometry = QRect(0,0,w,h); - bytesPerLine = lstep; - mFormat = screenFormat; - mDepth = 16; - mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), - mFormat); - mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), - bytesPerLine, mFormat); - cursor = new QPlatformSoftwareCursor(this); -} - -void QLinuxFbScreen::setGeometry(QRect rect) -{ - mGeometry = rect; - delete mFbScreenImage; - mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), - bytesPerLine, mFormat); - delete compositePainter; - compositePainter = 0; - - delete mScreenImage; - mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), - mFormat); -} - -void QLinuxFbScreen::setFormat(QImage::Format format) -{ - mFormat = format; - delete mFbScreenImage; - mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), - bytesPerLine, mFormat); - delete compositePainter; - compositePainter = 0; - - delete mScreenImage; - mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), - mFormat); -} - -QRegion QLinuxFbScreen::doRedraw() -{ - QRegion touched; - touched = QFbScreen::doRedraw(); - - if (!compositePainter) { - compositePainter = new QPainter(mFbScreenImage); - } - - QVector rects = touched.rects(); - for (int i = 0; i < rects.size(); i++) - compositePainter->drawImage(rects[i], *mScreenImage, rects[i]); - return touched; -} QT_END_NAMESPACE diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h index 200cd81..430375d 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h +++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h @@ -39,38 +39,21 @@ ** ****************************************************************************/ -#ifndef QGRAPHICSSYSTEM_LINUXFB_H -#define QGRAPHICSSYSTEM_LINUXFB_H +#ifndef QLINUXFBINTEGRATION_H +#define QLINUXFBINTEGRATION_H #include -#include "../fb_base/fb_base.h" -QT_BEGIN_NAMESPACE - -class QLinuxFbScreen : public QFbScreen -{ - Q_OBJECT -public: - QLinuxFbScreen(uchar * d, int w, int h, int lstep, QImage::Format screenFormat); - void setGeometry(QRect rect); - void setFormat(QImage::Format format); - -public slots: - QRegion doRedraw(); +#include -private: - QImage * mFbScreenImage; - uchar * data; - int bytesPerLine; - - QPainter *compositePainter; -}; +QT_BEGIN_NAMESPACE class QLinuxFbIntegrationPrivate; struct fb_cmap; struct fb_var_screeninfo; struct fb_fix_screeninfo; class QAbstractEventDispatcher; +class QLinuxFbScreen; class QLinuxFbIntegration : public QPlatformIntegration { @@ -81,9 +64,9 @@ public: bool hasCapability(QPlatformIntegration::Capability cap) const; QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const; - QPlatformWindow *createPlatformWindow(QWidget *widget, WId WinId) const; - QWindowSurface *createWindowSurface(QWidget *widget, WId WinId) const; - QAbstractEventDispatcher *createEventDispatcher() const; + QPlatformWindow *createPlatformWindow(QWindow *window) const; + QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const; + QAbstractEventDispatcher *guiThreadEventDispatcher() const; QList screens() const { return mScreens; } @@ -134,4 +117,5 @@ private: QT_END_NAMESPACE -#endif +#endif // QLINUXFBINTEGRATION_H + diff --git a/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp b/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp new file mode 100644 index 0000000..729fd87 --- /dev/null +++ b/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp @@ -0,0 +1,107 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** 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$ +** +****************************************************************************/ + +#include "qlinuxfbscreen.h" +#include +#include + +QT_BEGIN_NAMESPACE + +QLinuxFbScreen::QLinuxFbScreen(uchar * d, int w, + int h, int lstep, QImage::Format screenFormat) : compositePainter(0) +{ + data = d; + mGeometry = QRect(0,0,w,h); + bytesPerLine = lstep; + mFormat = screenFormat; + mDepth = 16; + mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), + mFormat); + mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), + bytesPerLine, mFormat); + cursor = new QFbCursor(this); +} + +void QLinuxFbScreen::setGeometry(QRect rect) +{ + mGeometry = rect; + delete mFbScreenImage; + mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), + bytesPerLine, mFormat); + delete compositePainter; + compositePainter = 0; + + delete mScreenImage; + mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), + mFormat); +} + +void QLinuxFbScreen::setFormat(QImage::Format format) +{ + mFormat = format; + delete mFbScreenImage; + mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), + bytesPerLine, mFormat); + delete compositePainter; + compositePainter = 0; + + delete mScreenImage; + mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), + mFormat); +} + +QRegion QLinuxFbScreen::doRedraw() +{ + QRegion touched; + touched = QFbScreen::doRedraw(); + + if (!compositePainter) { + compositePainter = new QPainter(mFbScreenImage); + } + + QVector rects = touched.rects(); + for (int i = 0; i < rects.size(); i++) + compositePainter->drawImage(rects[i], *mScreenImage, rects[i]); + return touched; +} + +QT_END_NAMESPACE + diff --git a/src/plugins/platforms/linuxfb/qlinuxfbscreen.h b/src/plugins/platforms/linuxfb/qlinuxfbscreen.h new file mode 100644 index 0000000..6181ee9 --- /dev/null +++ b/src/plugins/platforms/linuxfb/qlinuxfbscreen.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** 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 QLINUXFBSCREEN_H +#define QLINUXFBSCREEN_H + +#include + +QT_BEGIN_NAMESPACE + +class QPainter; + +class QLinuxFbScreen : public QFbScreen +{ + Q_OBJECT +public: + QLinuxFbScreen(uchar * d, int w, int h, int lstep, QImage::Format screenFormat); + void setGeometry(QRect rect); + void setFormat(QImage::Format format); + +public slots: + QRegion doRedraw(); + +private: + QImage *mFbScreenImage; + uchar *data; + int bytesPerLine; + + QPainter *compositePainter; +}; + +QT_END_NAMESPACE + +#endif // QLINUXFBSCREEN_H + -- 2.7.4