diff options
Diffstat (limited to 'src/channelwidget.cc')
-rw-r--r-- | src/channelwidget.cc | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/src/channelwidget.cc b/src/channelwidget.cc index 21f3afa..2fb06a4 100644 --- a/src/channelwidget.cc +++ b/src/channelwidget.cc @@ -27,20 +27,22 @@ #include "i18n.h" -static bool show_decibel = true; - /*** ChannelWidget ***/ ChannelWidget::ChannelWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& x) : Gtk::EventBox(cobject), - volumeScaleEnabled(true) { + can_decibel(false), + volumeScaleEnabled(true), + last(false) { x->get_widget("channelLabel", channelLabel); x->get_widget("volumeLabel", volumeLabel); x->get_widget("volumeScale", volumeScale); - volumeScale->set_value(100.0); - volumeScale->set_increments(1.0, 5.0); + volumeScale->set_range((double)PA_VOLUME_MUTED, (double)PA_VOLUME_UI_MAX); + volumeScale->set_value((double)PA_VOLUME_NORM); + volumeScale->set_increments(((double)PA_VOLUME_NORM)/100.0, ((double)PA_VOLUME_NORM)/20.0); + setBaseVolume(PA_VOLUME_NORM); volumeScale->signal_value_changed().connect(sigc::mem_fun(*this, &ChannelWidget::onVolumeScaleValueChanged)); } @@ -59,24 +61,19 @@ void ChannelWidget::setVolume(pa_volume_t volume) { char txt[64]; v = ((gdouble) volume * 100) / PA_VOLUME_NORM; - - if (can_decibel && show_decibel) { + if (can_decibel) { double dB = pa_sw_volume_to_dB(volume); - - if (dB > PA_DECIBEL_MININFTY) { - snprintf(txt, sizeof(txt), "%0.2f dB", dB); - volumeLabel->set_tooltip_text(txt); - } else - volumeLabel->set_tooltip_markup("-∞dB"); - volumeLabel->set_has_tooltip(TRUE); - } else - volumeLabel->set_has_tooltip(FALSE); - - snprintf(txt, sizeof(txt), "%0.0f%%", v); - volumeLabel->set_text(txt); + if (dB > PA_DECIBEL_MININFTY) + snprintf(txt, sizeof(txt), "<small>%0.0f%% (%0.2fdB)</small>", v, dB); + else + snprintf(txt, sizeof(txt), "<small>%0.0f%% (-∞dB)</small>", v); + } + else + snprintf(txt, sizeof(txt), "%0.0f%%", v); + volumeLabel->set_markup(txt); volumeScaleEnabled = false; - volumeScale->set_value(v > 100 ? 100 : v); + volumeScale->set_value(volume > PA_VOLUME_UI_MAX ? PA_VOLUME_UI_MAX : volume); volumeScaleEnabled = true; } @@ -88,7 +85,7 @@ void ChannelWidget::onVolumeScaleValueChanged() { if (minimalStreamWidget->updating) return; - pa_volume_t volume = (pa_volume_t) ((volumeScale->get_value() * PA_VOLUME_NORM) / 100); + pa_volume_t volume = (pa_volume_t) volumeScale->get_value(); minimalStreamWidget->updateChannelVolume(channel, volume); } @@ -102,17 +99,20 @@ void ChannelWidget::set_sensitive(bool enabled) { void ChannelWidget::setBaseVolume(pa_volume_t v) { - gtk_scale_add_mark(GTK_SCALE(volumeScale->gobj()), 0.0, (GtkPositionType) GTK_POS_BOTTOM, - can_decibel ? _("<small>Silence</small>") : _("<small>Min</small>")); - gtk_scale_add_mark(GTK_SCALE(volumeScale->gobj()), 100.0, (GtkPositionType) GTK_POS_BOTTOM, _("<small>Max</small>")); + gtk_scale_clear_marks(GTK_SCALE(volumeScale->gobj())); + + gtk_scale_add_mark(GTK_SCALE(volumeScale->gobj()), (double)PA_VOLUME_MUTED, (GtkPositionType) GTK_POS_BOTTOM, + last ? (can_decibel ? _("<small>Silence</small>") : _("<small>Min</small>")) : NULL); + gtk_scale_add_mark(GTK_SCALE(volumeScale->gobj()), (double)PA_VOLUME_NORM, (GtkPositionType) GTK_POS_BOTTOM, + last ? _("<small>100% (0dB)</small>") : NULL); 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, _("<small><i>Base</i></small>")); + gtk_scale_add_mark(GTK_SCALE(volumeScale->gobj()), (double)v, (GtkPositionType) GTK_POS_BOTTOM, + last ? _("<small><i>Base</i></small>") : NULL); } } void ChannelWidget::setSteps(unsigned n) { - volumeScale->set_increments(100.0/(n-1), 100.0/(n-1)); + /*volumeScale->set_increments(100.0/(n-1), 100.0/(n-1));*/ } |