diff --git a/videoview.cpp b/videoview.cpp index 5f19069e25caf22d2038b38ceadf8e797200d624..b88f82e2386941baedea4e04ce765299831e8dc9 100644 --- a/videoview.cpp +++ b/videoview.cpp @@ -46,7 +46,7 @@ VideoView::VideoView(QWidget* parent) : connect(&CallModel::instance(), SIGNAL(callStateChanged(Call*, Call::State)), this, SLOT(callStateChanged(Call*, Call::State))); - + overlay_ = new VideoOverlay(this); auto effect = new QGraphicsOpacityEffect(overlay_); effect->setOpacity(maxOverlayOpacity_); @@ -58,6 +58,12 @@ VideoView::VideoView(QWidget* parent) : fadeAnim_->setStartValue(effect->opacity()); fadeAnim_->setEndValue(0); fadeAnim_->setEasingCurve(QEasingCurve::OutQuad); + + // Setup the timer to start the fade when the mouse stops moving + this->setMouseTracking(true); + overlay_->setMouseTracking(true); + fadeTimer_.setSingleShot(true); + connect(&fadeTimer_, SIGNAL(timeout()), this, SLOT(fadeOverlayOut())); this->setContextMenuPolicy(Qt::CustomContextMenu); connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), @@ -119,15 +125,27 @@ void VideoView::enterEvent(QEvent* event) { Q_UNUSED(event) - fadeAnim_->stop(); - fadeAnim_->targetObject()->setProperty(fadeAnim_->propertyName(), fadeAnim_->startValue()); + showOverlay(); } void VideoView::leaveEvent(QEvent* event) { Q_UNUSED(event) - if(not overlay_->isDialogVisible()) + fadeOverlayOut(); +} + +void +VideoView::showOverlay() +{ + fadeAnim_->stop(); + fadeAnim_->targetObject()->setProperty(fadeAnim_->propertyName(), fadeAnim_->startValue()); +} + +void +VideoView::fadeOverlayOut() +{ + if (not overlay_->isDialogVisible()) fadeAnim_->start(QAbstractAnimation::KeepWhenStopped); } @@ -333,6 +351,13 @@ VideoView::mouseReleaseEvent(QMouseEvent* event) void VideoView::mouseMoveEvent(QMouseEvent* event) { + // start/restart the timer after which the overlay will fade + if (fadeTimer_.isActive()) { + showOverlay(); + } else { + fadeTimer_.start(startfadeOverlayTime_); + } + QRect& previewRect = ui->videoWidget->getPreviewRect(); if (draggingPreview_) { if (previewRect.left() > 0 diff --git a/videoview.h b/videoview.h index 3b96076b8f8fc56901b604e75a9fd98d4fcdfc35..159c373eff171f998593631517aa1c3335110f2c 100644 --- a/videoview.h +++ b/videoview.h @@ -54,11 +54,14 @@ private slots: void updateCall(); void showContextMenu(const QPoint& pos); void slotVideoStarted(Video::Renderer* renderer); + void fadeOverlayOut(); + void showOverlay(); private: Ui::VideoView* ui; VideoOverlay* overlay_; QPropertyAnimation* fadeAnim_; + QTimer fadeTimer_; QWidget* oldParent_; QSize oldSize_; QMetaObject::Connection timerConnection_; @@ -72,6 +75,10 @@ private: constexpr static int resizeGrip_ = 40; constexpr static int minimalSize_ = 100; + // Time before the overlay starts fading out after the mouse stops + // moving within the videoview. + constexpr static int startfadeOverlayTime_ = 2000; //msec + // TODO: fix when changing Qt version // Full(1.0) opacity bug affecting many Qt version (macOS + win10) // causing the render to take a buggy code path which can be avoided