diff options
author | Mateusz Łukasik <mati75@linuxmint.pl> | 2015-10-06 15:06:23 +0200 |
---|---|---|
committer | Mateusz Łukasik <mati75@linuxmint.pl> | 2015-10-06 15:06:23 +0200 |
commit | cad53e4ce7061f8bc7d49c8123ca6fc6155c79fd (patch) | |
tree | 9da50be8116ad843a2f01441c1e65c4816e4927d /src/mplayerwindow.cpp | |
parent | ac1e595cfef357d7ef481dbbefb88996af72eb79 (diff) |
Imported Upstream version 15.9.0~ds0
Diffstat (limited to 'src/mplayerwindow.cpp')
-rw-r--r-- | src/mplayerwindow.cpp | 117 |
1 files changed, 69 insertions, 48 deletions
diff --git a/src/mplayerwindow.cpp b/src/mplayerwindow.cpp index 06e5c88..c961168 100644 --- a/src/mplayerwindow.cpp +++ b/src/mplayerwindow.cpp @@ -206,9 +206,9 @@ MplayerWindow::MplayerWindow(QWidget* parent, Qt::WindowFlags f) , animated_logo(false) #endif , corner_widget(0) - , mouse_drag_tracking(false) - , isMoving(false) - , startDrag(QPoint(0,0)) + , drag_state(NOT_DRAGGING) + , start_drag(QPoint(0,0)) + , mouse_drag_tracking(false) { setAutoFillBackground(true); ColorUtils::setBackgroundColor( this, QColor(0,0,0) ); @@ -480,53 +480,74 @@ void MplayerWindow::wheelEvent( QWheelEvent * e ) { } } -/* the code in eventFilter is based on dragmovecharm.cpp, under license GPL 2 or 3: - https://qt.gitorious.org/qt-labs/graphics-dojo/source/8000ca3b229344ed2ba2ae81ed5ebaee86e9d63a:dragmove/dragmovecharm.cpp -*/ bool MplayerWindow::eventFilter( QObject * object, QEvent * event ) { - //qDebug() << "MplayerWindow::eventFilter" << object; - - if (!mouse_drag_tracking) return false; - - QWidget * w = qobject_cast<QWidget*>(object); - if (!w) return false; - - QEvent::Type type = event->type(); - if (type != QEvent::MouseButtonPress && type != QEvent::MouseButtonRelease && type != QEvent::MouseMove) { - return false; - } - - QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(event); - if (!mouseEvent || mouseEvent->modifiers() != Qt::NoModifier) { - return false; - } - Qt::MouseButton button = mouseEvent->button(); - - bool consumed = false; - - if (type == QEvent::MouseButtonPress && button == Qt::LeftButton) { - startDrag = mouseEvent->globalPos(); - //qDebug() << "MplayerWindow::eventFilter: startDrag:" << startDrag << "obj:" << object->objectName(); - isMoving = true; - event->accept(); - consumed = true; - } - - if (type == QEvent::MouseButtonRelease) { - startDrag = QPoint(0, 0); - isMoving = false; - } - - if (type == QEvent::MouseMove && isMoving) { - QPoint pos = mouseEvent->globalPos(); - QPoint diff = pos - startDrag; - //qDebug() << "MplayerWindow:eventFilter: diff" << diff << "obj:" << object->objectName(); - emit mouseMovedDiff(diff); - startDrag = pos; - consumed = true; - } - return consumed; + if (!mouse_drag_tracking) + return false; + + QEvent::Type type = event->type(); + if (type != QEvent::MouseButtonPress + && type != QEvent::MouseButtonRelease + && type != QEvent::MouseMove) + return false; + + QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(event); + if (!mouseEvent) + return false; + + if (mouseEvent->modifiers() != Qt::NoModifier) { + drag_state = NOT_DRAGGING; + return false; + } + + if (type == QEvent::MouseButtonPress) { + if (mouseEvent->button() != Qt::LeftButton) { + drag_state = NOT_DRAGGING; + return false; + } + + drag_state = START_DRAGGING; + start_drag = mouseEvent->globalPos(); + // Don't filter, so others can have a look at it too + return false; + } + + if (type == QEvent::MouseButtonRelease) { + if (drag_state != DRAGGING || mouseEvent->button() != Qt::LeftButton) { + drag_state = NOT_DRAGGING; + return false; + } + + // Stop dragging and eat event + drag_state = NOT_DRAGGING; + event->accept(); + return true; + } + + // type == QEvent::MouseMove + if (drag_state == NOT_DRAGGING) + return false; + + // buttons() note the s + if (mouseEvent->buttons() != Qt::LeftButton) { + drag_state = NOT_DRAGGING; + return false; + } + + QPoint pos = mouseEvent->globalPos(); + QPoint diff = pos - start_drag; + if (drag_state == START_DRAGGING) { + // Don't start dragging before moving at least DRAG_THRESHOLD pixels + if (abs(diff.x()) < DRAG_THRESHOLD && abs(diff.y()) < DRAG_THRESHOLD) + return false; + + drag_state = DRAGGING; + } + + emit mouseMovedDiff(diff); + start_drag = pos; + event->accept(); + return true; } QSize MplayerWindow::sizeHint() const { |