All of 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.