diff --git a/src/equalizer/equalizerwidget.cpp b/src/equalizer/equalizerwidget.cpp index 6744a29..cd87a5e 100644 --- a/src/equalizer/equalizerwidget.cpp +++ b/src/equalizer/equalizerwidget.cpp @@ -33,19 +33,20 @@ EqualizerSlider::EqualizerSlider (QWidget *parent, int id) : PixmapSlider (parent) { m_id = id; - connect ( this, SIGNAL (sliderMoved (int)), - this, SLOT (on_self_slider_moved (int)) ); + connect ( this, SIGNAL (valueChanged (int)), + this, SLOT (on_self_value_changed (int)) ); setMinimum (-20); setMaximum (20); + setPageStep (2); setSliderOffset (QPoint (1, 0)); setInvertedAppearance (true); setOrientation (Qt::Vertical); } void -EqualizerSlider::on_self_slider_moved (int value) +EqualizerSlider::on_self_value_changed (int value) { - emit numberedSliderMoved (value, m_id); + emit numberedValueChanged (value, m_id); } @@ -101,14 +102,14 @@ EqualizerWidget::EqualizerWidget (QWidget *parent) : QWidget (parent) m_preamp = new EqualizerSlider(this, -1); m_preamp->resize (skin->getSize (Skin::SLIDER_EQUALIZER_BGS)); m_preamp->move(21, 38); - connect (m_preamp, SIGNAL (sliderMoved (int)), + connect (m_preamp, SIGNAL (valueChanged (int)), this, SLOT (updateServerPreamp (int))); for (int i=0; i < 10; i++) { m_bands[i] = new EqualizerSlider(this, i); m_bands[i]->resize (skin->getSize (Skin::SLIDER_EQUALIZER_BGS)); m_bands[i]->move(78+i*18, 38); - connect (m_bands[i], SIGNAL (numberedSliderMoved (int, int)), + connect (m_bands[i], SIGNAL (numberedValueChanged (int, int)), this, SLOT (updateServerBands (int, int))); } diff --git a/src/equalizer/equalizerwidget.h b/src/equalizer/equalizerwidget.h index 8aad964..6e54f7e 100644 --- a/src/equalizer/equalizerwidget.h +++ b/src/equalizer/equalizerwidget.h @@ -1,7 +1,7 @@ /** * This file is a part of Promoe, an XMMS2 Client. * - * Copyright (C) 2005-2008 XMMS2 Team + * Copyright (C) 2005-2010 XMMS2 Team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -37,10 +37,10 @@ class EqualizerSlider : public PixmapSlider EqualizerSlider (QWidget*, int); signals: - void numberedSliderMoved (int value, int id); + void numberedValueChanged (int value, int id); protected slots: - void on_self_slider_moved (int value); + void on_self_value_changed (int value); private: int m_id; diff --git a/src/mainwindow/maindisplay.cpp b/src/mainwindow/maindisplay.cpp index 7f0b32d..dca1bd6 100644 --- a/src/mainwindow/maindisplay.cpp +++ b/src/mainwindow/maindisplay.cpp @@ -101,23 +101,25 @@ MainDisplay::MainDisplay (MainWindow *parent) : SkinDisplay(parent) m_vslider = new PixmapSlider(this); m_vslider->setMinimum (0); m_vslider->setMaximum (100); + m_vslider->setPageStep (3); m_vslider->setSliderOffset (QPoint (0, 1)); m_vslider->resize (skin->getSize (Skin::SLIDER_VOLUMEBAR_BGS)); m_vslider->move (skin->getPos (Skin::SLIDER_VOLUMEBAR_BGS)); connect (m_volumehandler, SIGNAL (volume (int)), m_vslider, SLOT (setValue (int))); - connect (m_vslider, SIGNAL (sliderMoved (int)), + connect (m_vslider, SIGNAL (valueChanged (int)), m_volumehandler, SLOT (setVolume (int))); m_bslider = new PixmapSlider (this); m_bslider->setMinimum (-MAX_STEREO_BALANCE); m_bslider->setMaximum (MAX_STEREO_BALANCE); + m_bslider->setPageStep (3); m_bslider->setSliderOffset (QPoint (0, 1)); m_bslider->resize (skin->getSize (Skin::SLIDER_BALANCEBAR_BGS)); m_bslider->move (skin->getPos (Skin::SLIDER_BALANCEBAR_BGS)); connect (m_volumehandler, SIGNAL (balance (int)), m_bslider, SLOT (setValue (int))); - connect (m_bslider, SIGNAL (sliderMoved (int)), + connect (m_bslider, SIGNAL (valueChanged (int)), m_volumehandler, SLOT (setBalance (int))); connect (client->cache (), SIGNAL (activeEntryChanged (QVariantHash)), diff --git a/src/widgets/pixmapslider.cpp b/src/widgets/pixmapslider.cpp index 9be2363..89db48e 100644 --- a/src/widgets/pixmapslider.cpp +++ b/src/widgets/pixmapslider.cpp @@ -1,7 +1,7 @@ /** * This file is a part of Promoe, an XMMS2 Client * - * Copyright (C) 2008-2009 XMMS2 Team + * Copyright (C) 2008-2010 XMMS2 Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -59,11 +59,10 @@ PixmapSlider::mouseMoveEvent (QMouseEvent *event) } int val = sliderMovePosition (event); - - if (val == value ()) { - return; + if (val != value ()) { + QAbstractSlider::setValue (val); } - QAbstractSlider::setValue (val); + } void @@ -77,11 +76,10 @@ PixmapSlider::mousePressEvent (QMouseEvent *event) setSliderDown (true); int val = sliderMovePosition (event); - - if (val == value ()) { - return; + if (val != value ()) { + QAbstractSlider::setValue (val); } - QAbstractSlider::setValue (val); + update (); } @@ -95,8 +93,10 @@ PixmapSlider::mouseReleaseEvent (QMouseEvent *event) } int val = sliderMovePosition (event); + if (val != value ()) { + QAbstractSlider::setValue (val); + } - QAbstractSlider::setValue (val); setSliderDown (false); @@ -106,12 +106,21 @@ PixmapSlider::mouseReleaseEvent (QMouseEvent *event) int PixmapSlider::sliderMovePosition (QMouseEvent *event) { + int ret; if (orientation () == Qt::Vertical) { - return sliderValueFromPosition (event->y() - m_pressed.height () /2); + ret = sliderValueFromPosition (event->y() - m_pressed.height () /2); } else { - return sliderValueFromPosition (event->x() - m_pressed.width () /2); + ret = sliderValueFromPosition (event->x() - m_pressed.width () /2); } + // Make sliders snap to center. Usefull for equalizer sliders and balance + const int centerValue = 0; + if ((ret > centerValue - pageStep ()) && + (ret < centerValue + pageStep ())) { + ret = centerValue; + } + + return ret; } void @@ -120,6 +129,10 @@ PixmapSlider::setValue (int val) if (isSliderDown ()){ return; } + if (val == value()) { + return; + } + QAbstractSlider::setValue (val); }