Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. QT5, linuxfb doesn't seem to work with tslib plugin.

QT5, linuxfb doesn't seem to work with tslib plugin.

Scheduled Pinned Locked Moved Mobile and Embedded
5 Posts 3 Posters 7.1k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D Offline
    D Offline
    daneilg
    wrote on last edited by
    #1

    I am working on porting a QT4 app to QT5.
    Despite the fact that I am using a PhyCORE-AM335(GL ES2 ) board for testing, the only QPA platform option I have is linuxfb because the app is suppose to run also on some older board where only linuxfb is available.

    1. Using Codesorcery lite (24.5.2013) for compilation.

    2. built QT with the following conf spec
      @ ./configure -continue -verbose -qpa linuxfb -linuxfb -no-iconv -no-warnings-are-errors -opensource -no-optimized-qmake -release -no-icu -no-opengl -no-xcb -no-largefile -no-opengl -qt-zlib -qt-libpng -qt-libjpeg -openssl -nomake examples -nomake tests -confirm-license -prefix /opt/arm -xplatform linux-arm-gnueabi-g++@

    3. tslib enviroment is already set ( the QT4 app is working fine)

    4. I have applied "this":https://github.com/prabindh/qt-configs/blob/master/qt5_1.0_Feb13/tslib.patch patch.

    5. I build qtslib plugin with the printf uncommented
      @
      void QTsLibMouseHandler::readMouseData()
      {
      ...
      QPoint pos(x, y);

       printf("handleMouseEvent %d %d %d %ld\n", m_x, m_y, pressed, sample.tv.tv_usec);
      
       QWindowSystemInterface::handleMouseEvent(0, pos, pos, pressed ? Qt::LeftButton : Qt::NoButton);
      

    ...
    }
    }@

    When launched the "handleMouseEvent" messages are shown but still the input is not taken.
    This means the input is more or less not propagated properly through QWindowSystemInterface::handleMouseEvent...
    After taking a look at the platform code I noticed that the linuxfb implements no window interface like other plugins (directfb, xcb) do.

    Here there are 2 scenarios
    2.a It should work as it is and it's a bug( or a feature ofc) I haven't included
    2.b. It's simply not implemented and in this case I would really apreciate some hints of about how to start implementing it.

    thank you in advance,
    Daniel

    1 Reply Last reply
    0
    • D Offline
      D Offline
      daneilg
      wrote on last edited by
      #2

      After some researchign I found out that the screen handling in linuxfb plugin was the issue. Basically , for the linuxfb platform, the screen was registered before its geometry was calculated resulting that the qpa controller will deal with a screen instance that has geometry of QRect(0,0,1,1) . This masks pretty much all the painting and the input.

      Other than that I forced a default font size of at least 10 since on my system the default pixel size is 0 rendering all the layout based samples(most of them) to look really really small.

      The changes that made the things work for me:
      @

      QLinuxFbIntegration::QLinuxFbIntegration(const QStringList &paramList)
      : m_fontDb(new QGenericUnixFontDatabase()),m_paramList(paramList)
      {
      }

      void QLinuxFbIntegration::initialize()
      {
      initializeFont();
      initializeScreen();
      }
      void QLinuxFbIntegration::initializeScreen()
      {
      m_primaryScreen = new QLinuxFbScreen(m_paramList);
      m_primaryScreen->initialize();
      screenAdded(m_primaryScreen);
      }

      void QLinuxFbIntegration::initializeFont()
      {
      if(m_fontDb &&
      m_fontDb->defaultFont().pixelSize() < 10)
      {
      m_fontDb->defaultFont().setPixelSize(10);
      }

      }

      QT_END_NAMESPACE
      @

      and the header

      @
      #ifndef QLINUXFBINTEGRATION_H
      #define QLINUXFBINTEGRATION_H

      #include <qpa/qplatformintegration.h>

      QT_BEGIN_NAMESPACE

      class QLinuxFbIntegrationPrivate;
      class QAbstractEventDispatcher;
      class QLinuxFbScreen;

      class QLinuxFbIntegration : public QPlatformIntegration
      {

      ........
      protected:
      virtual void initializeScreen();
      virtual void initializeFont();
      ..............
      private:
      QStringList m_paramList;
      ............

      };

      QT_END_NAMESPACE

      #endif // QLINUXFBINTEGRATION_H
      @

      1 Reply Last reply
      0
      • D Offline
        D Offline
        daneilg
        wrote on last edited by
        #3

        Also a minor change for tslib plugin.
        Since most systems that use tslib have already defined TSLIB_TSDEVICE , I thought it makes sense to inherit this as the default value when available.

        /base/src/plugins/generic/tslib/qtslib.cpp
        @
        QTsLibMouseHandler::QTsLibMouseHandler(const QString &key,
        const QString &specification)
        : m_notify(0), m_x(0), m_y(0), m_pressed(0), m_rawMode(false)
        {
        ...
        QByteArray device = qgetenv("TSLIB_TSDEVICE");
        if(device.isEmpty())
        {
        device = "/dev/input/event0";
        }
        .....
        }
        @

        1 Reply Last reply
        0
        • K Offline
          K Offline
          kuschky
          wrote on last edited by
          #4

          Great, It solves also my problem

          http://qt-project.org/forums/viewthread/36120/

          Thank you very much daneilg!

          1 Reply Last reply
          0
          • S Offline
            S Offline
            Sidii
            wrote on last edited by
            #5

            Dear Daneilg,

            I did the same but when i run the application,
            @QTsLibMouseHandler::QTsLibMouseHandler(const QString &key,
            const QString &specification)
            : m_notify(0), m_x(0), m_y(0), m_pressed(0), m_rawMode(false)
            {
            qDebug() << "QTsLibMouseHandler" << key << specification;
            @
            Above qDebug statement is not getting called. This means the control is not going into the qtslib.cpp file.

            Please share your valuable advice.

            Thanks

            1 Reply Last reply
            0

            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved