volume: Increase maximum by 50% for outputs with decibel support

Volume should go up to 150% if the sound card used as output has
decibel volume support.

https://bugzilla.gnome.org/show_bug.cgi?id=641886
This commit is contained in:
Adel Gadllah 2011-02-09 21:18:20 +01:00
parent 43961aaca5
commit bdd805a3ee

View File

@ -70,13 +70,21 @@ Indicator.prototype = {
this._control.open(); this._control.open();
}, },
_getMaxVolume: function(property) {
if (this[property].get_can_decibel())
return (VOLUME_MAX * 1.5);
else
return VOLUME_MAX;
},
_onScrollEvent: function(actor, event) { _onScrollEvent: function(actor, event) {
let direction = event.get_scroll_direction(); let direction = event.get_scroll_direction();
let currentVolume = this._output.volume; let currentVolume = this._output.volume;
let maxVolume = this._getMaxVolume('_output');
if (direction == Clutter.ScrollDirection.DOWN) { if (direction == Clutter.ScrollDirection.DOWN) {
let prev_muted = this._output.is_muted; let prev_muted = this._output.is_muted;
this._output.volume = Math.max(0, currentVolume - VOLUME_MAX * VOLUME_ADJUSTMENT_STEP); this._output.volume = Math.max(0, currentVolume - maxVolume * VOLUME_ADJUSTMENT_STEP);
if (this._output.volume < 1) { if (this._output.volume < 1) {
this._output.volume = 0; this._output.volume = 0;
if (!prev_muted) if (!prev_muted)
@ -85,7 +93,7 @@ Indicator.prototype = {
this._output.push_volume(); this._output.push_volume();
} }
else if (direction == Clutter.ScrollDirection.UP) { else if (direction == Clutter.ScrollDirection.UP) {
this._output.volume = Math.min(VOLUME_MAX, currentVolume + VOLUME_MAX * VOLUME_ADJUSTMENT_STEP); this._output.volume = Math.min(maxVolume, currentVolume + maxVolume * VOLUME_ADJUSTMENT_STEP);
this._output.change_is_muted(false); this._output.change_is_muted(false);
this._output.push_volume(); this._output.push_volume();
} }
@ -165,10 +173,11 @@ Indicator.prototype = {
}, },
_volumeToIcon: function(volume) { _volumeToIcon: function(volume) {
let maxVolume = this._getMaxVolume('_output');
if (volume <= 0) { if (volume <= 0) {
return 'audio-volume-muted'; return 'audio-volume-muted';
} else { } else {
let n = Math.floor(3 * volume / VOLUME_MAX) + 1; let n = Math.floor(3 * volume / maxVolume) + 1;
if (n < 2) if (n < 2)
return 'audio-volume-low'; return 'audio-volume-low';
if (n >= 3) if (n >= 3)
@ -182,7 +191,7 @@ Indicator.prototype = {
log ('Volume slider changed for %s, but %s does not exist'.format(property, property)); log ('Volume slider changed for %s, but %s does not exist'.format(property, property));
return; return;
} }
let volume = value * VOLUME_MAX; let volume = value * this._getMaxVolume(property);
let prev_muted = this[property].is_muted; let prev_muted = this[property].is_muted;
if (volume < 1) { if (volume < 1) {
this[property].volume = 0; this[property].volume = 0;
@ -204,7 +213,8 @@ Indicator.prototype = {
_mutedChanged: function(object, param_spec, property) { _mutedChanged: function(object, param_spec, property) {
let muted = this[property].is_muted; let muted = this[property].is_muted;
let slider = this[property+'Slider']; let slider = this[property+'Slider'];
slider.setValue(muted ? 0 : (this[property].volume / VOLUME_MAX)); let maxVolume = this._getMaxVolume(property);
slider.setValue(muted ? 0 : (this[property].volume / maxVolume));
if (property == '_output') { if (property == '_output') {
if (muted) if (muted)
this.setIcon('audio-volume-muted'); this.setIcon('audio-volume-muted');
@ -214,7 +224,8 @@ Indicator.prototype = {
}, },
_volumeChanged: function(object, param_spec, property) { _volumeChanged: function(object, param_spec, property) {
this[property+'Slider'].setValue(this[property].volume / VOLUME_MAX); let maxVolume = this._getMaxVolume(property);
this[property+'Slider'].setValue(this[property].volume / maxVolume);
if (property == '_output' && !this._output.is_muted) if (property == '_output' && !this._output.is_muted)
this.setIcon(this._volumeToIcon(this._output.volume)); this.setIcon(this._volumeToIcon(this._output.volume));
} }