X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fgain_meter.h;h=4536bb691b5b8123acfd4c8dfe5a73e5b31db8c1;hb=e80ccbfc8b3a572e517cd9932e5f260e41a5dff7;hp=c0c5d9faff5ef86eaa2db86b87292248c6f16eb6;hpb=bb9cc45cd22af67ac275a5e73accbe14fee664d8;p=ardour.git diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h index c0c5d9faff..4536bb691b 100644 --- a/gtk2_ardour/gain_meter.h +++ b/gtk2_ardour/gain_meter.h @@ -32,11 +32,15 @@ #include #include +#include "pbd/signals.h" + +#include "ardour/chan_count.h" #include "ardour/types.h" +#include "ardour/session_handle.h" -#include -#include -#include +#include "gtkmm2ext/click_box.h" +#include "gtkmm2ext/focus_entry.h" +#include "gtkmm2ext/slider_controller.h" #include "enums.h" #include "level_meter.h" @@ -58,11 +62,11 @@ namespace Gtk { class Menu; } -class GainMeterBase : virtual public sigc::trackable +class GainMeterBase : virtual public sigc::trackable, ARDOUR::SessionHandlePtr { public: - GainMeterBase (ARDOUR::Session&, const Glib::RefPtr& pix, - bool horizontal); + GainMeterBase (ARDOUR::Session*, const Glib::RefPtr&, const Glib::RefPtr &, + bool horizontal, int); virtual ~GainMeterBase (); virtual void set_controls (boost::shared_ptr route, @@ -84,14 +88,19 @@ class GainMeterBase : virtual public sigc::trackable LevelMeter& get_level_meter() const { return *level_meter; } Gtkmm2ext::SliderController& get_gain_slider() const { return *gain_slider; } + /** Emitted in the GUI thread when a button is pressed over the level meter; + * return true if the event is handled. + */ + PBD::Signal1 LevelMeterButtonPress; + protected: friend class MixerStrip; boost::shared_ptr _route; boost::shared_ptr _meter; boost::shared_ptr _amp; - ARDOUR::Session& _session; std::vector connections; + PBD::ScopedConnectionList model_connections; bool ignore_toggle; bool next_release_selects; @@ -119,6 +128,8 @@ class GainMeterBase : virtual public sigc::trackable void gain_automation_state_changed(); void gain_automation_style_changed(); + void setup_gain_adjustment (); + std::string astate_string (ARDOUR::AutoState); std::string short_astate_string (ARDOUR::AutoState); std::string _astate_string (ARDOUR::AutoState, bool); @@ -151,10 +162,10 @@ class GainMeterBase : virtual public sigc::trackable Gtk::Menu* meter_menu; void popup_meter_menu (GdkEventButton*); - gint start_gain_touch (GdkEventButton*); - gint end_gain_touch (GdkEventButton*); + bool gain_slider_button_press (GdkEventButton *); + bool gain_slider_button_release (GdkEventButton *); - void set_mix_group_meter_point (ARDOUR::Route&, ARDOUR::MeterPoint); + void set_route_group_meter_point (ARDOUR::Route&, ARDOUR::MeterPoint); void set_meter_point (ARDOUR::Route&, ARDOUR::MeterPoint); gint meter_release (GdkEventButton*); gint meter_press (GdkEventButton*); @@ -174,13 +185,19 @@ class GainMeterBase : virtual public sigc::trackable bool dpi_changed; bool color_changed; void color_handler(bool); - bool _is_midi; + ARDOUR::DataType _data_type; + ARDOUR::ChanCount _previous_amp_output_streams; + +private: + + bool level_meter_button_press (GdkEventButton *); + PBD::ScopedConnection _level_meter_connection; }; class GainMeter : public GainMeterBase, public Gtk::VBox { public: - GainMeter (ARDOUR::Session&); + GainMeter (ARDOUR::Session*, int); ~GainMeter () {} virtual void set_controls (boost::shared_ptr route, @@ -197,16 +214,24 @@ class GainMeter : public GainMeterBase, public Gtk::VBox gint meter_metrics_expose (GdkEventExpose *); - static std::map > metric_pixmaps; - static Glib::RefPtr render_metrics (Gtk::Widget&); + typedef std::map MetricPatterns; + static MetricPatterns metric_patterns; + static cairo_pattern_t* render_metrics (Gtk::Widget &, std::vector); private: + + void meter_configuration_changed (ARDOUR::ChanCount); + Gtk::HBox gain_display_box; Gtk::HBox fader_box; Gtk::VBox* fader_vbox; Gtk::HBox hbox; + Gtk::Alignment fader_alignment; + Gtk::Alignment meter_alignment; + std::vector _types; static Glib::RefPtr slider; + static Glib::RefPtr slider_desensitised; }; #endif /* __ardour_gtk_gain_meter_h__ */