x-fade uses cairo-generated icons, remove XPM
[ardour.git] / gtk2_ardour / latency_gui.cc
index d21a055d9e88875c1d68b871ce9545238f622a55..d5ed0c2a32a56d62cb843c53d40282d0c2e4a9b6 100644 (file)
 */
 
 #include <inttypes.h>
-
 #include <iomanip>
-#include "ardour/latent.h"
+
+#include <gtkmm/stock.h>
+
 #include "pbd/convert.h"
 #include "pbd/error.h"
-#include <gtkmm2ext/utils.h>
+#include "ardour/latent.h"
+
+#include "gtkmm2ext/utils.h"
 
 #include "latency_gui.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace PBD;
 using namespace Gtk;
@@ -51,7 +54,7 @@ LatencyBarController::get_label (double&)
        std::stringstream s;
 
        if (nframes < (_latency_gui->sample_rate / 1000.0)) {
-               const framepos_t nf = (framepos_t) rint (nframes);
+               const samplepos_t nf = (samplepos_t) rint (nframes);
                s << string_compose (P_("%1 sample", "%1 samples", nf), nf);
        } else {
                s << std::fixed << std::setprecision (2) << (nframes / (_latency_gui->sample_rate / 1000.0)) << " ms";
@@ -60,13 +63,13 @@ LatencyBarController::get_label (double&)
        return s.str ();
 }
 
-LatencyGUI::LatencyGUI (Latent& l, framepos_t sr, framepos_t psz)
+LatencyGUI::LatencyGUI (Latent& l, samplepos_t sr, samplepos_t psz)
        : _latent (l),
-         initial_value (_latent.user_latency()),
+         initial_value (_latent.effective_latency ()),
          sample_rate (sr),
          period_size (psz),
          ignored (new PBD::IgnorableControllable()),
-         /* max 1 second, step by frames, page by msecs */
+         /* max 1 second, step by samples, page by msecs */
          adjustment (initial_value, 0.0, sample_rate, 1.0, sample_rate / 1000.0f),
          bc (adjustment, this),
          reset_button (_("Reset"))
@@ -113,7 +116,7 @@ LatencyGUI::LatencyGUI (Latent& l, framepos_t sr, framepos_t psz)
 void
 LatencyGUI::finish ()
 {
-       framepos_t new_value = (framepos_t) adjustment.get_value();
+       samplepos_t new_value = (samplepos_t) adjustment.get_value();
        if (new_value != initial_value) {
                _latent.set_user_latency (new_value);
        }
@@ -122,14 +125,18 @@ LatencyGUI::finish ()
 void
 LatencyGUI::reset ()
 {
-       _latent.set_user_latency (0);
+       _latent.unset_user_latency ();
+       initial_value = std::min (sample_rate, _latent.signal_latency ());
        adjustment.set_value (initial_value);
 }
 
 void
 LatencyGUI::refresh ()
 {
-       initial_value = _latent.signal_latency();
+       /* limit to adjustment range, otherwise LatencyGUI::finish() would
+        * set the adjustment's value as custom-latency
+        */
+       initial_value = std::min (sample_rate, _latent.effective_latency ());
        adjustment.set_value (initial_value);
 }
 
@@ -158,7 +165,7 @@ LatencyGUI::change_latency_from_button (int dir)
        }
 }
 
-LatencyDialog::LatencyDialog (const std::string& title, Latent& l, framepos_t sr, framepos_t psz)
+LatencyDialog::LatencyDialog (const std::string& title, Latent& l, samplepos_t sr, samplepos_t psz)
        : ArdourDialog (title, false, true),
          lwidget (l, sr, psz)
 {