Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Yann E. MORIN" <yann.morin.1998@free.fr>
To: Ben Hutchings <ben.hutchings@mind.be>
Cc: buildroot@buildroot.org
Subject: Re: [Buildroot] [PATCH] package/qt6/qt6base: Restore DirectFB support
Date: Thu, 11 Apr 2024 20:48:19 +0200	[thread overview]
Message-ID: <ZhgwczmiLaRsX25t@landeda> (raw)
In-Reply-To: <20240411145559.1183064-2-ben.hutchings@mind.be>

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 &region, 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 &region, 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

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

  reply	other threads:[~2024-04-11 18:48 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-11 14:55 [Buildroot] [PATCH] package/qt6/qt6base: Make qmake work Ben Hutchings via buildroot
2024-04-11 14:55 ` [Buildroot] [PATCH] package/qt6/qt6base: Restore DirectFB support Ben Hutchings via buildroot
2024-04-11 18:48   ` Yann E. MORIN [this message]
2024-04-12 21:18     ` Ben Hutchings via buildroot
2024-09-14 16:44   ` Thomas Petazzoni via buildroot
2024-09-14 16:16 ` [Buildroot] [PATCH] package/qt6/qt6base: Make qmake work Thomas Petazzoni via buildroot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZhgwczmiLaRsX25t@landeda \
    --to=yann.morin.1998@free.fr \
    --cc=ben.hutchings@mind.be \
    --cc=buildroot@buildroot.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox