Merge pull request #4359 from TheUbuntuGuy/slider
Increase update rate of track slider
This commit is contained in:
commit
efcb5c4adc
|
@ -160,6 +160,11 @@ void qt_mac_set_dock_menu(QMenu*);
|
|||
const char* MainWindow::kSettingsGroup = "MainWindow";
|
||||
const char* MainWindow::kAllFilesFilterSpec = QT_TR_NOOP("All Files (*)");
|
||||
|
||||
namespace {
|
||||
const int kTrackSliderUpdateTimeMs = 40;
|
||||
const int kTrackPositionUpdateTimeMs = 1000;
|
||||
}
|
||||
|
||||
MainWindow::MainWindow(Application* app, SystemTrayIcon* tray_icon, OSD* osd,
|
||||
QWidget* parent)
|
||||
: QMainWindow(parent),
|
||||
|
@ -186,6 +191,7 @@ MainWindow::MainWindow(Application* app, SystemTrayIcon* tray_icon, OSD* osd,
|
|||
playlistitem_actions_separator_(nullptr),
|
||||
library_sort_model_(new QSortFilterProxyModel(this)),
|
||||
track_position_timer_(new QTimer(this)),
|
||||
track_slider_timer_(new QTimer(this)),
|
||||
was_maximized_(false),
|
||||
saved_playback_position_(0),
|
||||
saved_playback_state_(Engine::Empty),
|
||||
|
@ -249,9 +255,12 @@ MainWindow::MainWindow(Application* app, SystemTrayIcon* tray_icon, OSD* osd,
|
|||
|
||||
ui_->tabs->SetBackgroundPixmap(QPixmap(":/sidebar_background.png"));
|
||||
|
||||
track_position_timer_->setInterval(1000);
|
||||
track_position_timer_->setInterval(kTrackPositionUpdateTimeMs);
|
||||
connect(track_position_timer_, SIGNAL(timeout()),
|
||||
SLOT(UpdateTrackPosition()));
|
||||
track_slider_timer_->setInterval(kTrackSliderUpdateTimeMs);
|
||||
connect(track_slider_timer_, SIGNAL(timeout()),
|
||||
SLOT(UpdateTrackSliderPosition()));
|
||||
|
||||
// Start initialising the player
|
||||
qLog(Debug) << "Initialising player";
|
||||
|
@ -508,7 +517,7 @@ MainWindow::MainWindow(Application* app, SystemTrayIcon* tray_icon, OSD* osd,
|
|||
connect(ui_->playlist->view(), SIGNAL(BackgroundPropertyChanged()),
|
||||
SLOT(RefreshStyleSheet()));
|
||||
|
||||
connect(ui_->track_slider, SIGNAL(ValueChanged(int)), app_->player(),
|
||||
connect(ui_->track_slider, SIGNAL(ValueChangedSeconds(int)), app_->player(),
|
||||
SLOT(SeekTo(int)));
|
||||
|
||||
// Library connections
|
||||
|
@ -982,6 +991,7 @@ void MainWindow::MediaStopped() {
|
|||
tray_icon_->LastFMButtonLoveStateChanged(false);
|
||||
|
||||
track_position_timer_->stop();
|
||||
track_slider_timer_->stop();
|
||||
ui_->track_slider->SetStopped();
|
||||
tray_icon_->SetProgress(0);
|
||||
tray_icon_->SetStopped();
|
||||
|
@ -996,6 +1006,7 @@ void MainWindow::MediaPaused() {
|
|||
ui_->action_play_pause->setEnabled(true);
|
||||
|
||||
track_position_timer_->stop();
|
||||
track_slider_timer_->stop();
|
||||
|
||||
tray_icon_->SetPaused();
|
||||
}
|
||||
|
@ -1024,6 +1035,7 @@ void MainWindow::MediaPlaying() {
|
|||
#endif
|
||||
|
||||
track_position_timer_->start();
|
||||
track_slider_timer_->start();
|
||||
UpdateTrackPosition();
|
||||
}
|
||||
|
||||
|
@ -1297,9 +1309,6 @@ void MainWindow::UpdateTrackPosition() {
|
|||
}
|
||||
}
|
||||
|
||||
// Update the slider
|
||||
ui_->track_slider->SetValue(position, length);
|
||||
|
||||
// Update the tray icon every 10 seconds
|
||||
if (position % 10 == 0) {
|
||||
qLog(Debug) << "position" << position << "scrobble point" << scrobble_point
|
||||
|
@ -1318,6 +1327,17 @@ void MainWindow::UpdateTrackPosition() {
|
|||
}
|
||||
}
|
||||
|
||||
void MainWindow::UpdateTrackSliderPosition() {
|
||||
PlaylistItemPtr item(app_->player()->GetCurrentItem());
|
||||
|
||||
const int slider_position = std::floor(
|
||||
float(app_->player()->engine()->position_nanosec()) / kNsecPerMsec);
|
||||
const int slider_length = item->Metadata().length_nanosec() / kNsecPerMsec;
|
||||
|
||||
// Update the slider
|
||||
ui_->track_slider->SetValue(slider_position, slider_length);
|
||||
}
|
||||
|
||||
#ifdef HAVE_LIBLASTFM
|
||||
void MainWindow::ScrobbledRadioStream() {
|
||||
ui_->action_love->setEnabled(true);
|
||||
|
@ -1830,7 +1850,7 @@ void MainWindow::AddFolder() {
|
|||
// Add media
|
||||
MimeData* data = new MimeData;
|
||||
data->setUrls(QList<QUrl>() << QUrl::fromLocalFile(
|
||||
QFileInfo(directory).canonicalFilePath()));
|
||||
QFileInfo(directory).canonicalFilePath()));
|
||||
AddToPlaylist(data);
|
||||
}
|
||||
|
||||
|
@ -2216,7 +2236,7 @@ void MainWindow::PlaylistQueue() {
|
|||
for (const QModelIndex& proxy_index :
|
||||
ui_->playlist->view()->selectionModel()->selectedRows()) {
|
||||
indexes << app_->playlist_manager()->current()->proxy()->mapToSource(
|
||||
proxy_index);
|
||||
proxy_index);
|
||||
}
|
||||
|
||||
app_->playlist_manager()->current()->queue()->ToggleTracks(indexes);
|
||||
|
@ -2227,7 +2247,7 @@ void MainWindow::PlaylistSkip() {
|
|||
for (const QModelIndex& proxy_index :
|
||||
ui_->playlist->view()->selectionModel()->selectedRows()) {
|
||||
indexes << app_->playlist_manager()->current()->proxy()->mapToSource(
|
||||
proxy_index);
|
||||
proxy_index);
|
||||
}
|
||||
|
||||
app_->playlist_manager()->current()->SkipTracks(indexes);
|
||||
|
|
|
@ -194,6 +194,7 @@ signals:
|
|||
|
||||
void Seeked(qlonglong microseconds);
|
||||
void UpdateTrackPosition();
|
||||
void UpdateTrackSliderPosition();
|
||||
|
||||
// Handle visibility of LastFM icons
|
||||
void LastFMButtonVisibilityChanged(bool value);
|
||||
|
@ -351,6 +352,7 @@ signals:
|
|||
QSortFilterProxyModel* library_sort_model_;
|
||||
|
||||
QTimer* track_position_timer_;
|
||||
QTimer* track_slider_timer_;
|
||||
QSettings settings_;
|
||||
|
||||
bool was_maximized_;
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "config.h"
|
||||
#include "trackslider.h"
|
||||
#include "ui_trackslider.h"
|
||||
#include "core/timeconstants.h"
|
||||
#include "core/utilities.h"
|
||||
|
||||
#include <QSettings>
|
||||
|
@ -92,7 +93,7 @@ void TrackSlider::SetValue(int elapsed, int total) {
|
|||
ui_->slider->setValue(elapsed);
|
||||
setting_value_ = false;
|
||||
|
||||
UpdateTimes(elapsed);
|
||||
UpdateTimes(elapsed / kMsecPerSec);
|
||||
}
|
||||
|
||||
void TrackSlider::UpdateTimes(int elapsed) {
|
||||
|
@ -100,12 +101,14 @@ void TrackSlider::UpdateTimes(int elapsed) {
|
|||
// update normally if showing remaining time
|
||||
if (show_remaining_time_) {
|
||||
ui_->remaining->setText(
|
||||
"-" + Utilities::PrettyTime(ui_->slider->maximum() - elapsed));
|
||||
"-" + Utilities::PrettyTime((ui_->slider->maximum() / kMsecPerSec) -
|
||||
elapsed));
|
||||
} else {
|
||||
// check if slider maximum value is changed before updating
|
||||
if (slider_maximum_value_ != ui_->slider->maximum()) {
|
||||
slider_maximum_value_ = ui_->slider->maximum();
|
||||
ui_->remaining->setText(Utilities::PrettyTime(ui_->slider->maximum()));
|
||||
ui_->remaining->setText(
|
||||
Utilities::PrettyTime((ui_->slider->maximum() / kMsecPerSec)));
|
||||
}
|
||||
}
|
||||
setEnabled(true);
|
||||
|
@ -128,14 +131,14 @@ void TrackSlider::SetCanSeek(bool can_seek) {
|
|||
|
||||
void TrackSlider::Seek(int gap) {
|
||||
if (ui_->slider->isEnabled())
|
||||
ui_->slider->setValue(ui_->slider->value() + gap);
|
||||
ui_->slider->setValue(ui_->slider->value() + gap * kMsecPerSec);
|
||||
}
|
||||
|
||||
void TrackSlider::ValueMaybeChanged(int value) {
|
||||
if (setting_value_) return;
|
||||
|
||||
UpdateTimes(value);
|
||||
emit ValueChanged(value);
|
||||
UpdateTimes(value / kMsecPerSec);
|
||||
emit ValueChangedSeconds(value / kMsecPerSec);
|
||||
}
|
||||
|
||||
bool TrackSlider::event(QEvent* e) {
|
||||
|
@ -156,7 +159,7 @@ void TrackSlider::ToggleTimeDisplay() {
|
|||
// we set the value to -1 because the label must be updated
|
||||
slider_maximum_value_ = -1;
|
||||
}
|
||||
UpdateTimes(ui_->slider->value());
|
||||
UpdateTimes(ui_->slider->value() / kMsecPerSec);
|
||||
|
||||
// save this setting
|
||||
QSettings s;
|
||||
|
|
|
@ -53,6 +53,7 @@ class TrackSlider : public QWidget {
|
|||
|
||||
signals:
|
||||
void ValueChanged(int value);
|
||||
void ValueChangedSeconds(int value);
|
||||
|
||||
private slots:
|
||||
void ValueMaybeChanged(int value);
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
#include "tracksliderpopup.h"
|
||||
#include "tracksliderslider.h"
|
||||
#include "core/timeconstants.h"
|
||||
#include "core/utilities.h"
|
||||
|
||||
#include <QMouseEvent>
|
||||
|
@ -76,8 +77,8 @@ void TrackSliderSlider::mouseMoveEvent(QMouseEvent* e) {
|
|||
int slider_max = gr.right() - slider_length + 1;
|
||||
|
||||
mouse_hover_seconds_ = QStyle::sliderValueFromPosition(
|
||||
minimum(), maximum(), e->x() - slider_length / 2 - slider_min + 1,
|
||||
slider_max - slider_min);
|
||||
minimum() / kMsecPerSec, maximum() / kMsecPerSec,
|
||||
e->x() - slider_length / 2 - slider_min + 1, slider_max - slider_min);
|
||||
|
||||
popup_->SetText(Utilities::PrettyTime(mouse_hover_seconds_));
|
||||
UpdateDeltaTime();
|
||||
|
@ -99,7 +100,7 @@ void TrackSliderSlider::leaveEvent(QEvent* e) {
|
|||
|
||||
void TrackSliderSlider::UpdateDeltaTime() {
|
||||
if (popup_->isVisible()) {
|
||||
int delta_seconds = mouse_hover_seconds_ - value();
|
||||
int delta_seconds = mouse_hover_seconds_ - (value() / kMsecPerSec);
|
||||
popup_->SetSmallText(Utilities::PrettyTimeDelta(delta_seconds));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue