Expose screen to MouseEventListener events
This commit is contained in:
parent
a26913ccac
commit
906caec817
@ -25,7 +25,7 @@
|
|||||||
#include <QMouseEvent>
|
#include <QMouseEvent>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QQuickWindow>
|
#include <QQuickWindow>
|
||||||
|
#include <QScreen>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
static const int PressAndHoldDelay = 800;
|
static const int PressAndHoldDelay = 800;
|
||||||
@ -107,12 +107,12 @@ void MouseEventListener::hoverMoveEvent(QHoverEvent * event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
QQuickWindow *w = window();
|
QQuickWindow *w = window();
|
||||||
QPoint screenPos = QPoint();
|
QPoint screenPos;
|
||||||
if (w) {
|
if (w) {
|
||||||
w->mapToGlobal(event->pos());
|
screenPos = w->mapToGlobal(event->pos());
|
||||||
}
|
}
|
||||||
|
|
||||||
KDeclarativeMouseEvent dme(event->pos().x(), event->pos().y(), screenPos.x(), screenPos.y(), Qt::NoButton, Qt::NoButton, event->modifiers());
|
KDeclarativeMouseEvent dme(event->pos().x(), event->pos().y(), screenPos.x(), screenPos.y(), Qt::NoButton, Qt::NoButton, event->modifiers(), 0);
|
||||||
emit positionChanged(&dme);
|
emit positionChanged(&dme);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,8 +137,8 @@ void MouseEventListener::mousePressEvent(QMouseEvent *me)
|
|||||||
}
|
}
|
||||||
m_buttonDownPos[me->button()] = me->pos();
|
m_buttonDownPos[me->button()] = me->pos();
|
||||||
|
|
||||||
KDeclarativeMouseEvent dme(me->pos().x(), me->pos().y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers());
|
KDeclarativeMouseEvent dme(me->pos().x(), me->pos().y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos()));
|
||||||
m_pressAndHoldEvent = new KDeclarativeMouseEvent(me->pos().x(), me->pos().y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers());
|
m_pressAndHoldEvent = new KDeclarativeMouseEvent(me->pos().x(), me->pos().y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos()));
|
||||||
emit pressed(&dme);
|
emit pressed(&dme);
|
||||||
m_pressed = true;
|
m_pressed = true;
|
||||||
|
|
||||||
@ -152,7 +152,7 @@ void MouseEventListener::mouseMoveEvent(QMouseEvent *me)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
KDeclarativeMouseEvent dme(me->pos().x(), me->pos().y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers());
|
KDeclarativeMouseEvent dme(me->pos().x(), me->pos().y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos()));
|
||||||
emit positionChanged(&dme);
|
emit positionChanged(&dme);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,7 +163,7 @@ void MouseEventListener::mouseReleaseEvent(QMouseEvent *me)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
KDeclarativeMouseEvent dme(me->pos().x(), me->pos().y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers());
|
KDeclarativeMouseEvent dme(me->pos().x(), me->pos().y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos()));
|
||||||
m_pressed = false;
|
m_pressed = false;
|
||||||
emit released(&dme);
|
emit released(&dme);
|
||||||
|
|
||||||
@ -217,8 +217,8 @@ bool MouseEventListener::childMouseEventFilter(QQuickItem *item, QEvent *event)
|
|||||||
|
|
||||||
//the parent will receive events in its own coordinates
|
//the parent will receive events in its own coordinates
|
||||||
const QPointF myPos = item->mapToItem(this, me->pos());
|
const QPointF myPos = item->mapToItem(this, me->pos());
|
||||||
KDeclarativeMouseEvent dme(myPos.x(), myPos.y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers());
|
KDeclarativeMouseEvent dme(myPos.x(), myPos.y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos()));
|
||||||
m_pressAndHoldEvent = new KDeclarativeMouseEvent(myPos.x(), myPos.y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers());
|
m_pressAndHoldEvent = new KDeclarativeMouseEvent(myPos.x(), myPos.y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos()));
|
||||||
//qDebug() << "pressed in sceneEventFilter";
|
//qDebug() << "pressed in sceneEventFilter";
|
||||||
m_buttonDownPos[me->button()] = me->pos();
|
m_buttonDownPos[me->button()] = me->pos();
|
||||||
emit pressed(&dme);
|
emit pressed(&dme);
|
||||||
@ -236,14 +236,14 @@ bool MouseEventListener::childMouseEventFilter(QQuickItem *item, QEvent *event)
|
|||||||
const QPointF myPos = item->mapToItem(this, he->pos());
|
const QPointF myPos = item->mapToItem(this, he->pos());
|
||||||
|
|
||||||
QQuickWindow *w = window();
|
QQuickWindow *w = window();
|
||||||
QPoint screenPos = QPoint();
|
QPoint screenPos;
|
||||||
if (w) {
|
if (w) {
|
||||||
w->mapToGlobal(myPos.toPoint());
|
screenPos = w->mapToGlobal(myPos.toPoint());
|
||||||
}
|
}
|
||||||
|
|
||||||
KDeclarativeMouseEvent dme(myPos.x(), myPos.y(), screenPos.x(), screenPos.y(), Qt::NoButton, Qt::NoButton, he->modifiers());
|
KDeclarativeMouseEvent dme(myPos.x(), myPos.y(), screenPos.x(), screenPos.y(), Qt::NoButton, Qt::NoButton, he->modifiers(), 0);
|
||||||
//qDebug() << "positionChanged..." << dme.x() << dme.y();
|
//qDebug() << "positionChanged..." << dme.x() << dme.y();
|
||||||
m_pressAndHoldEvent = new KDeclarativeMouseEvent(myPos.x(), myPos.y(), screenPos.x(), screenPos.y(), Qt::NoButton, Qt::NoButton, he->modifiers());
|
m_pressAndHoldEvent = new KDeclarativeMouseEvent(myPos.x(), myPos.y(), screenPos.x(), screenPos.y(), Qt::NoButton, Qt::NoButton, he->modifiers(),0);
|
||||||
emit positionChanged(&dme);
|
emit positionChanged(&dme);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -255,9 +255,9 @@ bool MouseEventListener::childMouseEventFilter(QQuickItem *item, QEvent *event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const QPointF myPos = item->mapToItem(this, me->pos());
|
const QPointF myPos = item->mapToItem(this, me->pos());
|
||||||
KDeclarativeMouseEvent dme(myPos.x(), myPos.y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers());
|
KDeclarativeMouseEvent dme(myPos.x(), myPos.y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos()));
|
||||||
//qDebug() << "positionChanged..." << dme.x() << dme.y();
|
//qDebug() << "positionChanged..." << dme.x() << dme.y();
|
||||||
m_pressAndHoldEvent = new KDeclarativeMouseEvent(myPos.x(), myPos.y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers());
|
m_pressAndHoldEvent = new KDeclarativeMouseEvent(myPos.x(), myPos.y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos()));
|
||||||
emit positionChanged(&dme);
|
emit positionChanged(&dme);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -266,7 +266,7 @@ bool MouseEventListener::childMouseEventFilter(QQuickItem *item, QEvent *event)
|
|||||||
QMouseEvent *me = static_cast<QMouseEvent *>(event);
|
QMouseEvent *me = static_cast<QMouseEvent *>(event);
|
||||||
|
|
||||||
const QPointF myPos = item->mapToItem(this, me->pos());
|
const QPointF myPos = item->mapToItem(this, me->pos());
|
||||||
KDeclarativeMouseEvent dme(myPos.x(), myPos.y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers());
|
KDeclarativeMouseEvent dme(myPos.x(), myPos.y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos()));
|
||||||
m_pressed = false;
|
m_pressed = false;
|
||||||
|
|
||||||
emit released(&dme);
|
emit released(&dme);
|
||||||
@ -292,5 +292,16 @@ bool MouseEventListener::childMouseEventFilter(QQuickItem *item, QEvent *event)
|
|||||||
// return false;
|
// return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QScreen* MouseEventListener::screenForGlobalPos(const QPoint& globalPos)
|
||||||
|
{
|
||||||
|
foreach(QScreen *screen, QGuiApplication::screens()) {
|
||||||
|
if (screen->geometry().contains(globalPos)) {
|
||||||
|
return screen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#include "mouseeventlistener.moc"
|
#include "mouseeventlistener.moc"
|
||||||
|
|
||||||
|
@ -33,19 +33,22 @@ class KDeclarativeMouseEvent : public QObject
|
|||||||
Q_PROPERTY(int button READ button)
|
Q_PROPERTY(int button READ button)
|
||||||
Q_PROPERTY(Qt::MouseButtons buttons READ buttons)
|
Q_PROPERTY(Qt::MouseButtons buttons READ buttons)
|
||||||
Q_PROPERTY(Qt::KeyboardModifiers modifiers READ modifiers)
|
Q_PROPERTY(Qt::KeyboardModifiers modifiers READ modifiers)
|
||||||
|
Q_PROPERTY(QScreen* screen READ screen CONSTANT)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
KDeclarativeMouseEvent(int x, int y, int screenX, int screenY,
|
KDeclarativeMouseEvent(int x, int y, int screenX, int screenY,
|
||||||
Qt::MouseButton button,
|
Qt::MouseButton button,
|
||||||
Qt::MouseButtons buttons,
|
Qt::MouseButtons buttons,
|
||||||
Qt::KeyboardModifiers modifiers)
|
Qt::KeyboardModifiers modifiers,
|
||||||
|
QScreen* screen)
|
||||||
: m_x(x),
|
: m_x(x),
|
||||||
m_y(y),
|
m_y(y),
|
||||||
m_screenX(screenX),
|
m_screenX(screenX),
|
||||||
m_screenY(screenY),
|
m_screenY(screenY),
|
||||||
m_button(button),
|
m_button(button),
|
||||||
m_buttons(buttons),
|
m_buttons(buttons),
|
||||||
m_modifiers(modifiers)
|
m_modifiers(modifiers),
|
||||||
|
m_screen(screen)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
int x() const { return m_x; }
|
int x() const { return m_x; }
|
||||||
@ -55,6 +58,7 @@ public:
|
|||||||
int button() const { return m_button; }
|
int button() const { return m_button; }
|
||||||
Qt::MouseButtons buttons() const { return m_buttons; }
|
Qt::MouseButtons buttons() const { return m_buttons; }
|
||||||
Qt::KeyboardModifiers modifiers() const { return m_modifiers; }
|
Qt::KeyboardModifiers modifiers() const { return m_modifiers; }
|
||||||
|
QScreen* screen() const { return m_screen; }
|
||||||
|
|
||||||
// only for internal usage
|
// only for internal usage
|
||||||
void setX(int x) { m_x = x; }
|
void setX(int x) { m_x = x; }
|
||||||
@ -68,6 +72,7 @@ private:
|
|||||||
Qt::MouseButton m_button;
|
Qt::MouseButton m_button;
|
||||||
Qt::MouseButtons m_buttons;
|
Qt::MouseButtons m_buttons;
|
||||||
Qt::KeyboardModifiers m_modifiers;
|
Qt::KeyboardModifiers m_modifiers;
|
||||||
|
QScreen *m_screen;
|
||||||
};
|
};
|
||||||
|
|
||||||
class KDeclarativeWheelEvent : public QObject
|
class KDeclarativeWheelEvent : public QObject
|
||||||
@ -173,6 +178,8 @@ private Q_SLOTS:
|
|||||||
void handlePressAndHold();
|
void handlePressAndHold();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static QScreen* screenForGlobalPos(const QPoint &globalPos);
|
||||||
|
|
||||||
QPointF buttonDownPos(int btn) const;
|
QPointF buttonDownPos(int btn) const;
|
||||||
bool m_pressed;
|
bool m_pressed;
|
||||||
KDeclarativeMouseEvent* m_pressAndHoldEvent;
|
KDeclarativeMouseEvent* m_pressAndHoldEvent;
|
||||||
|
Loading…
Reference in New Issue
Block a user