From feff1f6f0592c1f085241bb9d3794b723d524f2e Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sat, 21 Mar 2009 03:49:19 +0100 Subject: [PATCH] configure steps for scales --- src/channelwidget.cc | 14 +++++++++----- src/channelwidget.h | 1 + src/mainwindow.cc | 2 ++ src/streamwidget.cc | 6 ++++++ src/streamwidget.h | 1 + 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/channelwidget.cc b/src/channelwidget.cc index 5b04012..eac41ad 100644 --- a/src/channelwidget.cc +++ b/src/channelwidget.cc @@ -39,7 +39,8 @@ ChannelWidget::ChannelWidget(BaseObjectType* cobject, const Glib::RefPtrget_widget("volumeLabel", volumeLabel); x->get_widget("volumeScale", volumeScale); - volumeScale->set_value(100); + volumeScale->set_value(100.0); + volumeScale->set_increments(100.0/PA_VOLUME_NORM, 100.0/PA_VOLUME_NORM); volumeScale->signal_value_changed().connect(sigc::mem_fun(*this, &ChannelWidget::onVolumeScaleValueChanged)); } @@ -116,13 +117,16 @@ void ChannelWidget::set_sensitive(bool enabled) { void ChannelWidget::setBaseVolume(pa_volume_t v) { - volumeScale->clear_marks(); + gtk_scale_add_mark(GTK_SCALE(volumeScale->gobj()), 0.0, (GtkPositionType) GTK_POS_BOTTOM, _("Silence")); + gtk_scale_add_mark(GTK_SCALE(volumeScale->gobj()), 100.0, (GtkPositionType) GTK_POS_BOTTOM, _("Max")); if (v > PA_VOLUME_MUTED && v < PA_VOLUME_NORM) { double p = ((double) v * 100) / PA_VOLUME_NORM; - gtk_scale_add_mark(GTK_SCALE(volumeScale->gobj()), p, (GtkPositionType) GTK_POS_BOTTOM, NULL); + gtk_scale_add_mark(GTK_SCALE(volumeScale->gobj()), p, (GtkPositionType) GTK_POS_BOTTOM, _("Base")); } - gtk_scale_add_mark(GTK_SCALE(volumeScale->gobj()), 0.0, (GtkPositionType) GTK_POS_BOTTOM, NULL); - gtk_scale_add_mark(GTK_SCALE(volumeScale->gobj()), 100.0, (GtkPositionType) GTK_POS_BOTTOM, NULL); +} + +void ChannelWidget::setSteps(unsigned n) { + volumeScale->set_increments(100.0/(n-1), 100.0/(n-1)); } diff --git a/src/channelwidget.h b/src/channelwidget.h index 0413416..1de22d0 100644 --- a/src/channelwidget.h +++ b/src/channelwidget.h @@ -50,6 +50,7 @@ public: virtual void set_sensitive(bool enabled); virtual void setBaseVolume(pa_volume_t); + virtual void setSteps(unsigned n); }; diff --git a/src/mainwindow.cc b/src/mainwindow.cc index 1365f7e..0277bb0 100644 --- a/src/mainwindow.cc +++ b/src/mainwindow.cc @@ -169,6 +169,7 @@ void MainWindow::updateSink(const pa_sink_info &info) { is_new = true; w->setBaseVolume(info.base_volume); + w->setSteps(info.n_volume_steps); } w->updating = true; @@ -315,6 +316,7 @@ void MainWindow::updateSource(const pa_source_info &info) { is_new = true; w->setBaseVolume(info.base_volume); + w->setSteps(info.n_volume_steps); if (pa_context_get_server_protocol_version(get_context()) >= 13) createMonitorStreamForSource(info.index); diff --git a/src/streamwidget.cc b/src/streamwidget.cc index ecea771..fae605f 100644 --- a/src/streamwidget.cc +++ b/src/streamwidget.cc @@ -107,3 +107,9 @@ void StreamWidget::setBaseVolume(pa_volume_t v) { if (channelMap.channels > 0) channelWidgets[channelMap.channels-1]->setBaseVolume(v); } + +void StreamWidget::setSteps(unsigned n) { + + for (int i = 0; i < channelMap.channels; i++) + channelWidgets[channelMap.channels-1]->setSteps(n); +} diff --git a/src/streamwidget.h b/src/streamwidget.h index 8000ef4..af5f0b9 100644 --- a/src/streamwidget.h +++ b/src/streamwidget.h @@ -50,6 +50,7 @@ public: virtual void executeVolumeUpdate(); virtual void setBaseVolume(pa_volume_t v); + virtual void setSteps(unsigned n); }; #endif