From 62e21d64f3328ce74a5149adbd90f53e9df1a385 Mon Sep 17 00:00:00 2001 From: David Sansome Date: Mon, 27 Dec 2010 19:23:12 +0000 Subject: [PATCH] Make the track slider popup more accurate, make the text bold, make the shadow bigger but fade out towards the bottom, and make it close when the mouse leaves the area of the slider. --- src/widgets/tracksliderpopup.cpp | 22 ++++++++++++++++++---- src/widgets/tracksliderslider.cpp | 3 ++- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/widgets/tracksliderpopup.cpp b/src/widgets/tracksliderpopup.cpp index 95cf4a73d..6ae6fabdc 100644 --- a/src/widgets/tracksliderpopup.cpp +++ b/src/widgets/tracksliderpopup.cpp @@ -10,7 +10,7 @@ const int TrackSliderPopup::kTextMargin = 4; const int TrackSliderPopup::kPointLength = 16; const int TrackSliderPopup::kPointWidth = 4; const int TrackSliderPopup::kBorderRadius = 4; -const qreal TrackSliderPopup::kBlurRadius = 10.0; +const qreal TrackSliderPopup::kBlurRadius = 20.0; void qt_blurImage(QPainter *p, QImage &blurImage, qreal radius, bool quality, bool alphaOnly, int transposed = 0); @@ -39,6 +39,7 @@ TrackSliderPopup::TrackSliderPopup(QWidget* parent) connect(visibility_timer_, SIGNAL(timeout()), SLOT(UpdateVisibility())); font_.setPointSizeF(7.5); + font_.setBold(true); font_metrics_ = QFontMetrics(font_); UpdatePixmap(); @@ -97,9 +98,16 @@ void TrackSliderPopup::UpdatePixmap() { blur_painter.setRenderHint(QPainter::Antialiasing); blur_painter.setRenderHint(QPainter::HighQualityAntialiasing); blur_painter.setBrush(bg_color_2); - blur_painter.setOpacity(0.5); - blur_painter.drawRoundedRect(bubble_rect.adjusted(1, 1, -1, -1), kBorderRadius, kBorderRadius); - blur_painter.drawPolygon(inner_pointy); + blur_painter.drawRoundedRect(bubble_rect, kBorderRadius, kBorderRadius); + blur_painter.drawPolygon(pointy); + + // Fade the shadow out towards the bottom + QLinearGradient fade_gradient(QPoint(0, bubble_bottom), + QPoint(0, bubble_bottom + kPointLength)); + fade_gradient.setColorAt(0.0, QColor(255, 0, 0, 0)); + fade_gradient.setColorAt(1.0, QColor(255, 0, 0, 255)); + blur_painter.setCompositionMode(QPainter::CompositionMode_DestinationOut); + blur_painter.fillRect(total_rect, fade_gradient); blur_painter.end(); p.save(); @@ -173,5 +181,11 @@ void TrackSliderPopup::mouseReleaseEvent(QMouseEvent* e) { } void TrackSliderPopup::mouseMoveEvent(QMouseEvent* e) { + if (!parentWidget()->rect().contains( + parentWidget()->mapFromGlobal(e->globalPos()))) { + // The mouse left the parent widget - close this popup + mouse_over_popup_ = false; + visibility_timer_->start(); + } SendMouseEventToParent(e); } diff --git a/src/widgets/tracksliderslider.cpp b/src/widgets/tracksliderslider.cpp index 887c423a7..62fdb07d1 100644 --- a/src/widgets/tracksliderslider.cpp +++ b/src/widgets/tracksliderslider.cpp @@ -72,7 +72,8 @@ void TrackSliderSlider::mouseMoveEvent(QMouseEvent* e) { int slider_max = gr.right() - slider_length + 1; int seconds = QStyle::sliderValueFromPosition( - minimum(), maximum(), e->x() - slider_length/2, slider_max - slider_min); + minimum(), maximum(), e->x() - slider_length/2 - slider_min + 1, + slider_max - slider_min); popup_->SetText(Utilities::PrettyTime(seconds)); popup_->SetPopupPosition(mapToGlobal(QPoint(