Added rotation parameter to qevdevtouch
In some cases the event coordinates reported by evdev are in different orientation compared to the primary orientation of the platform window. This commit adds plugin parameter rotate=[90, 180, 270] to rotate the normalized coordinate system before reporting the touch event. Change-Id: Ic830a2d259f9d3c5fb63b80afb795d8b400c2ece Reviewed-by: Andy Nichols <andy.nichols@digia.com>
This commit is contained in:
parent
c9398312fe
commit
fdde071b06
@ -125,6 +125,7 @@ public:
|
||||
bool m_forceToActiveWindow;
|
||||
QTouchDevice *m_device;
|
||||
bool m_typeB;
|
||||
QTransform m_rotate;
|
||||
};
|
||||
|
||||
QEvdevTouchScreenData::QEvdevTouchScreenData(QEvdevTouchScreenHandler *q_ptr, const QStringList &args)
|
||||
@ -177,10 +178,24 @@ QEvdevTouchScreenHandler::QEvdevTouchScreenHandler(const QString &specification,
|
||||
|
||||
QStringList args = spec.split(QLatin1Char(':'));
|
||||
|
||||
int rotationAngle = 0;
|
||||
for (int i = 0; i < args.count(); ++i) {
|
||||
if (args.at(i).startsWith(QLatin1String("/dev/"))) {
|
||||
if (args.at(i).startsWith(QLatin1String("/dev/")) && dev.isEmpty()) {
|
||||
dev = args.at(i);
|
||||
break;
|
||||
} else if (args.at(i).startsWith(QLatin1String("rotate"))) {
|
||||
QString rotateArg = args.at(i).section(QLatin1Char('='), 1, 1);
|
||||
bool ok;
|
||||
uint argValue = rotateArg.toUInt(&ok);
|
||||
if (ok) {
|
||||
switch (argValue) {
|
||||
case 90:
|
||||
case 180:
|
||||
case 270:
|
||||
rotationAngle = argValue;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -265,6 +280,9 @@ QEvdevTouchScreenHandler::QEvdevTouchScreenHandler(const QString &specification,
|
||||
#endif
|
||||
qDebug("Protocol type %c %s", d->m_typeB ? 'B' : 'A', mtdevStr);
|
||||
|
||||
if (rotationAngle)
|
||||
d->m_rotate = QTransform::fromTranslate(0.5, 0.5).rotate(rotationAngle).translate(-0.5, -0.5);
|
||||
|
||||
d->registerDevice();
|
||||
}
|
||||
|
||||
@ -421,6 +439,9 @@ void QEvdevTouchScreenData::processInputEvent(input_event *data)
|
||||
tp.normalPosition = QPointF((contact.x - hw_range_x_min) / qreal(hw_range_x_max - hw_range_x_min),
|
||||
(contact.y - hw_range_y_min) / qreal(hw_range_y_max - hw_range_y_min));
|
||||
|
||||
if (!m_rotate.isIdentity())
|
||||
tp.normalPosition = m_rotate.map(tp.normalPosition);
|
||||
|
||||
tp.rawPositions.append(QPointF(contact.x, contact.y));
|
||||
|
||||
m_touchPoints.append(tp);
|
||||
|
Loading…
Reference in New Issue
Block a user