directfb: Convert the directfb plugin, disable the OpenGL support
OpenGL was never tested and the platform integration has changed, remove it from the build and re-enable it once one can test it. Change-Id: I70d5b5b11de06e6e999d3aae44660f11d2dbc719 Reviewed-on: http://codereview.qt.nokia.com/3666 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
This commit is contained in:
parent
0d7ef7993d
commit
688d9f6ec0
@ -21,16 +21,16 @@ SOURCES = main.cpp \
|
||||
qdirectfbconvenience.cpp \
|
||||
qdirectfbinput.cpp \
|
||||
qdirectfbcursor.cpp \
|
||||
qdirectfbwindow.cpp \
|
||||
qdirectfbglcontext.cpp
|
||||
qdirectfbwindow.cpp
|
||||
HEADERS = qdirectfbintegration.h \
|
||||
qdirectfbwindowsurface.h \
|
||||
qdirectfbblitter.h \
|
||||
qdirectfbconvenience.h \
|
||||
qdirectfbinput.h \
|
||||
qdirectfbcursor.h \
|
||||
qdirectfbwindow.h \
|
||||
qdirectfbglcontext.h
|
||||
qdirectfbwindow.h
|
||||
|
||||
# ### port the GL context
|
||||
|
||||
include(../fontdatabases/genericunix/genericunix.pri)
|
||||
target.path += $$[QT_INSTALL_PLUGINS]/platforms
|
||||
|
@ -50,9 +50,8 @@ QDirectFBCursor::QDirectFBCursor(QPlatformScreen* screen) :
|
||||
image = new QPlatformCursorImage(0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
void QDirectFBCursor::changeCursor(QCursor * cursor, QWidget * widget)
|
||||
void QDirectFBCursor::changeCursor(QCursor * cursor, QWindow * window)
|
||||
{
|
||||
Q_UNUSED(widget);
|
||||
int xSpot;
|
||||
int ySpot;
|
||||
QPixmap map;
|
||||
|
@ -51,7 +51,7 @@ class QDirectFBCursor : public QPlatformCursor
|
||||
{
|
||||
public:
|
||||
QDirectFBCursor(QPlatformScreen *screem);
|
||||
void changeCursor(QCursor * cursor, QWidget * widget);
|
||||
void changeCursor(QCursor * cursor, QWindow * window);
|
||||
|
||||
private:
|
||||
IDirectFBDisplayLayer * m_layer;
|
||||
|
@ -47,7 +47,6 @@
|
||||
#include <QWindowSystemInterface>
|
||||
#include <QMouseEvent>
|
||||
#include <QEvent>
|
||||
#include <QApplication>
|
||||
|
||||
#include <directfb.h>
|
||||
|
||||
@ -82,9 +81,9 @@ void QDirectFbInput::stopInputEventLoop()
|
||||
m_waitStop.acquire();
|
||||
}
|
||||
|
||||
void QDirectFbInput::addWindow(DFBWindowID id, QWidget *tlw)
|
||||
void QDirectFbInput::addWindow(DFBWindowID id, QWindow *qt_window)
|
||||
{
|
||||
m_tlwMap.insert(id,tlw);
|
||||
m_tlwMap.insert(id,qt_window);
|
||||
IDirectFBWindow *window;
|
||||
m_dfbDisplayLayer->GetWindow(m_dfbDisplayLayer,id,&window);
|
||||
|
||||
@ -152,7 +151,7 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event)
|
||||
} else if (event.window.type == DWET_BUTTONUP) {
|
||||
window->UngrabPointer(window);
|
||||
}
|
||||
QWidget *tlw = m_tlwMap.value(event.window.window_id);
|
||||
QWindow *tlw = m_tlwMap.value(event.window.window_id);
|
||||
QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons);
|
||||
}
|
||||
|
||||
@ -161,7 +160,7 @@ void QDirectFbInput::handleWheelEvent(const DFBEvent &event)
|
||||
QPoint p(event.window.cx, event.window.cy);
|
||||
QPoint globalPos = globalPoint(event);
|
||||
long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000);
|
||||
QWidget *tlw = m_tlwMap.value(event.window.window_id);
|
||||
QWindow *tlw = m_tlwMap.value(event.window.window_id);
|
||||
QWindowSystemInterface::handleWheelEvent(tlw, timestamp, p, globalPos,
|
||||
event.window.step*120,
|
||||
Qt::Vertical);
|
||||
@ -178,13 +177,13 @@ void QDirectFbInput::handleKeyEvents(const DFBEvent &event)
|
||||
QChar character;
|
||||
if (DFB_KEY_TYPE(event.window.key_symbol) == DIKT_UNICODE)
|
||||
character = QChar(event.window.key_symbol);
|
||||
QWidget *tlw = m_tlwMap.value(event.window.window_id);
|
||||
QWindow *tlw = m_tlwMap.value(event.window.window_id);
|
||||
QWindowSystemInterface::handleKeyEvent(tlw, timestamp, type, key, modifiers, character);
|
||||
}
|
||||
|
||||
void QDirectFbInput::handleEnterLeaveEvents(const DFBEvent &event)
|
||||
{
|
||||
QWidget *tlw = m_tlwMap.value(event.window.window_id);
|
||||
QWindow *tlw = m_tlwMap.value(event.window.window_id);
|
||||
switch (event.window.type) {
|
||||
case DWET_ENTER:
|
||||
QWindowSystemInterface::handleEnterEvent(tlw);
|
||||
|
@ -57,7 +57,7 @@ class QDirectFbInput : public QObject
|
||||
Q_OBJECT
|
||||
public:
|
||||
QDirectFbInput(QObject *parent);
|
||||
void addWindow(DFBWindowID id, QWidget *tlw);
|
||||
void addWindow(DFBWindowID id, QWindow *window);
|
||||
void removeWindow(WId wId);
|
||||
|
||||
public slots:
|
||||
@ -80,7 +80,7 @@ private:
|
||||
bool m_shouldStop;
|
||||
QSemaphore m_waitStop;
|
||||
|
||||
QHash<DFBWindowID,QWidget *>m_tlwMap;
|
||||
QHash<DFBWindowID,QWindow *>m_tlwMap;
|
||||
};
|
||||
|
||||
#endif // QDIRECTFBINPUT_H
|
||||
|
@ -49,10 +49,9 @@
|
||||
#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
|
||||
#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
|
||||
|
||||
#include <private/qwindowsurface_raster_p.h>
|
||||
#include <private/qpixmap_raster_p.h>
|
||||
|
||||
#include <QtGui/private/qpixmap_blitter_p.h>
|
||||
#include <QtGui/private/qpixmap_raster_p.h>
|
||||
#include <QtGui/private/qguiapplication_p.h>
|
||||
#include <QtGui/qplatformpixmap_qpa.h>
|
||||
#include <QtCore/QCoreApplication>
|
||||
#include <QtCore/QThread>
|
||||
@ -85,7 +84,10 @@ QDirectFbScreen::~QDirectFbScreen()
|
||||
|
||||
QDirectFbIntegration::QDirectFbIntegration()
|
||||
: mFontDb(new QGenericUnixFontDatabase())
|
||||
, mEventDispatcher(createUnixEventDispatcher())
|
||||
{
|
||||
QGuiApplicationPrivate::instance()->setEventDispatcher(mEventDispatcher);
|
||||
|
||||
const QStringList args = QCoreApplication::arguments();
|
||||
int argc = args.size();
|
||||
char **argv = new char*[argc];
|
||||
@ -101,8 +103,9 @@ QDirectFbIntegration::QDirectFbIntegration()
|
||||
delete[] argv;
|
||||
|
||||
|
||||
|
||||
QDirectFbScreen *primaryScreen = new QDirectFbScreen(0);
|
||||
mScreens.append(primaryScreen);
|
||||
screenAdded(primaryScreen);
|
||||
|
||||
mInputRunner = new QThread;
|
||||
mInput = new QDirectFbInput(0);
|
||||
@ -126,21 +129,20 @@ QPlatformPixmap *QDirectFbIntegration::createPlatformPixmap(QPlatformPixmap::Pix
|
||||
return new QDirectFbBlitterPlatformPixmap;
|
||||
}
|
||||
|
||||
QPlatformWindow *QDirectFbIntegration::createPlatformWindow(QWidget *widget, WId winId) const
|
||||
QPlatformWindow *QDirectFbIntegration::createPlatformWindow(QWindow *window) const
|
||||
{
|
||||
Q_UNUSED(winId);
|
||||
QDirectFbInput *input = const_cast<QDirectFbInput *>(mInput);//gah
|
||||
return new QDirectFbWindow(widget,input);
|
||||
return new QDirectFbWindow(window,input);
|
||||
}
|
||||
|
||||
QAbstractEventDispatcher *QDirectFbIntegration::createEventDispatcher() const
|
||||
QAbstractEventDispatcher *QDirectFbIntegration::guiThreadEventDispatcher() const
|
||||
{
|
||||
return createUnixEventDispatcher();
|
||||
return mEventDispatcher;
|
||||
}
|
||||
|
||||
QWindowSurface *QDirectFbIntegration::createWindowSurface(QWidget *widget, WId winId) const
|
||||
QPlatformBackingStore *QDirectFbIntegration::createPlatformBackingStore(QWindow *window) const
|
||||
{
|
||||
return new QDirectFbWindowSurface(widget,winId);
|
||||
return new QDirectFbWindowSurface(window);
|
||||
}
|
||||
|
||||
QPlatformFontDatabase *QDirectFbIntegration::fontDatabase() const
|
||||
|
@ -56,7 +56,6 @@ class QDirectFBCursor;
|
||||
|
||||
class QDirectFbScreen : public QPlatformScreen
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
QDirectFbScreen(int display);
|
||||
~QDirectFbScreen();
|
||||
@ -86,19 +85,17 @@ public:
|
||||
~QDirectFbIntegration();
|
||||
|
||||
QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const;
|
||||
QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const;
|
||||
QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const;
|
||||
QAbstractEventDispatcher *createEventDispatcher() const;
|
||||
|
||||
QList<QPlatformScreen *> screens() const { return mScreens; }
|
||||
QPlatformWindow *createPlatformWindow(QWindow *window) const;
|
||||
QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const;
|
||||
QAbstractEventDispatcher *guiThreadEventDispatcher() const;
|
||||
|
||||
QPlatformFontDatabase *fontDatabase() const;
|
||||
|
||||
private:
|
||||
QList<QPlatformScreen *> mScreens;
|
||||
QDirectFbInput *mInput;
|
||||
QThread *mInputRunner;
|
||||
QPlatformFontDatabase *mFontDb;
|
||||
QAbstractEventDispatcher *mEventDispatcher;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -41,15 +41,12 @@
|
||||
|
||||
#include "qdirectfbwindow.h"
|
||||
#include "qdirectfbinput.h"
|
||||
#include "qdirectfbglcontext.h"
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
#include "qdirectfbwindowsurface.h"
|
||||
|
||||
#include <directfb.h>
|
||||
|
||||
QDirectFbWindow::QDirectFbWindow(QWidget *tlw, QDirectFbInput *inputhandler)
|
||||
QDirectFbWindow::QDirectFbWindow(QWindow *tlw, QDirectFbInput *inputhandler)
|
||||
: QPlatformWindow(tlw), m_inputHandler(inputhandler), m_context(0)
|
||||
{
|
||||
IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer();
|
||||
@ -63,10 +60,10 @@ QDirectFbWindow::QDirectFbWindow(QWidget *tlw, QDirectFbInput *inputhandler)
|
||||
|DWDESC_OPTIONS
|
||||
#endif
|
||||
|DWDESC_CAPS);
|
||||
description.width = tlw->rect().width();
|
||||
description.height = tlw->rect().height();
|
||||
description.posx = tlw->rect().x();
|
||||
description.posy = tlw->rect().y();
|
||||
description.width = tlw->width();
|
||||
description.height = tlw->height();
|
||||
description.posx = tlw->x();
|
||||
description.posy = tlw->y();
|
||||
|
||||
if (layerConfig.surface_caps & DSCAPS_PREMULTIPLIED)
|
||||
description.surface_caps = DSCAPS_PREMULTIPLIED;
|
||||
@ -85,7 +82,7 @@ QDirectFbWindow::QDirectFbWindow(QWidget *tlw, QDirectFbInput *inputhandler)
|
||||
|
||||
m_dfbWindow->SetOpacity(m_dfbWindow,0xff);
|
||||
|
||||
setVisible(widget()->isVisible());
|
||||
setVisible(window()->visible());
|
||||
|
||||
DFBWindowID id;
|
||||
m_dfbWindow->GetID(m_dfbWindow, &id);
|
||||
@ -100,17 +97,20 @@ QDirectFbWindow::~QDirectFbWindow()
|
||||
|
||||
void QDirectFbWindow::setGeometry(const QRect &rect)
|
||||
{
|
||||
bool isMoveOnly = (rect.topLeft() != geometry().topLeft()) && (rect.size() == geometry().size());
|
||||
// bool isMoveOnly = (rect.topLeft() != geometry().topLeft()) && (rect.size() == geometry().size());
|
||||
|
||||
QPlatformWindow::setGeometry(rect);
|
||||
if (widget()->isVisible() && !(widget()->testAttribute(Qt::WA_DontShowOnScreen))) {
|
||||
if (window()->visible()) {
|
||||
m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(),
|
||||
rect.width(), rect.height());
|
||||
|
||||
// ### TODO port, verify if this is needed
|
||||
#if 0
|
||||
//Hack. When moving since the WindowSurface of a window becomes invalid when moved
|
||||
if (isMoveOnly) { //if resize then windowsurface is updated.
|
||||
widget()->windowSurface()->resize(rect.size());
|
||||
widget()->update();
|
||||
window()->update();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -170,22 +170,3 @@ WId QDirectFbWindow::winId() const
|
||||
return WId(id);
|
||||
}
|
||||
|
||||
QPlatformGLContext *QDirectFbWindow::glContext() const
|
||||
{
|
||||
if (!m_context) {
|
||||
IDirectFBSurface *surface;
|
||||
DFBResult result = m_dfbWindow->GetSurface(m_dfbWindow,&surface);
|
||||
if (result != DFB_OK) {
|
||||
qWarning("could not retrieve surface in QDirectFbWindow::glContext()");
|
||||
return 0;
|
||||
}
|
||||
IDirectFBGL *gl;
|
||||
result = surface->GetGL(surface,&gl);
|
||||
if (result != DFB_OK) {
|
||||
qWarning("could not retrieve IDirectFBGL in QDirectFbWindow::glContext()");
|
||||
return 0;
|
||||
}
|
||||
const_cast<QDirectFbWindow *>(this)->m_context = new QDirectFbGLContext(gl);
|
||||
}
|
||||
return m_context;
|
||||
}
|
||||
|
@ -52,7 +52,7 @@ QT_BEGIN_NAMESPACE
|
||||
class QDirectFbWindow : public QPlatformWindow
|
||||
{
|
||||
public:
|
||||
QDirectFbWindow(QWidget *tlw, QDirectFbInput *inputhandler);
|
||||
QDirectFbWindow(QWindow *tlw, QDirectFbInput *inputhandler);
|
||||
~QDirectFbWindow();
|
||||
|
||||
void setGeometry(const QRect &rect);
|
||||
@ -65,13 +65,9 @@ public:
|
||||
void lower();
|
||||
WId winId() const;
|
||||
|
||||
QPlatformGLContext *glContext() const;
|
||||
|
||||
private:
|
||||
IDirectFBWindow *m_dfbWindow;
|
||||
QDirectFbInput *m_inputHandler;
|
||||
|
||||
QPlatformGLContext *m_context;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -49,20 +49,20 @@
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window, WId wId)
|
||||
: QWindowSurface(window), m_pixmap(0), m_pmdata(0), m_dfbSurface(0)
|
||||
QDirectFbWindowSurface::QDirectFbWindowSurface(QWindow *window)
|
||||
: QPlatformBackingStore(window), m_pixmap(0), m_pmdata(0), m_dfbSurface(0)
|
||||
{
|
||||
|
||||
IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer();
|
||||
|
||||
DFBWindowID id(wId);
|
||||
DFBWindowID id(window->winId());
|
||||
IDirectFBWindow *dfbWindow;
|
||||
|
||||
layer->GetWindow(layer,id,&dfbWindow);
|
||||
|
||||
dfbWindow->GetSurface(dfbWindow,&m_dfbSurface);
|
||||
//WRONGSIZE
|
||||
QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect().size(), m_dfbSurface);
|
||||
QDirectFbBlitter *blitter = new QDirectFbBlitter(window->size(), m_dfbSurface);
|
||||
m_pmdata = new QDirectFbBlitterPlatformPixmap;
|
||||
m_pmdata->setBlittable(blitter);
|
||||
m_pixmap = new QPixmap(m_pmdata);
|
||||
@ -78,9 +78,8 @@ QPaintDevice *QDirectFbWindowSurface::paintDevice()
|
||||
return m_pixmap;
|
||||
}
|
||||
|
||||
void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset)
|
||||
void QDirectFbWindowSurface::flush(QWindow *, const QRegion ®ion, const QPoint &offset)
|
||||
{
|
||||
Q_UNUSED(widget);
|
||||
m_pmdata->blittable()->unlock();
|
||||
|
||||
QVector<QRect> rects = region.rects();
|
||||
@ -91,9 +90,9 @@ void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const
|
||||
}
|
||||
}
|
||||
|
||||
void QDirectFbWindowSurface::resize(const QSize &size)
|
||||
void QDirectFbWindowSurface::resize(const QSize &size, const QRegion& reg)
|
||||
{
|
||||
QWindowSurface::resize(size);
|
||||
QPlatformBackingStore::resize(size, reg);
|
||||
|
||||
//Have to add 1 ref ass it will be removed by deleting the old blitter in setBlittable
|
||||
m_dfbSurface->AddRef(m_dfbSurface);
|
||||
|
@ -42,22 +42,22 @@
|
||||
#ifndef QWINDOWSURFACE_DIRECTFB_H
|
||||
#define QWINDOWSURFACE_DIRECTFB_H
|
||||
|
||||
#include <QtGui/private/qwindowsurface_p.h>
|
||||
#include <qplatformbackingstore_qpa.h>
|
||||
#include <private/qpixmap_blitter_p.h>
|
||||
|
||||
#include <directfb.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QDirectFbWindowSurface : public QWindowSurface
|
||||
class QDirectFbWindowSurface : public QPlatformBackingStore
|
||||
{
|
||||
public:
|
||||
QDirectFbWindowSurface(QWidget *window, WId wid);
|
||||
QDirectFbWindowSurface(QWindow *window);
|
||||
~QDirectFbWindowSurface();
|
||||
|
||||
QPaintDevice *paintDevice();
|
||||
void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset);
|
||||
void resize (const QSize &size);
|
||||
void flush(QWindow *window, const QRegion ®ion, const QPoint &offset);
|
||||
void resize (const QSize &size, const QRegion &staticContents);
|
||||
bool scroll(const QRegion &area, int dx, int dy);
|
||||
|
||||
void beginPaint(const QRegion ®ion);
|
||||
|
Loading…
Reference in New Issue
Block a user