Shuttle wheel context-menu: max speed only applies to percentage
This commit is contained in:
parent
80405e41b0
commit
eeadf5087d
@ -26,6 +26,8 @@
|
|||||||
|
|
||||||
#include <cairo.h>
|
#include <cairo.h>
|
||||||
|
|
||||||
|
#include "pbd/unwind.h"
|
||||||
|
|
||||||
#include "ardour/ardour.h"
|
#include "ardour/ardour.h"
|
||||||
#include "ardour/audioengine.h"
|
#include "ardour/audioengine.h"
|
||||||
#include "ardour/rc_configuration.h"
|
#include "ardour/rc_configuration.h"
|
||||||
@ -80,6 +82,7 @@ ShuttleControl::ShuttleControl ()
|
|||||||
shuttle_max_speed = Config->get_max_transport_speed();
|
shuttle_max_speed = Config->get_max_transport_speed();
|
||||||
shuttle_context_menu = 0;
|
shuttle_context_menu = 0;
|
||||||
_hovering = false;
|
_hovering = false;
|
||||||
|
_ignore_change = false;
|
||||||
|
|
||||||
set_flags (CAN_FOCUS);
|
set_flags (CAN_FOCUS);
|
||||||
add_events (Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::BUTTON_PRESS_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK);
|
add_events (Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::BUTTON_PRESS_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK);
|
||||||
@ -191,14 +194,13 @@ ShuttleControl::map_transport_state ()
|
|||||||
void
|
void
|
||||||
ShuttleControl::build_shuttle_context_menu ()
|
ShuttleControl::build_shuttle_context_menu ()
|
||||||
{
|
{
|
||||||
|
PBD::Unwinder<bool> uw (_ignore_change, true);
|
||||||
|
|
||||||
using namespace Menu_Helpers;
|
using namespace Menu_Helpers;
|
||||||
|
|
||||||
shuttle_context_menu = new Menu();
|
shuttle_context_menu = new Menu();
|
||||||
MenuList& items = shuttle_context_menu->items();
|
MenuList& items = shuttle_context_menu->items();
|
||||||
|
|
||||||
Menu* speed_menu = manage (new Menu());
|
|
||||||
MenuList& speed_items = speed_menu->items();
|
|
||||||
|
|
||||||
Menu* units_menu = manage (new Menu);
|
Menu* units_menu = manage (new Menu);
|
||||||
MenuList& units_items = units_menu->items();
|
MenuList& units_items = units_menu->items();
|
||||||
RadioMenuItem::Group units_group;
|
RadioMenuItem::Group units_group;
|
||||||
@ -228,9 +230,12 @@ ShuttleControl::build_shuttle_context_menu ()
|
|||||||
|
|
||||||
items.push_back (MenuElem (_("Mode"), *style_menu));
|
items.push_back (MenuElem (_("Mode"), *style_menu));
|
||||||
|
|
||||||
|
if (Config->get_shuttle_units() == Percentage) {
|
||||||
RadioMenuItem::Group speed_group;
|
RadioMenuItem::Group speed_group;
|
||||||
|
|
||||||
/* XXX this code assumes that Config->get_max_transport_speed() returns 8 */
|
/* XXX this code assumes that Config->get_max_transport_speed() returns 8 */
|
||||||
|
Menu* speed_menu = manage (new Menu());
|
||||||
|
MenuList& speed_items = speed_menu->items();
|
||||||
|
|
||||||
speed_items.push_back (RadioMenuElem (speed_group, "8", sigc::bind (sigc::mem_fun (*this, &ShuttleControl::set_shuttle_max_speed), 8.0f)));
|
speed_items.push_back (RadioMenuElem (speed_group, "8", sigc::bind (sigc::mem_fun (*this, &ShuttleControl::set_shuttle_max_speed), 8.0f)));
|
||||||
if (shuttle_max_speed == 8.0) {
|
if (shuttle_max_speed == 8.0) {
|
||||||
@ -258,6 +263,7 @@ ShuttleControl::build_shuttle_context_menu ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
items.push_back (MenuElem (_("Maximum speed"), *speed_menu));
|
items.push_back (MenuElem (_("Maximum speed"), *speed_menu));
|
||||||
|
}
|
||||||
|
|
||||||
items.push_back (SeparatorElem ());
|
items.push_back (SeparatorElem ());
|
||||||
items.push_back (MenuElem (_("Reset to 100%"), sigc::mem_fun (*this, &ShuttleControl::reset_speed)));
|
items.push_back (MenuElem (_("Reset to 100%"), sigc::mem_fun (*this, &ShuttleControl::reset_speed)));
|
||||||
@ -276,6 +282,9 @@ ShuttleControl::reset_speed ()
|
|||||||
void
|
void
|
||||||
ShuttleControl::set_shuttle_max_speed (float speed)
|
ShuttleControl::set_shuttle_max_speed (float speed)
|
||||||
{
|
{
|
||||||
|
if (_ignore_change) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
Config->set_shuttle_max_speed (speed);
|
Config->set_shuttle_max_speed (speed);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -657,12 +666,18 @@ ShuttleControl::render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangl
|
|||||||
void
|
void
|
||||||
ShuttleControl::set_shuttle_style (ShuttleBehaviour s)
|
ShuttleControl::set_shuttle_style (ShuttleBehaviour s)
|
||||||
{
|
{
|
||||||
|
if (_ignore_change) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
Config->set_shuttle_behaviour (s);
|
Config->set_shuttle_behaviour (s);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ShuttleControl::set_shuttle_units (ShuttleUnits s)
|
ShuttleControl::set_shuttle_units (ShuttleUnits s)
|
||||||
{
|
{
|
||||||
|
if (_ignore_change) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
Config->set_shuttle_units (s);
|
Config->set_shuttle_units (s);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -723,6 +738,8 @@ ShuttleControl::parameter_changed (std::string p)
|
|||||||
last_speed_displayed = -99999999;
|
last_speed_displayed = -99999999;
|
||||||
map_transport_state ();
|
map_transport_state ();
|
||||||
use_shuttle_fract (true);
|
use_shuttle_fract (true);
|
||||||
|
delete shuttle_context_menu;
|
||||||
|
shuttle_context_menu = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,6 +109,8 @@ protected:
|
|||||||
|
|
||||||
float semitones_as_speed (int, bool);
|
float semitones_as_speed (int, bool);
|
||||||
float semitones_as_fract (int, bool);
|
float semitones_as_fract (int, bool);
|
||||||
|
|
||||||
|
bool _ignore_change;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __gtk2_ardour_shuttle_control_h__ */
|
#endif /* __gtk2_ardour_shuttle_control_h__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user