Message ID | 20240411145559.1183064-2-ben.hutchings@mind.be |
---|---|
State | New |
Headers | show |
Series | package/qt6/qt6base: Restore DirectFB support | expand |
Ben, All, On 2024-04-11 16:55 +0200, Ben Hutchings via buildroot spake thusly: > Apply a patch from upstream to make Qt 6 support DirectFB again. > > Implement a config option for this, similar to what we do for Qt 5. > > Signed-off-by: Ben Hutchings <ben.hutchings@mind.be> > --- > package/qt6/qt6base/Config.in | 8 + > .../qt6base-directfb-Fix-compilation.patch | 288 ++++++++++++++++++ > package/qt6/qt6base/qt6base.mk | 7 + $ ./utils/docker-run make check-package package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch:0: use name <number>-<description>.patch (https://nightly.buildroot.org/#_providing_patches) package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch:0: missing Signed-off-by in the header (https://nightly.buildroot.org/#_format_and_licensing_of_the_package_patches) package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch:0: missing Upstream in the header (https://nightly.buildroot.org/#_additional_patch_documentation) Also, we currently only have qt6.4, while qt-6.7 is already released now, and the patch you add was already present in qt-6.5. So, maybe it would be better to actually bump qt6 rather than backport patches? Regards, Yann E. MORIN. > 3 files changed, 303 insertions(+) > create mode 100644 package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch > > diff --git a/package/qt6/qt6base/Config.in b/package/qt6/qt6base/Config.in > index 3b15d40c83..b21cc33cde 100644 > --- a/package/qt6/qt6base/Config.in > +++ b/package/qt6/qt6base/Config.in > @@ -36,6 +36,7 @@ config BR2_PACKAGE_QT6BASE_GUI > # At least one graphic backend must be enabled, so enable > # linuxfb if nothing is enabled. > select BR2_PACKAGE_QT6BASE_LINUXFB if \ > + !BR2_PACKAGE_QT6BASE_DIRECTFB && \ > !BR2_PACKAGE_QT6BASE_XCB && \ > !BR2_PACKAGE_QT6BASE_EGLFS > help > @@ -56,6 +57,13 @@ config BR2_PACKAGE_QT6BASE_VULKAN > config BR2_PACKAGE_QT6BASE_LINUXFB > bool "linuxfb support" > > +config BR2_PACKAGE_QT6BASE_DIRECTFB > + bool "directfb support" > + depends on BR2_PACKAGE_DIRECTFB > + > +comment "directfb backend available if directfb is enabled" > + depends on !BR2_PACKAGE_DIRECTFB > + > config BR2_PACKAGE_QT6BASE_XCB > bool "X.org XCB support" > depends on BR2_PACKAGE_XORG7 > diff --git a/package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch b/package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch > new file mode 100644 > index 0000000000..5a7df51779 > --- /dev/null > +++ b/package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch > @@ -0,0 +1,288 @@ > +From d86ab16a86ec4d6fb92855a3c9913b6b74b6bb0f Mon Sep 17 00:00:00 2001 > +From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> > +Date: Tue, 30 Aug 2022 14:54:01 +0200 > +Subject: [PATCH] directfb: Fix compilation > + > +The DirectFB QPA plugin has not built since Qt 6, because it used > +deprecated API which has been removed and private API which has > +changed. > + > +This change updates the handleMouseEvent() and > +handleWheelEvent() calls with the contents of the deprecated > +overloads the way they were in Qt 5.15. > + > +In addition, it updates usage of GlyphAndSubPixelPosition to default to > +vertical subpixel position of 0, and adds override qualifiers where > +necessary. > + > +Fixes: QTBUG-105061 > +Change-Id: Id7516f8e3c0a466d15b754f8e5f6df15a5f9526a > +Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> > +--- > + src/plugins/platforms/directfb/main.cpp | 2 +- > + .../directfb/qdirectfbbackingstore.h | 8 ++--- > + .../platforms/directfb/qdirectfbblitter.cpp | 2 +- > + .../platforms/directfb/qdirectfbblitter.h | 31 ++++++++++++------- > + .../platforms/directfb/qdirectfbcursor.h | 2 +- > + .../platforms/directfb/qdirectfbinput.cpp | 11 ++++--- > + .../platforms/directfb/qdirectfbinput.h | 2 +- > + .../platforms/directfb/qdirectfbintegration.h | 20 ++++++------ > + .../platforms/directfb/qdirectfbscreen.h | 10 +++--- > + .../platforms/directfb/qdirectfbwindow.h | 20 ++++++------ > + 10 files changed, 60 insertions(+), 48 deletions(-) > + > +diff --git a/src/plugins/platforms/directfb/main.cpp b/src/plugins/platforms/directfb/main.cpp > +index 02cceeb487..4618696154 100644 > +--- a/src/plugins/platforms/directfb/main.cpp > ++++ b/src/plugins/platforms/directfb/main.cpp > +@@ -24,7 +24,7 @@ class QDirectFbIntegrationPlugin : public QPlatformIntegrationPlugin > + Q_OBJECT > + Q_PLUGIN_METADATA(IID QPlatformIntegrationFactoryInterface_iid FILE "directfb.json") > + public: > +- QPlatformIntegration *create(const QString&, const QStringList&); > ++ QPlatformIntegration *create(const QString&, const QStringList&) override; > + }; > + > + QPlatformIntegration * QDirectFbIntegrationPlugin::create(const QString& system, const QStringList& paramList) > +diff --git a/src/plugins/platforms/directfb/qdirectfbbackingstore.h b/src/plugins/platforms/directfb/qdirectfbbackingstore.h > +index c51f29271d..625b672a40 100644 > +--- a/src/plugins/platforms/directfb/qdirectfbbackingstore.h > ++++ b/src/plugins/platforms/directfb/qdirectfbbackingstore.h > +@@ -18,10 +18,10 @@ class QDirectFbBackingStore : public QPlatformBackingStore > + public: > + QDirectFbBackingStore(QWindow *window); > + > +- QPaintDevice *paintDevice(); > +- 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); > ++ QPaintDevice *paintDevice() override; > ++ void flush(QWindow *window, const QRegion ®ion, const QPoint &offset) override; > ++ void resize (const QSize &size, const QRegion &staticContents) override; > ++ bool scroll(const QRegion &area, int dx, int dy) override; > + > + QImage toImage() const override; > + > +diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.cpp b/src/plugins/platforms/directfb/qdirectfbblitter.cpp > +index 0a110da798..aac0e3d800 100644 > +--- a/src/plugins/platforms/directfb/qdirectfbblitter.cpp > ++++ b/src/plugins/platforms/directfb/qdirectfbblitter.cpp > +@@ -216,7 +216,7 @@ bool QDirectFbBlitter::drawCachedGlyphs(const QPaintEngineState *state, QFontEng > + for (int i=0; i<numGlyphs; ++i) { > + > + QFixed subPixelPosition = fontEngine->subPixelPositionForX(positions[i].x); > +- QTextureGlyphCache::GlyphAndSubPixelPosition glyph(glyphs[i], subPixelPosition); > ++ QTextureGlyphCache::GlyphAndSubPixelPosition glyph(glyphs[i], QFixedPoint(subPixelPosition, 0)); > + const QTextureGlyphCache::Coord &c = cache->coords[glyph]; > + if (c.isNull()) > + continue; > +diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.h b/src/plugins/platforms/directfb/qdirectfbblitter.h > +index 591021061c..6183859613 100644 > +--- a/src/plugins/platforms/directfb/qdirectfbblitter.h > ++++ b/src/plugins/platforms/directfb/qdirectfbblitter.h > +@@ -19,11 +19,20 @@ public: > + QDirectFbBlitter(const QSize &size, bool alpha); > + virtual ~QDirectFbBlitter(); > + > +- virtual void fillRect(const QRectF &rect, const QColor &color); > +- virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect); > +- void alphaFillRect(const QRectF &rect, const QColor &color, QPainter::CompositionMode cmode); > +- void drawPixmapOpacity(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect, QPainter::CompositionMode cmode, qreal opacity); > +- virtual bool drawCachedGlyphs(const QPaintEngineState *state, QFontEngine::GlyphFormat glyphFormat, int numGlyphs, const glyph_t *glyphs, const QFixedPoint *positions, QFontEngine *fontEngine); > ++ void fillRect(const QRectF &rect, const QColor &color) override; > ++ void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect) override; > ++ void alphaFillRect(const QRectF &rect, const QColor &color, QPainter::CompositionMode cmode) override; > ++ void drawPixmapOpacity(const QRectF &rect, > ++ const QPixmap &pixmap, > ++ const QRectF &subrect, > ++ QPainter::CompositionMode cmode, > ++ qreal opacity) override; > ++ bool drawCachedGlyphs(const QPaintEngineState *state, > ++ QFontEngine::GlyphFormat glyphFormat, > ++ int numGlyphs, > ++ const glyph_t *glyphs, > ++ const QFixedPoint *positions, > ++ QFontEngine *fontEngine) override; > + > + IDirectFBSurface *dfbSurface() const; > + > +@@ -32,8 +41,8 @@ public: > + static DFBSurfacePixelFormat selectPixmapFormat(bool withAlpha); > + > + protected: > +- virtual QImage *doLock(); > +- virtual void doUnlock(); > ++ QImage *doLock() override; > ++ void doUnlock() override; > + > + QDirectFBPointer<IDirectFBSurface> m_surface; > + QImage m_image; > +@@ -50,12 +59,12 @@ private: > + class QDirectFbBlitterPlatformPixmap : public QBlittablePlatformPixmap > + { > + public: > +- QBlittable *createBlittable(const QSize &size, bool alpha) const; > ++ QBlittable *createBlittable(const QSize &size, bool alpha) const override; > + > + QDirectFbBlitter *dfbBlitter() const; > + > +- virtual bool fromFile(const QString &filename, const char *format, > +- Qt::ImageConversionFlags flags); > ++ bool fromFile(const QString &filename, const char *format, > ++ Qt::ImageConversionFlags flags) override; > + > + private: > + bool fromDataBufferDescription(const DFBDataBufferDescription &); > +@@ -83,7 +92,7 @@ public: > + : QImageTextureGlyphCache(format, matrix) > + {} > + > +- virtual void resizeTextureData(int width, int height); > ++ void resizeTextureData(int width, int height) override; > + > + IDirectFBSurface *sourceSurface(); > + > +diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.h b/src/plugins/platforms/directfb/qdirectfbcursor.h > +index 9a480fc8f8..21a8f4353d 100644 > +--- a/src/plugins/platforms/directfb/qdirectfbcursor.h > ++++ b/src/plugins/platforms/directfb/qdirectfbcursor.h > +@@ -19,7 +19,7 @@ class QDirectFBCursor : public QPlatformCursor > + public: > + QDirectFBCursor(QPlatformScreen *screen); > + #ifndef QT_NO_CURSOR > +- void changeCursor(QCursor *cursor, QWindow *window); > ++ void changeCursor(QCursor *cursor, QWindow *window) override; > + #endif > + > + private: > +diff --git a/src/plugins/platforms/directfb/qdirectfbinput.cpp b/src/plugins/platforms/directfb/qdirectfbinput.cpp > +index a62ff9882c..516dc1e9d8 100644 > +--- a/src/plugins/platforms/directfb/qdirectfbinput.cpp > ++++ b/src/plugins/platforms/directfb/qdirectfbinput.cpp > +@@ -126,7 +126,7 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event) > + long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); > + > + QWindow *tlw = m_tlwMap.value(event.window.window_id); > +- QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons); > ++ QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons, Qt::NoButton, QEvent::None); > + } > + > + void QDirectFbInput::handleWheelEvent(const DFBEvent &event) > +@@ -135,9 +135,12 @@ void QDirectFbInput::handleWheelEvent(const DFBEvent &event) > + QPoint globalPos(event.window.cx, event.window.cy); > + long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); > + QWindow *tlw = m_tlwMap.value(event.window.window_id); > +- QWindowSystemInterface::handleWheelEvent(tlw, timestamp, p, globalPos, > +- event.window.step*120, > +- Qt::Vertical); > ++ QWindowSystemInterface::handleWheelEvent(tlw, > ++ timestamp, > ++ p, > ++ globalPos, > ++ QPoint(), > ++ QPoint(0, event.window.step*120)); > + } > + > + void QDirectFbInput::handleKeyEvents(const DFBEvent &event) > +diff --git a/src/plugins/platforms/directfb/qdirectfbinput.h b/src/plugins/platforms/directfb/qdirectfbinput.h > +index 5496f537a2..02175abc7b 100644 > +--- a/src/plugins/platforms/directfb/qdirectfbinput.h > ++++ b/src/plugins/platforms/directfb/qdirectfbinput.h > +@@ -26,7 +26,7 @@ public: > + void stopInputEventLoop(); > + > + protected: > +- void run(); > ++ void run() override; > + > + private: > + void handleEvents(); > +diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.h b/src/plugins/platforms/directfb/qdirectfbintegration.h > +index aa369d7c05..8dd2a4516a 100644 > +--- a/src/plugins/platforms/directfb/qdirectfbintegration.h > ++++ b/src/plugins/platforms/directfb/qdirectfbintegration.h > +@@ -25,16 +25,16 @@ public: > + > + void connectToDirectFb(); > + > +- bool hasCapability(Capability cap) const; > +- QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const; > +- QPlatformWindow *createPlatformWindow(QWindow *window) const; > +- QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const; > +- QAbstractEventDispatcher *createEventDispatcher() const; > +- > +- QPlatformFontDatabase *fontDatabase() const; > +- QPlatformServices *services() const; > +- QPlatformInputContext *inputContext() const { return m_inputContext; } > +- QPlatformNativeInterface *nativeInterface() const; > ++ bool hasCapability(Capability cap) const override; > ++ QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const override; > ++ QPlatformWindow *createPlatformWindow(QWindow *window) const override; > ++ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const override; > ++ QAbstractEventDispatcher *createEventDispatcher() const override; > ++ > ++ QPlatformFontDatabase *fontDatabase() const override; > ++ QPlatformServices *services() const override; > ++ QPlatformInputContext *inputContext() const override { return m_inputContext; } > ++ QPlatformNativeInterface *nativeInterface() const override; > + > + protected: > + virtual void initializeDirectFB(); > +diff --git a/src/plugins/platforms/directfb/qdirectfbscreen.h b/src/plugins/platforms/directfb/qdirectfbscreen.h > +index a4f2e9adb1..cbcb6a55da 100644 > +--- a/src/plugins/platforms/directfb/qdirectfbscreen.h > ++++ b/src/plugins/platforms/directfb/qdirectfbscreen.h > +@@ -19,11 +19,11 @@ class QDirectFbScreen : public QPlatformScreen > + public: > + QDirectFbScreen(int display); > + > +- QRect geometry() const { return m_geometry; } > +- int depth() const { return m_depth; } > +- QImage::Format format() const { return m_format; } > +- QSizeF physicalSize() const { return m_physicalSize; } > +- QPlatformCursor *cursor() const { return m_cursor.data(); } > ++ QRect geometry() const override { return m_geometry; } > ++ int depth() const override { return m_depth; } > ++ QImage::Format format() const override { return m_format; } > ++ QSizeF physicalSize() const override { return m_physicalSize; } > ++ QPlatformCursor *cursor() const override { return m_cursor.data(); } > + > + // DirectFb helpers > + IDirectFBDisplayLayer *dfbLayer() const; > +diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.h b/src/plugins/platforms/directfb/qdirectfbwindow.h > +index 6413d91860..f05038d8ca 100644 > +--- a/src/plugins/platforms/directfb/qdirectfbwindow.h > ++++ b/src/plugins/platforms/directfb/qdirectfbwindow.h > +@@ -15,19 +15,19 @@ class QDirectFbWindow : public QPlatformWindow > + { > + public: > + QDirectFbWindow(QWindow *tlw, QDirectFbInput *inputhandler); > +- ~QDirectFbWindow(); > ++ ~QDirectFbWindow() override; > + > +- void setGeometry(const QRect &rect); > +- void setOpacity(qreal level); > ++ void setGeometry(const QRect &rect) override; > ++ void setOpacity(qreal level) override; > + > +- void setVisible(bool visible); > ++ void setVisible(bool visible) override; > + > +- void setWindowFlags(Qt::WindowFlags flags); > +- bool setKeyboardGrabEnabled(bool grab); > +- bool setMouseGrabEnabled(bool grab); > +- void raise(); > +- void lower(); > +- WId winId() const; > ++ void setWindowFlags(Qt::WindowFlags flags) override; > ++ bool setKeyboardGrabEnabled(bool grab) override; > ++ bool setMouseGrabEnabled(bool grab) override; > ++ void raise() override; > ++ void lower() override; > ++ WId winId() const override; > + > + virtual void createDirectFBWindow(); > + IDirectFBWindow *dfbWindow() const; > +-- > +2.39.2 > + > diff --git a/package/qt6/qt6base/qt6base.mk b/package/qt6/qt6base/qt6base.mk > index 049d73a84f..a904d6edc8 100644 > --- a/package/qt6/qt6base/qt6base.mk > +++ b/package/qt6/qt6base/qt6base.mk > @@ -181,6 +181,13 @@ else > QT6BASE_CONF_OPTS += -DFEATURE_linuxfb=OFF > endif > > +ifeq ($(BR2_PACKAGE_QT6BASE_DIRECTFB),y) > +QT6BASE_CONF_OPTS += -DFEATURE_directfb=ON > +QT6BASE_DEPENDENCIES += directfb > +else > +QT6BASE_CONF_OPTS += -DFEATURE_directfb=OFF > +endif > + > ifeq ($(BR2_PACKAGE_QT6BASE_XCB),y) > QT6BASE_CONF_OPTS += \ > -DFEATURE_xcb=ON \ > -- > 2.39.2 > > _______________________________________________ > buildroot mailing list > buildroot@buildroot.org > https://lists.buildroot.org/mailman/listinfo/buildroot
On Thu, Apr 11, 2024 at 08:48:19PM +0200, Yann E. MORIN wrote: > Ben, All, > > On 2024-04-11 16:55 +0200, Ben Hutchings via buildroot spake thusly: > > Apply a patch from upstream to make Qt 6 support DirectFB again. > > > > Implement a config option for this, similar to what we do for Qt 5. > > > > Signed-off-by: Ben Hutchings <ben.hutchings@mind.be> > > --- > > package/qt6/qt6base/Config.in | 8 + > > .../qt6base-directfb-Fix-compilation.patch | 288 ++++++++++++++++++ > > package/qt6/qt6base/qt6base.mk | 7 + > > $ ./utils/docker-run make check-package > package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch:0: use name <number>-<description>.patch (https://nightly.buildroot.org/#_providing_patches) > package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch:0: missing Signed-off-by in the header (https://nightly.buildroot.org/#_format_and_licensing_of_the_package_patches) > package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch:0: missing Upstream in the header (https://nightly.buildroot.org/#_additional_patch_documentation) Sorry, I should have known about those. > Also, we currently only have qt6.4, while qt-6.7 is already released > now, and the patch you add was already present in qt-6.5. > > So, maybe it would be better to actually bump qt6 rather than backport > patches? [...] That should also work! But I don't know what else might break when updating Qt. Ben.
diff --git a/package/qt6/qt6base/Config.in b/package/qt6/qt6base/Config.in index 3b15d40c83..b21cc33cde 100644 --- a/package/qt6/qt6base/Config.in +++ b/package/qt6/qt6base/Config.in @@ -36,6 +36,7 @@ config BR2_PACKAGE_QT6BASE_GUI # At least one graphic backend must be enabled, so enable # linuxfb if nothing is enabled. select BR2_PACKAGE_QT6BASE_LINUXFB if \ + !BR2_PACKAGE_QT6BASE_DIRECTFB && \ !BR2_PACKAGE_QT6BASE_XCB && \ !BR2_PACKAGE_QT6BASE_EGLFS help @@ -56,6 +57,13 @@ config BR2_PACKAGE_QT6BASE_VULKAN config BR2_PACKAGE_QT6BASE_LINUXFB bool "linuxfb support" +config BR2_PACKAGE_QT6BASE_DIRECTFB + bool "directfb support" + depends on BR2_PACKAGE_DIRECTFB + +comment "directfb backend available if directfb is enabled" + depends on !BR2_PACKAGE_DIRECTFB + config BR2_PACKAGE_QT6BASE_XCB bool "X.org XCB support" depends on BR2_PACKAGE_XORG7 diff --git a/package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch b/package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch new file mode 100644 index 0000000000..5a7df51779 --- /dev/null +++ b/package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch @@ -0,0 +1,288 @@ +From d86ab16a86ec4d6fb92855a3c9913b6b74b6bb0f Mon Sep 17 00:00:00 2001 +From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> +Date: Tue, 30 Aug 2022 14:54:01 +0200 +Subject: [PATCH] directfb: Fix compilation + +The DirectFB QPA plugin has not built since Qt 6, because it used +deprecated API which has been removed and private API which has +changed. + +This change updates the handleMouseEvent() and +handleWheelEvent() calls with the contents of the deprecated +overloads the way they were in Qt 5.15. + +In addition, it updates usage of GlyphAndSubPixelPosition to default to +vertical subpixel position of 0, and adds override qualifiers where +necessary. + +Fixes: QTBUG-105061 +Change-Id: Id7516f8e3c0a466d15b754f8e5f6df15a5f9526a +Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> +--- + src/plugins/platforms/directfb/main.cpp | 2 +- + .../directfb/qdirectfbbackingstore.h | 8 ++--- + .../platforms/directfb/qdirectfbblitter.cpp | 2 +- + .../platforms/directfb/qdirectfbblitter.h | 31 ++++++++++++------- + .../platforms/directfb/qdirectfbcursor.h | 2 +- + .../platforms/directfb/qdirectfbinput.cpp | 11 ++++--- + .../platforms/directfb/qdirectfbinput.h | 2 +- + .../platforms/directfb/qdirectfbintegration.h | 20 ++++++------ + .../platforms/directfb/qdirectfbscreen.h | 10 +++--- + .../platforms/directfb/qdirectfbwindow.h | 20 ++++++------ + 10 files changed, 60 insertions(+), 48 deletions(-) + +diff --git a/src/plugins/platforms/directfb/main.cpp b/src/plugins/platforms/directfb/main.cpp +index 02cceeb487..4618696154 100644 +--- a/src/plugins/platforms/directfb/main.cpp ++++ b/src/plugins/platforms/directfb/main.cpp +@@ -24,7 +24,7 @@ class QDirectFbIntegrationPlugin : public QPlatformIntegrationPlugin + Q_OBJECT + Q_PLUGIN_METADATA(IID QPlatformIntegrationFactoryInterface_iid FILE "directfb.json") + public: +- QPlatformIntegration *create(const QString&, const QStringList&); ++ QPlatformIntegration *create(const QString&, const QStringList&) override; + }; + + QPlatformIntegration * QDirectFbIntegrationPlugin::create(const QString& system, const QStringList& paramList) +diff --git a/src/plugins/platforms/directfb/qdirectfbbackingstore.h b/src/plugins/platforms/directfb/qdirectfbbackingstore.h +index c51f29271d..625b672a40 100644 +--- a/src/plugins/platforms/directfb/qdirectfbbackingstore.h ++++ b/src/plugins/platforms/directfb/qdirectfbbackingstore.h +@@ -18,10 +18,10 @@ class QDirectFbBackingStore : public QPlatformBackingStore + public: + QDirectFbBackingStore(QWindow *window); + +- QPaintDevice *paintDevice(); +- 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); ++ QPaintDevice *paintDevice() override; ++ void flush(QWindow *window, const QRegion ®ion, const QPoint &offset) override; ++ void resize (const QSize &size, const QRegion &staticContents) override; ++ bool scroll(const QRegion &area, int dx, int dy) override; + + QImage toImage() const override; + +diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.cpp b/src/plugins/platforms/directfb/qdirectfbblitter.cpp +index 0a110da798..aac0e3d800 100644 +--- a/src/plugins/platforms/directfb/qdirectfbblitter.cpp ++++ b/src/plugins/platforms/directfb/qdirectfbblitter.cpp +@@ -216,7 +216,7 @@ bool QDirectFbBlitter::drawCachedGlyphs(const QPaintEngineState *state, QFontEng + for (int i=0; i<numGlyphs; ++i) { + + QFixed subPixelPosition = fontEngine->subPixelPositionForX(positions[i].x); +- QTextureGlyphCache::GlyphAndSubPixelPosition glyph(glyphs[i], subPixelPosition); ++ QTextureGlyphCache::GlyphAndSubPixelPosition glyph(glyphs[i], QFixedPoint(subPixelPosition, 0)); + const QTextureGlyphCache::Coord &c = cache->coords[glyph]; + if (c.isNull()) + continue; +diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.h b/src/plugins/platforms/directfb/qdirectfbblitter.h +index 591021061c..6183859613 100644 +--- a/src/plugins/platforms/directfb/qdirectfbblitter.h ++++ b/src/plugins/platforms/directfb/qdirectfbblitter.h +@@ -19,11 +19,20 @@ public: + QDirectFbBlitter(const QSize &size, bool alpha); + virtual ~QDirectFbBlitter(); + +- virtual void fillRect(const QRectF &rect, const QColor &color); +- virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect); +- void alphaFillRect(const QRectF &rect, const QColor &color, QPainter::CompositionMode cmode); +- void drawPixmapOpacity(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect, QPainter::CompositionMode cmode, qreal opacity); +- virtual bool drawCachedGlyphs(const QPaintEngineState *state, QFontEngine::GlyphFormat glyphFormat, int numGlyphs, const glyph_t *glyphs, const QFixedPoint *positions, QFontEngine *fontEngine); ++ void fillRect(const QRectF &rect, const QColor &color) override; ++ void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect) override; ++ void alphaFillRect(const QRectF &rect, const QColor &color, QPainter::CompositionMode cmode) override; ++ void drawPixmapOpacity(const QRectF &rect, ++ const QPixmap &pixmap, ++ const QRectF &subrect, ++ QPainter::CompositionMode cmode, ++ qreal opacity) override; ++ bool drawCachedGlyphs(const QPaintEngineState *state, ++ QFontEngine::GlyphFormat glyphFormat, ++ int numGlyphs, ++ const glyph_t *glyphs, ++ const QFixedPoint *positions, ++ QFontEngine *fontEngine) override; + + IDirectFBSurface *dfbSurface() const; + +@@ -32,8 +41,8 @@ public: + static DFBSurfacePixelFormat selectPixmapFormat(bool withAlpha); + + protected: +- virtual QImage *doLock(); +- virtual void doUnlock(); ++ QImage *doLock() override; ++ void doUnlock() override; + + QDirectFBPointer<IDirectFBSurface> m_surface; + QImage m_image; +@@ -50,12 +59,12 @@ private: + class QDirectFbBlitterPlatformPixmap : public QBlittablePlatformPixmap + { + public: +- QBlittable *createBlittable(const QSize &size, bool alpha) const; ++ QBlittable *createBlittable(const QSize &size, bool alpha) const override; + + QDirectFbBlitter *dfbBlitter() const; + +- virtual bool fromFile(const QString &filename, const char *format, +- Qt::ImageConversionFlags flags); ++ bool fromFile(const QString &filename, const char *format, ++ Qt::ImageConversionFlags flags) override; + + private: + bool fromDataBufferDescription(const DFBDataBufferDescription &); +@@ -83,7 +92,7 @@ public: + : QImageTextureGlyphCache(format, matrix) + {} + +- virtual void resizeTextureData(int width, int height); ++ void resizeTextureData(int width, int height) override; + + IDirectFBSurface *sourceSurface(); + +diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.h b/src/plugins/platforms/directfb/qdirectfbcursor.h +index 9a480fc8f8..21a8f4353d 100644 +--- a/src/plugins/platforms/directfb/qdirectfbcursor.h ++++ b/src/plugins/platforms/directfb/qdirectfbcursor.h +@@ -19,7 +19,7 @@ class QDirectFBCursor : public QPlatformCursor + public: + QDirectFBCursor(QPlatformScreen *screen); + #ifndef QT_NO_CURSOR +- void changeCursor(QCursor *cursor, QWindow *window); ++ void changeCursor(QCursor *cursor, QWindow *window) override; + #endif + + private: +diff --git a/src/plugins/platforms/directfb/qdirectfbinput.cpp b/src/plugins/platforms/directfb/qdirectfbinput.cpp +index a62ff9882c..516dc1e9d8 100644 +--- a/src/plugins/platforms/directfb/qdirectfbinput.cpp ++++ b/src/plugins/platforms/directfb/qdirectfbinput.cpp +@@ -126,7 +126,7 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event) + long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); + + QWindow *tlw = m_tlwMap.value(event.window.window_id); +- QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons); ++ QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons, Qt::NoButton, QEvent::None); + } + + void QDirectFbInput::handleWheelEvent(const DFBEvent &event) +@@ -135,9 +135,12 @@ void QDirectFbInput::handleWheelEvent(const DFBEvent &event) + QPoint globalPos(event.window.cx, event.window.cy); + long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); + QWindow *tlw = m_tlwMap.value(event.window.window_id); +- QWindowSystemInterface::handleWheelEvent(tlw, timestamp, p, globalPos, +- event.window.step*120, +- Qt::Vertical); ++ QWindowSystemInterface::handleWheelEvent(tlw, ++ timestamp, ++ p, ++ globalPos, ++ QPoint(), ++ QPoint(0, event.window.step*120)); + } + + void QDirectFbInput::handleKeyEvents(const DFBEvent &event) +diff --git a/src/plugins/platforms/directfb/qdirectfbinput.h b/src/plugins/platforms/directfb/qdirectfbinput.h +index 5496f537a2..02175abc7b 100644 +--- a/src/plugins/platforms/directfb/qdirectfbinput.h ++++ b/src/plugins/platforms/directfb/qdirectfbinput.h +@@ -26,7 +26,7 @@ public: + void stopInputEventLoop(); + + protected: +- void run(); ++ void run() override; + + private: + void handleEvents(); +diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.h b/src/plugins/platforms/directfb/qdirectfbintegration.h +index aa369d7c05..8dd2a4516a 100644 +--- a/src/plugins/platforms/directfb/qdirectfbintegration.h ++++ b/src/plugins/platforms/directfb/qdirectfbintegration.h +@@ -25,16 +25,16 @@ public: + + void connectToDirectFb(); + +- bool hasCapability(Capability cap) const; +- QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const; +- QPlatformWindow *createPlatformWindow(QWindow *window) const; +- QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const; +- QAbstractEventDispatcher *createEventDispatcher() const; +- +- QPlatformFontDatabase *fontDatabase() const; +- QPlatformServices *services() const; +- QPlatformInputContext *inputContext() const { return m_inputContext; } +- QPlatformNativeInterface *nativeInterface() const; ++ bool hasCapability(Capability cap) const override; ++ QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const override; ++ QPlatformWindow *createPlatformWindow(QWindow *window) const override; ++ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const override; ++ QAbstractEventDispatcher *createEventDispatcher() const override; ++ ++ QPlatformFontDatabase *fontDatabase() const override; ++ QPlatformServices *services() const override; ++ QPlatformInputContext *inputContext() const override { return m_inputContext; } ++ QPlatformNativeInterface *nativeInterface() const override; + + protected: + virtual void initializeDirectFB(); +diff --git a/src/plugins/platforms/directfb/qdirectfbscreen.h b/src/plugins/platforms/directfb/qdirectfbscreen.h +index a4f2e9adb1..cbcb6a55da 100644 +--- a/src/plugins/platforms/directfb/qdirectfbscreen.h ++++ b/src/plugins/platforms/directfb/qdirectfbscreen.h +@@ -19,11 +19,11 @@ class QDirectFbScreen : public QPlatformScreen + public: + QDirectFbScreen(int display); + +- QRect geometry() const { return m_geometry; } +- int depth() const { return m_depth; } +- QImage::Format format() const { return m_format; } +- QSizeF physicalSize() const { return m_physicalSize; } +- QPlatformCursor *cursor() const { return m_cursor.data(); } ++ QRect geometry() const override { return m_geometry; } ++ int depth() const override { return m_depth; } ++ QImage::Format format() const override { return m_format; } ++ QSizeF physicalSize() const override { return m_physicalSize; } ++ QPlatformCursor *cursor() const override { return m_cursor.data(); } + + // DirectFb helpers + IDirectFBDisplayLayer *dfbLayer() const; +diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.h b/src/plugins/platforms/directfb/qdirectfbwindow.h +index 6413d91860..f05038d8ca 100644 +--- a/src/plugins/platforms/directfb/qdirectfbwindow.h ++++ b/src/plugins/platforms/directfb/qdirectfbwindow.h +@@ -15,19 +15,19 @@ class QDirectFbWindow : public QPlatformWindow + { + public: + QDirectFbWindow(QWindow *tlw, QDirectFbInput *inputhandler); +- ~QDirectFbWindow(); ++ ~QDirectFbWindow() override; + +- void setGeometry(const QRect &rect); +- void setOpacity(qreal level); ++ void setGeometry(const QRect &rect) override; ++ void setOpacity(qreal level) override; + +- void setVisible(bool visible); ++ void setVisible(bool visible) override; + +- void setWindowFlags(Qt::WindowFlags flags); +- bool setKeyboardGrabEnabled(bool grab); +- bool setMouseGrabEnabled(bool grab); +- void raise(); +- void lower(); +- WId winId() const; ++ void setWindowFlags(Qt::WindowFlags flags) override; ++ bool setKeyboardGrabEnabled(bool grab) override; ++ bool setMouseGrabEnabled(bool grab) override; ++ void raise() override; ++ void lower() override; ++ WId winId() const override; + + virtual void createDirectFBWindow(); + IDirectFBWindow *dfbWindow() const; +-- +2.39.2 + diff --git a/package/qt6/qt6base/qt6base.mk b/package/qt6/qt6base/qt6base.mk index 049d73a84f..a904d6edc8 100644 --- a/package/qt6/qt6base/qt6base.mk +++ b/package/qt6/qt6base/qt6base.mk @@ -181,6 +181,13 @@ else QT6BASE_CONF_OPTS += -DFEATURE_linuxfb=OFF endif +ifeq ($(BR2_PACKAGE_QT6BASE_DIRECTFB),y) +QT6BASE_CONF_OPTS += -DFEATURE_directfb=ON +QT6BASE_DEPENDENCIES += directfb +else +QT6BASE_CONF_OPTS += -DFEATURE_directfb=OFF +endif + ifeq ($(BR2_PACKAGE_QT6BASE_XCB),y) QT6BASE_CONF_OPTS += \ -DFEATURE_xcb=ON \
Apply a patch from upstream to make Qt 6 support DirectFB again. Implement a config option for this, similar to what we do for Qt 5. Signed-off-by: Ben Hutchings <ben.hutchings@mind.be> --- package/qt6/qt6base/Config.in | 8 + .../qt6base-directfb-Fix-compilation.patch | 288 ++++++++++++++++++ package/qt6/qt6base/qt6base.mk | 7 + 3 files changed, 303 insertions(+) create mode 100644 package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch