linuxfb: make linuxfb compile

The plugin now compiles, it is not known to work.

Change-Id: I8dd086eb7fc41c6e197debc2601eebba3404187c
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
This commit is contained in:
Girish Ramakrishnan 2012-07-02 15:31:17 +05:30 committed by Qt by Nokia
parent 2407f4f706
commit 58f644dbcf
5 changed files with 205 additions and 95 deletions

View File

@ -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

View File

@ -40,9 +40,14 @@
****************************************************************************/
#include "qlinuxfbintegration.h"
#include "../fb_base/fb_base.h"
#include "qgenericunixfontdatabase.h"
#include "qlinuxfbscreen.h"
#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
#include <QtPlatformSupport/private/qfbbackingstore_p.h>
#include <QtPlatformSupport/private/qfbwindow_p.h>
#include <QtPlatformSupport/private/qfbcursor_p.h>
#include <QtGui/private/qpixmap_raster_p.h>
#include <private/qcore_unix_p.h> // overrides QT_OPEN
#include <qimage.h>
@ -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<QRect> rects = touched.rects();
for (int i = 0; i < rects.size(); i++)
compositePainter->drawImage(rects[i], *mScreenImage, rects[i]);
return touched;
}
QT_END_NAMESPACE

View File

@ -39,38 +39,21 @@
**
****************************************************************************/
#ifndef QGRAPHICSSYSTEM_LINUXFB_H
#define QGRAPHICSSYSTEM_LINUXFB_H
#ifndef QLINUXFBINTEGRATION_H
#define QLINUXFBINTEGRATION_H
#include <qpa/qplatformintegration.h>
#include "../fb_base/fb_base.h"
#include <QtPlatformSupport/private/qfbscreen_p.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();
private:
QImage * mFbScreenImage;
uchar * data;
int bytesPerLine;
QPainter *compositePainter;
};
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<QPlatformScreen *> screens() const { return mScreens; }
@ -134,4 +117,5 @@ private:
QT_END_NAMESPACE
#endif
#endif // QLINUXFBINTEGRATION_H

View File

@ -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 <QtPlatformSupport/private/qfbcursor_p.h>
#include <QtGui/QPainter>
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<QRect> rects = touched.rects();
for (int i = 0; i < rects.size(); i++)
compositePainter->drawImage(rects[i], *mScreenImage, rects[i]);
return touched;
}
QT_END_NAMESPACE

View File

@ -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 <QtPlatformSupport/private/qfbscreen_p.h>
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