Consolidate Varispeed dialog
* localize speed changes into varispeed dialog * make speed-changes idempotent * remember window position (do not overlap with button) ideally the window would show up below the "Vari" button
This commit is contained in:
parent
0ca77db96d
commit
9a66bd6163
|
@ -199,12 +199,9 @@ ShuttleControl::~ShuttleControl ()
|
||||||
void
|
void
|
||||||
ShuttleControl::varispeed_button_clicked ()
|
ShuttleControl::varispeed_button_clicked ()
|
||||||
{
|
{
|
||||||
_vari_dialog.set_session(_session);
|
if (_session->default_play_speed() == 1.0) {
|
||||||
if (_session->default_play_speed()==1.0) {
|
_vari_dialog.show ();
|
||||||
_vari_dialog.show_all ();
|
|
||||||
_vari_dialog.apply_speed ();
|
|
||||||
} else {
|
} else {
|
||||||
_session->set_default_play_speed(1.0);
|
|
||||||
_vari_dialog.hide ();
|
_vari_dialog.hide ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -226,12 +223,14 @@ void
|
||||||
ShuttleControl::set_session (Session *s)
|
ShuttleControl::set_session (Session *s)
|
||||||
{
|
{
|
||||||
SessionHandlePtr::set_session (s);
|
SessionHandlePtr::set_session (s);
|
||||||
|
_vari_dialog.set_session (_session);
|
||||||
|
|
||||||
if (_session) {
|
if (_session) {
|
||||||
set_sensitive (true);
|
set_sensitive (true);
|
||||||
_session->add_controllable (_controllable);
|
_session->add_controllable (_controllable);
|
||||||
_info_button.set_session (s);
|
_info_button.set_session (s);
|
||||||
} else {
|
} else {
|
||||||
|
_vari_dialog.hide ();
|
||||||
set_sensitive (false);
|
set_sensitive (false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,14 +28,12 @@
|
||||||
using namespace Gtk;
|
using namespace Gtk;
|
||||||
|
|
||||||
VarispeedDialog::VarispeedDialog ()
|
VarispeedDialog::VarispeedDialog ()
|
||||||
: ArdourDialog (_("Varispeed"))
|
: ArdourDialog (_("Varispeed"), false)
|
||||||
, _semitones_adjustment (0.0, -12.0, 12.0, 1.0, 4.0)
|
, _semitones_adjustment (0.0, -12.0, 12.0, 1.0, 4.0)
|
||||||
, _cents_adjustment (0.0, -100.0, 100.0, 1.0, 10.0)
|
, _cents_adjustment (0.0, -100.0, 100.0, 1.0, 10.0)
|
||||||
, _semitones_spinner (_semitones_adjustment)
|
, _semitones_spinner (_semitones_adjustment)
|
||||||
, _cents_spinner (_cents_adjustment)
|
, _cents_spinner (_cents_adjustment)
|
||||||
{
|
{
|
||||||
set_modal (false);
|
|
||||||
|
|
||||||
Table* t = manage (new Table (3, 2));
|
Table* t = manage (new Table (3, 2));
|
||||||
t->set_row_spacings (6);
|
t->set_row_spacings (6);
|
||||||
t->set_col_spacings (6);
|
t->set_col_spacings (6);
|
||||||
|
@ -82,16 +80,26 @@ VarispeedDialog::apply_speed ()
|
||||||
{
|
{
|
||||||
int cents = _semitones_spinner.get_value () * 100 + _cents_spinner.get_value ();
|
int cents = _semitones_spinner.get_value () * 100 + _cents_spinner.get_value ();
|
||||||
|
|
||||||
double speed = pow (2.0, ((double)cents / (double)1200.0));
|
double speed = pow (2.0, ((double)cents / 1200.0));
|
||||||
|
|
||||||
if (_session) {
|
if (_session && _session->default_play_speed () != speed) {
|
||||||
_session->set_default_play_speed (speed);
|
_session->set_default_play_speed (speed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
VarispeedDialog::on_show ()
|
||||||
|
{
|
||||||
|
apply_speed ();
|
||||||
|
ArdourDialog::on_show ();
|
||||||
|
set_position (Gtk::WIN_POS_NONE); // remember position from now on
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
VarispeedDialog::on_hide ()
|
VarispeedDialog::on_hide ()
|
||||||
{
|
{
|
||||||
_session->set_default_play_speed (1.0);
|
if (_session && _session->default_play_speed () != 1.0) {
|
||||||
|
_session->set_default_play_speed (1.0);
|
||||||
|
}
|
||||||
ArdourDialog::on_hide ();
|
ArdourDialog::on_hide ();
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,13 +32,14 @@ class VarispeedDialog : public ArdourDialog
|
||||||
public:
|
public:
|
||||||
VarispeedDialog ();
|
VarispeedDialog ();
|
||||||
|
|
||||||
void reset ();
|
private:
|
||||||
void apply_speed ();
|
void apply_speed ();
|
||||||
void on_hide ();
|
void reset ();
|
||||||
|
|
||||||
|
void on_show ();
|
||||||
|
void on_hide ();
|
||||||
bool on_key_press_event (GdkEventKey*);
|
bool on_key_press_event (GdkEventKey*);
|
||||||
|
|
||||||
private:
|
|
||||||
Gtk::Adjustment _semitones_adjustment;
|
Gtk::Adjustment _semitones_adjustment;
|
||||||
Gtk::Adjustment _cents_adjustment;
|
Gtk::Adjustment _cents_adjustment;
|
||||||
Gtk::SpinButton _semitones_spinner;
|
Gtk::SpinButton _semitones_spinner;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user