mirror of
https://github.com/alsa-project/alsa-utils
synced 2024-12-22 18:26:31 +01:00
alsamixer: increase step size for big control value ranges
For controls with a big range, stepping through all values can become tedious and make it impossible to adjust the volume easily. Therefore, ensure that all steps are big enough so that the full range has at most one hundred steps. Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
This commit is contained in:
parent
e57f619c82
commit
70a01748d5
1 changed files with 3 additions and 1 deletions
|
@ -318,7 +318,7 @@ static void change_volume_to_percent(struct control *control, int value, unsigne
|
||||||
set_func(control->elem, control->volume_channels[1], min + (max - min) * value / 100);
|
set_func(control->elem, control->volume_channels[1], min + (max - min) * value / 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void change_volume_relative(struct control *control, int delta, unsigned int channels)
|
static void change_volume_relative(struct control *control, long delta, unsigned int channels)
|
||||||
{
|
{
|
||||||
int (*get_range_func)(snd_mixer_elem_t *, long *, long *);
|
int (*get_range_func)(snd_mixer_elem_t *, long *, long *);
|
||||||
int (*get_func)(snd_mixer_elem_t *, snd_mixer_selem_channel_id_t, long *);
|
int (*get_func)(snd_mixer_elem_t *, snd_mixer_selem_channel_id_t, long *);
|
||||||
|
@ -352,6 +352,8 @@ static void change_volume_relative(struct control *control, int delta, unsigned
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (max - min > 100)
|
||||||
|
delta = (delta * (max - min) + (delta > 0 ? 99 : -99)) / 100;
|
||||||
if (channels & LEFT) {
|
if (channels & LEFT) {
|
||||||
value = left + delta;
|
value = left + delta;
|
||||||
if (value < min)
|
if (value < min)
|
||||||
|
|
Loading…
Reference in a new issue