26 #include "ardour/utils.h"
29 #include <gtkmm/style.h>
30 #include <gdkmm/color.h>
69 Glib::RefPtr<Gdk::Window> win = widget->get_text_window ();
75 gdk_window_set_cursor (win->gobj(), 0);
91 , gain_automation_style_button (
"")
92 , gain_automation_state_button (
"")
95 using namespace Menu_Helpers;
105 fader_girth = rint (fader_girth * ARDOUR_UI::ui_scale);
140 peak_display.set_events (
peak_display.get_events() & ~(Gdk::EventMask (Gdk::LEAVE_NOTIFY_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::POINTER_MOTION_MASK)));
218 using namespace Menu_Helpers;
223 sigc::bind (sigc::mem_fun (*(amp.
get()), &Automatable::set_parameter_automation_state),
226 sigc::bind (sigc::mem_fun (*(amp.
get()), &Automatable::set_parameter_automation_state),
229 sigc::bind (sigc::mem_fun (*(amp.
get()), &Automatable::set_parameter_automation_state),
232 sigc::bind (sigc::mem_fun (*(amp.
get()), &Automatable::set_parameter_automation_state),
317 if (meter_channels == 1) {
322 if (meter_channels > 1) {
351 hbox.set_homogeneous(meter_channels < 7 ?
true :
false);
355 hbox.set_homogeneous(
false);
383 if (ev->button == 1 && Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier|Keyboard::TertiaryModifier)) {
385 }
else if (ev->button == 1 && Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
425 using namespace Menu_Helpers;
431 items.push_back (MenuElem (
"-inf .. +0dBFS"));
432 items.push_back (MenuElem (
"-10dB .. +0dBFS"));
433 items.push_back (MenuElem (
"-4 .. +0dBFS"));
434 items.push_back (SeparatorElem());
435 items.push_back (MenuElem (
"-inf .. -2dBFS"));
436 items.push_back (MenuElem (
"-10dB .. -2dBFS"));
437 items.push_back (MenuElem (
"-4 .. -2dBFS"));
465 if (sscanf (
gain_display.get_text().c_str(),
"%f", &
f) != 1) {
475 f = min (fabs (f), 2.0f);
482 Gtk::Window* win =
dynamic_cast<Gtk::Window*
> (w);
487 GtkWidget* f = gtk_window_get_default_widget (win->gobj());
489 gtk_widget_grab_focus (f);
505 case DataType::AUDIO:
507 strcpy (buf,
_(
"-inf"));
513 snprintf (buf,
sizeof (buf),
"%.1f", v);
550 case DataType::AUDIO:
576 sprintf(tmp,
"Mark%sLeft", name);
578 sprintf(tmp,
"Mark%sRight", name);
635 if (Keyboard::is_context_menu_event (ev)) {
641 if (Keyboard::is_button2_event(ev)) {
652 if (
_route && (ev->button == 1 || Keyboard::is_button2_event (ev))) {
654 if (Keyboard::modifier_state_equals (ev->state,
Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
661 }
else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
667 if (ev->button == 1) {
715 route_group->
foreach_route (boost::bind (&Route::set_meter_point, _1, mp,
false));
744 if (ev->type == GDK_BUTTON_RELEASE) {
748 switch (ev->button) {
762 if (ev->type == GDK_BUTTON_RELEASE) {
766 switch (ev->button) {
795 sstr = (shrt ?
"M" :
_(
"M"));
798 sstr = (shrt ?
"P" :
_(
"P"));
801 sstr = (shrt ?
"T" :
_(
"T"));
804 sstr = (shrt ?
"W" :
_(
"W"));
831 return (shrt ?
_(
"Abs") :
_(
"Abs"));
897 if (mpeak <= -200.0
f) {
900 snprintf (buf,
sizeof(buf),
"%.1f", mpeak);
939 #define PX_SCALE(pxmin, dflt) rint(std::max((double)pxmin, (double)dflt * ARDOUR_UI::ui_scale))
943 , gain_display_box(true, 0)
983 pack_start (
hbox, Gtk::PACK_SHRINK);
1057 Gtk::Requisition sz;
1067 return max(sz.width * 2, min_w * 2) + 6;
1069 return sz.width + min_w + 6;
1077 if (
_types.empty()) {
_types.push_back(DataType::AUDIO); }
1087 if (
_types.empty()) {
_types.push_back(DataType::AUDIO); }
1097 if (
_types.empty()) {
_types.push_back(DataType::AUDIO); }
1133 if (c.
get (*i) > 0) {
1140 && boost::dynamic_pointer_cast<AudioTrack>(
_route) == 0
1141 && boost::dynamic_pointer_cast<MidiTrack>(
_route) == 0
1150 (type == (1 << DataType::MIDI))
1151 || (
_route && boost::dynamic_pointer_cast<MidiTrack>(
_route))
1159 else if (type == (1 << DataType::AUDIO)) {
Gtk::HBox gain_display_box
Gtk::Menu gain_astyle_menu
LevelMeterHBox * level_meter
ARDOUR::MeterPoint old_meter_point
Gtkmm2ext::FocusEntry peak_display
std::string _astate_string(ARDOUR::AutoState, bool)
const ARDOUR::ChanCount meter_channels() const
static double gain_to_slider_position(ARDOUR::gain_t g)
virtual void set_meter(ARDOUR::PeakMeter *meter)
std::string short_astyle_string(ARDOUR::AutoStyle)
ArdourButton gain_automation_state_button
bool next_release_selects
static void reset_cursor_to_default(Gtk::Entry *widget)
void meter_clear_pattern_cache(int which=7)
MeterPoint meter_point() const
#define PX_SCALE(pxmin, dflt)
LIBGTKMM2EXT_API void set_size_request_to_display_given_text(Gtk::Widget &w, const gchar *text, gint hpadding, gint vpadding)
boost::shared_ptr< ARDOUR::Route > _route
void update_gain_sensitive()
boost::shared_ptr< Amp > amp() const
ARDOUR::ChanCount _previous_amp_output_streams
ArdourButton gain_automation_style_button
void popup_meter_menu(GdkEventButton *)
void gain_automation_style_changed()
gint meter_ticks2_expose(GdkEventExpose *)
sigc::signal< void > DPIReset
Session & session() const
void clear_meters(bool reset_highlight=true)
sigc::signal< void > StartGesture
virtual void set_type(ARDOUR::MeterType)
static ARDOUR_UI * instance()
void set_gain(gain_t val, void *src)
LIBARDOUR_API double slider_position_to_gain_with_max(double g, double max_gain=2.0)
void set_type(ARDOUR::MeterType)
void set_fader_name(const char *name)
void set_meter_type(MeterType t)
void set_gain(gain_t g, void *src)
std::string _astyle_string(ARDOUR::AutoStyle, bool)
std::vector< ARDOUR::DataType > _types
Gtkmm2ext::FocusEntry gain_display
bool is_auditioner() const
PBD::Signal2< void, ChanCount, ChanCount > ConfigurationChanged
boost::shared_ptr< PeakMeter > shared_peak_meter() const
GainMeter(ARDOUR::Session *, int)
std::string astate_string(ARDOUR::AutoState)
#define ENSURE_GUI_THREAD(obj, method,...)
virtual void setup_meters(int len=0)
void reset_group_peak_display(ARDOUR::RouteGroup *)
static float accurate_coefficient_to_dB(float coeff)
GainMeterBase(ARDOUR::Session *, bool horizontal, int, int)
sigc::signal< void, ARDOUR::Route * > ResetRoutePeakDisplays
void meter_type_changed(ARDOUR::MeterType)
gint meter_press(GdkEventButton *)
void on_style_changed(const Glib::RefPtr< Gtk::Style > &)
void setup_meters(int len=0, int width=3, int thin=2)
LIBGTKMM2EXT_API void set_sensitive(std::vector< Glib::RefPtr< Gtk::Action > > &actions, bool)
gint gain_automation_style_button_event(GdkEventButton *)
PBD::ScopedConnection _level_meter_connection
void effective_gain_display()
boost::shared_ptr< ARDOUR::Amp > _amp
LIBGTKMM2EXT_API uint64_t Keyboard
void gain_automation_state_changed()
Gtk::Alignment meter_alignment
PBD::Signal1< bool, GdkEventButton * > ButtonPress
gint meter_release(GdkEventButton *)
Gtk::DrawingArea meter_ticks2_area
LIBARDOUR_API RCConfiguration * Config
static float minus_infinity(void)
Gtk::DrawingArea meter_metric_area
void set_default_value(float)
std::string astyle_string(ARDOUR::AutoStyle)
bool level_meter_button_press(GdkEventButton *)
void set_meter_point(ARDOUR::Route &, ARDOUR::MeterPoint)
static double dB_coeff_step(double max_coeff)
sigc::connection gain_watching
void set_meter_point(MeterPoint, bool force=false)
framepos_t transport_frame() const
Gtk::DrawingArea meter_ticks1_area
boost::shared_ptr< PBD::Controllable > get_controllable()
virtual void set_controls(boost::shared_ptr< ARDOUR::Route > route, boost::shared_ptr< ARDOUR::PeakMeter > meter, boost::shared_ptr< ARDOUR::Amp > amp)
gint gain_automation_state_button_event(GdkEventButton *)
gint meter_expose_metrics(GdkEventExpose *ev, ARDOUR::MeterType type, std::vector< ARDOUR::DataType > types, Gtk::DrawingArea *mma)
void set_meter_strip_name(const char *name)
PBD::Signal0< void > active_changed
void foreach_route(T *obj, void(T::*func)(Route &), bool sort=true)
void setup_gain_adjustment()
void meter_configuration_changed(ARDOUR::ChanCount)
void route_active_changed()
static MeterPoint next_meter_point(MeterPoint mp)
Gtk::Adjustment gain_adjustment
Gtk::Menu gain_astate_menu
PBD::Signal0< void > automation_style_changed
bool key_is_legal_for_numeric_entry(guint keyval)
sigc::signal< void > ResetAllPeakDisplays
void set_type(ARDOUR::MeterType)
Gtk::Alignment fader_alignment
PBD::Signal1< bool, GdkEventButton * > LevelMeterButtonPress
void set_tip(Gtk::Widget &w, const gchar *tip)
void call_slot(EventLoop::InvalidationRecord *, const boost::function< void()> &)
ARDOUR::DataType _data_type
ChanCount input_streams() const
LIBARDOUR_API double gain_to_slider_position_with_max(double g, double max_gain=2.0)
boost::shared_ptr< GainControl > gain_control()
bool peak_button_release(GdkEventButton *)
uint32_t get(DataType t) const
void setup_meters(int len=0)
void reset_peak_display()
static void reset_cursor_to_default_state(Gtk::StateType, Gtk::Entry *widget)
RouteGroup * route_group() const
static UIConfiguration * config()
MeterType meter_type() const
bool gain_key_press(GdkEventKey *)
sigc::signal< void > ColorsChanged
sigc::signal< void, ARDOUR::RouteGroup * > ResetGroupPeakDisplays
void set_route_group_meter_point(ARDOUR::Route &, ARDOUR::MeterPoint)
static float dB_to_coefficient(float dB)
virtual void hide_all_meters()
Gtkmm2ext::SliderController * gain_slider
boost::shared_ptr< AutomationList > alist() const
PBD::ScopedConnectionList model_connections
bool gain_focused(GdkEventFocus *)
virtual void set_session(ARDOUR::Session *)
PBD::Signal1< void, MeterType > TypeChanged
void set_controllable(boost::shared_ptr< PBD::Controllable > c)
std::vector< sigc::connection > connections
void meter_point_clicked()
void set_width(Width, int len=0)
void reset_route_peak_display(ARDOUR::Route *)
sigc::signal< void > StopGesture
sigc::connection rapid_connect(const sigc::slot< void > &slot)
std::string short_astate_string(ARDOUR::AutoState)
virtual void set_controls(boost::shared_ptr< ARDOUR::Route > route, boost::shared_ptr< ARDOUR::PeakMeter > meter, boost::shared_ptr< ARDOUR::Amp > amp)
gint meter_metrics_expose(GdkEventExpose *)
ARDOUR::Session * _session
void foreach_route(Function f)
gint meter_ticks1_expose(GdkEventExpose *)
gint meter_expose_ticks(GdkEventExpose *ev, ARDOUR::MeterType type, std::vector< ARDOUR::DataType > types, Gtk::DrawingArea *mta)
virtual ChanCount output_streams() const
PBD::Signal1< void, AutoState > automation_state_changed
boost::shared_ptr< ARDOUR::PeakMeter > _meter
sigc::signal< void > RedrawMetrics