diff --git a/buildroot/buildroot-2016.08.1/package/qt5/qt5base/0008-linuxfb-rotate.patch b/buildroot/buildroot-2016.08.1/package/qt5/qt5base/0008-linuxfb-rotate.patch new file mode 100644 index 0000000..260769a --- /dev/null +++ b/buildroot/buildroot-2016.08.1/package/qt5/qt5base/0008-linuxfb-rotate.patch @@ -0,0 +1,102 @@ +diff --git a/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp b/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp +--- a/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp 2017-03-06 15:43:16.205457343 +0900 ++++ b/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp 2017-03-06 13:38:20.857076470 +0900 +@@ -280,7 +280,7 @@ + } + + QLinuxFbScreen::QLinuxFbScreen(const QStringList &args) +- : mArgs(args), mFbFd(-1), mTtyFd(-1), mBlitter(0) ++ : mArgs(args), mFbFd(-1), mTtyFd(-1), mBlitter(0), mRotation(0) + { + mMmap.data = 0; + } +@@ -306,6 +306,7 @@ + QRegularExpression mmSizeRx(QLatin1String("mmsize=(\\d+)x(\\d+)")); + QRegularExpression sizeRx(QLatin1String("size=(\\d+)x(\\d+)")); + QRegularExpression offsetRx(QLatin1String("offset=(\\d+)x(\\d+)")); ++ QRegularExpression rotationRx(QLatin1String("rotation=(0|90|180|270)")); + + QString fbDevice, ttyDevice; + QSize userMmSize; +@@ -327,6 +328,8 @@ + ttyDevice = match.captured(1); + else if (arg.contains(fbRx, &match)) + fbDevice = match.captured(1); ++ else if (arg.contains(rotationRx, &match)) ++ mRotation = match.captured(1).toInt(); + } + + if (fbDevice.isEmpty()) { +@@ -365,9 +368,17 @@ + mDepth = determineDepth(vinfo); + mBytesPerLine = finfo.line_length; + QRect geometry = determineGeometry(vinfo, userGeometry); ++ QRect originalGeometry = geometry; ++ if( mRotation == 90 || mRotation == 270 ) ++ { ++ int tmp = geometry.width(); ++ geometry.setWidth(geometry.height()); ++ geometry.setHeight(tmp); ++ } ++ + mGeometry = QRect(QPoint(0, 0), geometry.size()); + mFormat = determineFormat(vinfo, mDepth); +- mPhysicalSize = determinePhysicalSize(vinfo, userMmSize, geometry.size()); ++ mPhysicalSize = determinePhysicalSize(vinfo, userMmSize, originalGeometry.size()); + + // mmap the framebuffer + mMmap.size = finfo.smem_len; +@@ -377,11 +388,11 @@ + return false; + } + +- mMmap.offset = geometry.y() * mBytesPerLine + geometry.x() * mDepth / 8; ++ mMmap.offset = originalGeometry.y() * mBytesPerLine + originalGeometry.x() * mDepth / 8; + mMmap.data = data + mMmap.offset; + + QFbScreen::initializeCompositor(); +- mFbScreenImage = QImage(mMmap.data, geometry.width(), geometry.height(), mBytesPerLine, mFormat); ++ mFbScreenImage = QImage(mMmap.data, originalGeometry.width(), originalGeometry.height(), mBytesPerLine, mFormat); + + mCursor = new QFbCursor(this); + +@@ -409,8 +420,27 @@ + mBlitter->setCompositionMode(QPainter::CompositionMode_Source); + + for (int i = 0; i < rects.size(); ++i) ++ { ++ if( mRotation == 90 || mRotation == 270 ) ++ { ++ mBlitter->translate(mGeometry.height()/2, mGeometry.width()/2); ++ } ++ else if( mRotation == 180 ) ++ { ++ mBlitter->translate(mGeometry.width()/2, mGeometry.height()/2); ++ } ++ ++ if( mRotation != 0 ) ++ { ++ mBlitter->rotate(mRotation); ++ mBlitter->translate(-mGeometry.width()/2, -mGeometry.height()/2); ++ } ++ + mBlitter->drawImage(rects[i], *mScreenImage, rects[i]); + ++ mBlitter->resetTransform(); ++ } ++ + return touched; + } + +diff --git a/src/plugins/platforms/linuxfb/qlinuxfbscreen.h b/src/plugins/platforms/linuxfb/qlinuxfbscreen.h +--- a/src/plugins/platforms/linuxfb/qlinuxfbscreen.h 2016-05-26 00:46:17.000000000 +0900 ++++ b/src/plugins/platforms/linuxfb/qlinuxfbscreen.h 2017-03-06 13:38:20.857076470 +0900 +@@ -58,6 +58,7 @@ + QStringList mArgs; + int mFbFd; + int mTtyFd; ++ int mRotation; + + QImage mFbScreenImage; + int mBytesPerLine; +