Dispatch tablet events to widgets
Plus remove some platform-specific tablet leftovers from Qt4. Change-Id: I376abc38d1fe4c253d8803cf0ce007e2d6c298bf Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
This commit is contained in:
parent
79a025b88a
commit
4f27960dd8
@ -94,7 +94,6 @@ extern QClipboard *qt_clipboard;
|
||||
|
||||
#if defined (Q_OS_WIN32) || defined (Q_OS_CYGWIN) || defined(Q_OS_WINCE)
|
||||
extern QSysInfo::WinVersion qt_winver;
|
||||
enum { QT_TABLET_NPACKETQSIZE = 128 };
|
||||
# ifdef Q_OS_WINCE
|
||||
extern DWORD qt_cever;
|
||||
# endif
|
||||
@ -107,56 +106,6 @@ class QDirectPainter;
|
||||
struct QWSServerCleaner { ~QWSServerCleaner(); };
|
||||
#endif
|
||||
|
||||
#ifndef QT_NO_TABLET
|
||||
struct QTabletDeviceData
|
||||
{
|
||||
#ifndef Q_WS_MAC
|
||||
int minPressure;
|
||||
int maxPressure;
|
||||
int minTanPressure;
|
||||
int maxTanPressure;
|
||||
int minX, maxX, minY, maxY, minZ, maxZ;
|
||||
inline QPointF scaleCoord(int coordX, int coordY, int outOriginX, int outExtentX,
|
||||
int outOriginY, int outExtentY) const;
|
||||
#endif
|
||||
};
|
||||
|
||||
static inline int sign(int x)
|
||||
{
|
||||
return x >= 0 ? 1 : -1;
|
||||
}
|
||||
|
||||
#ifndef Q_WS_MAC
|
||||
inline QPointF QTabletDeviceData::scaleCoord(int coordX, int coordY,
|
||||
int outOriginX, int outExtentX,
|
||||
int outOriginY, int outExtentY) const
|
||||
{
|
||||
QPointF ret;
|
||||
|
||||
if (sign(outExtentX) == sign(maxX))
|
||||
ret.setX(((coordX - minX) * qAbs(outExtentX) / qAbs(qreal(maxX - minX))) + outOriginX);
|
||||
else
|
||||
ret.setX(((qAbs(maxX) - (coordX - minX)) * qAbs(outExtentX) / qAbs(qreal(maxX - minX)))
|
||||
+ outOriginX);
|
||||
|
||||
if (sign(outExtentY) == sign(maxY))
|
||||
ret.setY(((coordY - minY) * qAbs(outExtentY) / qAbs(qreal(maxY - minY))) + outOriginY);
|
||||
else
|
||||
ret.setY(((qAbs(maxY) - (coordY - minY)) * qAbs(outExtentY) / qAbs(qreal(maxY - minY)))
|
||||
+ outOriginY);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
typedef QList<QTabletDeviceData> QTabletDeviceDataList;
|
||||
QTabletDeviceDataList *qt_tablet_devices();
|
||||
# if defined(Q_WS_MAC)
|
||||
typedef QHash<int, QTabletDeviceData> QMacTabletHash;
|
||||
QMacTabletHash *qt_mac_tablet_hash();
|
||||
# endif
|
||||
#endif
|
||||
|
||||
typedef QHash<QByteArray, QFont> FontHash;
|
||||
FontHash *qt_app_fonts_hash();
|
||||
|
||||
@ -282,15 +231,6 @@ public:
|
||||
static void applyQWSSpecificCommandLineArguments(QWidget *main_widget);
|
||||
#endif
|
||||
|
||||
#ifdef Q_WS_MAC
|
||||
static OSStatus globalEventProcessor(EventHandlerCallRef, EventRef, void *);
|
||||
static OSStatus globalAppleEventProcessor(const AppleEvent *, AppleEvent *, long);
|
||||
static OSStatus tabletProximityCallback(EventHandlerCallRef, EventRef, void *);
|
||||
static void qt_initAfterNSAppStarted();
|
||||
static void setupAppleEvents();
|
||||
static bool qt_mac_apply_settings();
|
||||
#endif
|
||||
|
||||
#ifdef Q_WS_QWS
|
||||
QPointer<QWSManager> last_manager;
|
||||
QWSServerCleaner qwsServerCleaner;
|
||||
|
@ -51,6 +51,7 @@
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
QWidget *qt_button_down = 0; // widget got last button-down
|
||||
static QWidget *qt_tablet_target = 0;
|
||||
|
||||
// popup control
|
||||
QWidget *qt_popup_down = 0; // popup that contains the pressed widget
|
||||
@ -178,6 +179,14 @@ bool QWidgetWindow::event(QEvent *event)
|
||||
}
|
||||
return true;
|
||||
|
||||
#ifndef QT_NO_TABLETEVENT
|
||||
case QEvent::TabletPress:
|
||||
case QEvent::TabletMove:
|
||||
case QEvent::TabletRelease:
|
||||
handleTabletEvent(static_cast<QTabletEvent *>(event));
|
||||
return true;
|
||||
#endif
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -527,6 +536,32 @@ bool QWidgetWindow::nativeEvent(const QByteArray &eventType, void *message, long
|
||||
return m_widget->nativeEvent(eventType, message, result);
|
||||
}
|
||||
|
||||
#ifndef QT_NO_TABLETEVENT
|
||||
void QWidgetWindow::handleTabletEvent(QTabletEvent *event)
|
||||
{
|
||||
if (event->type() == QEvent::TabletPress) {
|
||||
QWidget *widget = m_widget->childAt(event->pos());
|
||||
if (!widget)
|
||||
widget = m_widget;
|
||||
|
||||
qt_tablet_target = widget;
|
||||
}
|
||||
|
||||
if (qt_tablet_target) {
|
||||
QPointF delta = event->globalPosF() - event->globalPos();
|
||||
QPointF mapped = qt_tablet_target->mapFromGlobal(event->globalPos()) + delta;
|
||||
QTabletEvent ev(event->type(), mapped, event->globalPosF(), event->device(), event->pointerType(),
|
||||
event->pressure(), event->xTilt(), event->yTilt(), event->tangentialPressure(),
|
||||
event->rotation(), event->z(), event->modifiers(), event->uniqueId());
|
||||
ev.setTimestamp(event->timestamp());
|
||||
QGuiApplication::sendSpontaneousEvent(qt_tablet_target, &ev);
|
||||
}
|
||||
|
||||
if (event->type() == QEvent::TabletRelease)
|
||||
qt_tablet_target = 0;
|
||||
}
|
||||
#endif // QT_NO_TABLETEVENT
|
||||
|
||||
void QWidgetWindow::updateObjectName()
|
||||
{
|
||||
QString name = m_widget->objectName();
|
||||
|
@ -84,6 +84,9 @@ protected:
|
||||
void handleExposeEvent(QExposeEvent *);
|
||||
void handleWindowStateChangedEvent(QWindowStateChangeEvent *event);
|
||||
bool nativeEvent(const QByteArray &eventType, void *message, long *result);
|
||||
#ifndef QT_NO_TABLETEVENT
|
||||
void handleTabletEvent(QTabletEvent *);
|
||||
#endif
|
||||
|
||||
private slots:
|
||||
void updateObjectName();
|
||||
|
Loading…
Reference in New Issue
Block a user