[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdemultimedia/kmix
From: Christian Esken <esken () kde ! org>
Date: 2011-09-01 22:58:22
Message-ID: 20110901225822.76106AC87C () svn ! kde ! org
[Download RAW message or body]
SVN commit 1250844 by esken:
CCBUGS: 249508
Implement proper minimum volume level (and the volumeSpan() helper)
M +1 -5 apps/kmix.cpp
M +4 -2 core/mixer.cpp
M +9 -4 core/mixer.h
M +18 -1 core/volume.cpp
M +9 -2 core/volume.h
M +3 -6 dbus/dbuscontrolwrapper.cpp
M +2 -2 gui/kmixdockwidget.cpp
M +4 -4 gui/mdwslider.cpp
M +3 -0 gui/osdwidget.cpp
--- trunk/KDE/kdemultimedia/kmix/apps/kmix.cpp #1250843:1250844
@@ -1062,12 +1062,8 @@
if ( md == 0 ) return; // shouldn't happen, but lets play safe
// Current volume
Volume& vol = md->playbackVolume();
- int currentVolume = 0;
- if ( vol.hasVolume() && vol.maxVolume() != 0 ) {
- currentVolume = (vol.getAvgVolume(Volume::MMAIN)*100 )/( vol.maxVolume() );
- }
- osdWidget->setCurrentVolume(currentVolume, md->isMuted());
+ osdWidget->setCurrentVolume(vol.getAvgVolumePercent(Volume::MALL), \
md->isMuted()); osdWidget->show();
osdWidget->activateOSD(); //Enable the hide timer
--- trunk/KDE/kdemultimedia/kmix/core/mixer.cpp #1250843:1250844
@@ -537,7 +537,8 @@
if (md != 0) {
Volume& volP=md->playbackVolume();
if ( volP.hasVolume() ) {
- double step = (volP.maxVolume()-volP.minVolume()+1) / \
Mixer::VOLUME_STEP_DIVISOR; + long volSpan = volP.volumeSpan();
+ double step = volSpan / Mixer::VOLUME_STEP_DIVISOR;
if ( step < 1 ) step = 1;
if ( decrease ) step = -step;
volP.changeAllVolumes(step);
@@ -545,7 +546,8 @@
Volume& volC=md->captureVolume();
if ( volC.hasVolume() ) {
- double step = (volC.maxVolume()-volC.minVolume()+1) / \
Mixer::VOLUME_STEP_DIVISOR; + long volSpan = volC.volumeSpan();
+ double step = volSpan / Mixer::VOLUME_STEP_DIVISOR;
if ( step < 1 ) step = 1;
if ( decrease ) step = -step;
volC.changeAllVolumes(step);
--- trunk/KDE/kdemultimedia/kmix/core/mixer.h #1250843:1250844
@@ -97,10 +97,12 @@
/// Returns a detailed state message after errors. Only for diagnostic purposes, \
no i18n. QString& stateMessage() const;
- /// Returns the name of the card/chip/hardware, as given by the driver. The name \
is NOT instance specific,
- /// so if you install two identical soundcards, two of them will deliver the \
same mixerName().
- /// Use this method if you need an instance-UNspecific name, e.g. for finding an \
appropriate
- /// mixer layout for this card, or as a prefix for constructing instance \
specific ID's like in id(). + /**
+ * Returns the name of the card/chip/hardware, as given by the driver. The name \
is NOT instance specific, + * so if you install two identical soundcards, two of \
them will deliver the same mixerName(). + * Use this method if you need an \
instance-UNspecific name, e.g. for finding an appropriate + * mixer layout for \
this card, or as a prefix for constructing instance specific ID's like in id(). + \
*/ virtual QString getBaseName();
/// Wrapper to Mixer_Backend
@@ -114,6 +116,9 @@
/// Returns an unique ID of the Mixer. It currently looks like \
"<soundcard_descr>::<hw_number>:<driver>" QString& id();
+
+ // TODO nontranslated mixer names
+
/// The owner/creator of the Mixer can set an unique name here. This key should \
never displayed to
/// the user, but can be used for referencing configuration items and such.
--- trunk/KDE/kdemultimedia/kmix/core/volume.cpp #1250843:1250844
@@ -176,6 +176,11 @@
return _minVolume;
}
+long Volume::volumeSpan() {
+ return _maxVolume - _minVolume + 1;
+}
+
+
int Volume::percentage(long absoluteVolume)
{
int relativeVolume = 0;
@@ -218,6 +223,18 @@
}
+int Volume::getAvgVolumePercent(ChannelMask chmask)
+{
+ long volume = getAvgVolume(chmask);
+ // min=-100, max=200 => volSpane = 300
+ // volume = -50 => volumePoistive = -50+min = 50
+ long volSpan = volumeSpan();
+ long volShiftedToPositive = volume + _minVolume;
+ int percent = ( volSpan == 0 ) ? 0 : ( 100 * volShiftedToPositive ) / volSpan;
+
+ return percent;
+}
+
int Volume::count() {
return getVolumes().count();
}
@@ -226,7 +243,7 @@
* returns a "sane" volume level. This means, it is a volume level inside the
* valid bounds
*/
-long Volume::volrange( int vol )
+long Volume::volrange( long vol )
{
if ( vol < _minVolume ) {
return _minVolume;
--- trunk/KDE/kdemultimedia/kmix/core/volume.h #1250843:1250844
@@ -110,13 +110,20 @@
long getVolume(ChannelID chid);
long getAvgVolume(ChannelMask chmask);
+ int getAvgVolumePercent(ChannelMask chmask);
+
//long operator[](int);
long maxVolume();
long minVolume();
+ /**
+ * The number of valid volume levels, mathematically: maxVolume - minVolume + 1
+ */
+ long volumeSpan();
+
int percentage(long );
int count();
- bool hasSwitch() { return _hasSwitch; }
+ bool hasSwitch() { return _hasSwitch; } // TODO { return _hasSwitch || \
hasVolume() ; } // "|| hasVolume()", because we simulate a switch, if it is not \
available as hardware. bool hasVolume() { return (_maxVolume != \
_minVolume); }
bool isCapture() { return _isCapture; } // -<- Query thsi, to find out \
whether this is a capture or a playback volume
@@ -151,7 +158,7 @@
private:
void init( ChannelMask chmask, long maxVolume, long minVolume, bool hasSwitch, \
bool isCapture);
- long volrange( int vol );
+ long volrange( long vol );
bool _hasSwitch;
bool _switchActivated;
--- trunk/KDE/kdemultimedia/kmix/dbus/dbuscontrolwrapper.cpp #1250843:1250844
@@ -69,17 +69,14 @@
// - esken
Volume& volP = m_md->playbackVolume();
Volume& volC = m_md->captureVolume();
- volP.setAllVolumes( (percentage * volP.maxVolume()) / 100 );
- volC.setAllVolumes( (percentage * volP.maxVolume()) / 100 );
+ volP.setAllVolumes( volP.minVolume() + ((percentage * volP.volumeSpan()) / 100) );
+ volC.setAllVolumes( volC.minVolume() + ((percentage * volC.volumeSpan()) / 100) );
m_md->mixer()->commitVolumeChange( m_md );
}
int DBusControlWrapper::volume()
{
- Volume& vol = m_md->playbackVolume();
- return vol.maxVolume()
- ? vol.getAvgVolume( Volume::MMAIN ) * 100 / vol.maxVolume()
- : 0;
+ return m_md->playbackVolume().getAvgVolumePercent(Volume::MALL);
}
void DBusControlWrapper::increaseVolume()
--- trunk/KDE/kdemultimedia/kmix/gui/kmixdockwidget.cpp #1250843:1250844
@@ -229,7 +229,7 @@
vol = md->captureVolume();
}
if ( vol.hasVolume() ) {
- val = (vol.getAvgVolume(Volume::MMAIN)*100 )/( vol.maxVolume() );
+ val = vol.getAvgVolumePercent(Volume::MALL);
}
// create a new "virtual" value. With that we see "volume changes" as well \
as "muted changes" @@ -389,7 +389,7 @@
if ( md != 0 )
{
Volume &vol = ( md->playbackVolume().hasVolume() ) ? md->playbackVolume() : \
md->captureVolume();
- int inc = vol.maxVolume() / Mixer::VOLUME_STEP_DIVISOR;
+ int inc = vol.volumeSpan() / Mixer::VOLUME_STEP_DIVISOR;
if ( inc < 1 ) inc = 1;
--- trunk/KDE/kdemultimedia/kmix/gui/mdwslider.cpp #1250843:1250844
@@ -542,12 +542,12 @@
QAbstractSlider* slider;
if ( m_small )
{
- slider = new KSmallSlider( minvol, maxvol, (maxvol-minvol) / \
Mixer::VOLUME_PAGESTEP_DIVISOR, + slider = new KSmallSlider( minvol, maxvol, \
(maxvol-minvol+1) / Mixer::VOLUME_PAGESTEP_DIVISOR,
vol.getVolume( vc.chid ), _orientation, this );
} // small
else {
slider = new VolumeSlider( _orientation, this );
- slider->setMinimum(0);
+ slider->setMinimum(minvol);
slider->setMaximum(maxvol);
slider->setPageStep(maxvol / Mixer::VOLUME_PAGESTEP_DIVISOR);
slider->setValue( maxvol - vol.getVolume( vc.chid ) );
@@ -935,7 +935,7 @@
void MDWSlider::increaseOrDecreaseVolume(bool decrease)
{
Volume& volP = m_mixdevice->playbackVolume();
- long inc = volP.maxVolume() / Mixer::VOLUME_STEP_DIVISOR;
+ long inc = volP.volumeSpan() / Mixer::VOLUME_STEP_DIVISOR;
if ( inc == 0 ) inc = 1;
if ( decrease ) inc *= -1;
if ( mixDevice()->id() == "Headphone:0" )
@@ -951,7 +951,7 @@
volP.changeAllVolumes(inc);
Volume& volC = m_mixdevice->captureVolume();
- inc = volC.maxVolume() / Mixer::VOLUME_STEP_DIVISOR;
+ inc = volC.volumeSpan() / Mixer::VOLUME_STEP_DIVISOR;
if ( inc == 0 ) inc = 1;
if ( decrease ) inc *= -1;
volC.changeAllVolumes(inc);
--- trunk/KDE/kdemultimedia/kmix/gui/osdwidget.cpp #1250843:1250844
@@ -110,6 +110,9 @@
m_hideTimer->start();
}
+/**
+ * Set volume level in percent
+ */
void OSDWidget::setCurrentVolume(int volumeLevel, bool muted)
{
m_meter->setValue(volumeLevel);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic