X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fgain_meter.h;h=0c4e52b7c52cd771ba74ed49a5e913c5fdeb46ea;hb=b6b366b631cc0ee60df8e6e9bb7a9acdac7d0402;hp=969757313c2e76145a67485e94655e915adac513;hpb=b42213bb04031b954eda4f9b39c5f183bfb96ede;p=ardour.git diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h index 969757313c..0c4e52b7c5 100644 --- a/gtk2_ardour/gain_meter.h +++ b/gtk2_ardour/gain_meter.h @@ -39,6 +39,7 @@ #include #include "enums.h" +#include "level_meter.h" namespace ARDOUR { class IO; @@ -54,43 +55,46 @@ namespace Gtk { class Menu; } -class GainMeter : public Gtk::VBox +class GainMeterBase : virtual public sigc::trackable { public: - GainMeter (boost::shared_ptr, ARDOUR::Session&); - ~GainMeter (); + GainMeterBase ( ARDOUR::Session&, const Glib::RefPtr& pix, + bool horizontal); + virtual ~GainMeterBase (); - void update_gain_sensitive (); + virtual void set_io (boost::shared_ptr); + void update_gain_sensitive (); void update_meters (); - void update_meters_falloff (); void effective_gain_display (); - void set_width (Width, int len=0); - void setup_meters (int len=0); - - int get_gm_width (); - void set_meter_strip_name (const char * name); void set_fader_name (const char * name); - private: + virtual void setup_meters (int len=0); + + boost::shared_ptr get_controllable(); + + LevelMeter& get_level_meter() const { return *level_meter; } + Gtkmm2ext::SliderController& get_gain_slider() const { return *gain_slider; } + + protected: friend class MixerStrip; boost::shared_ptr _io; ARDOUR::Session& _session; + std::vector connections; bool ignore_toggle; bool next_release_selects; - Gtkmm2ext::VSliderController *gain_slider; + Gtkmm2ext::SliderController *gain_slider; Gtk::Adjustment gain_adjustment; Gtkmm2ext::FocusEntry gain_display; Gtk::Button peak_display; - Gtk::HBox gain_display_box; - Gtk::HBox fader_box; Gtk::DrawingArea meter_metric_area; + LevelMeter *level_meter; sigc::connection gain_watching; @@ -116,50 +120,23 @@ class GainMeter : public Gtk::VBox std::string short_astyle_string (ARDOUR::AutoStyle); std::string _astyle_string (ARDOUR::AutoStyle, bool); - Width _width; - - static std::map > metric_pixmaps; - static Glib::RefPtr render_metrics (Gtk::Widget&); - - gint meter_metrics_expose (GdkEventExpose *); + Width _width; void show_gain (); void gain_activated (); bool gain_focused (GdkEventFocus*); - struct MeterInfo { - Gtkmm2ext::FastMeter *meter; - gint16 width; - int length; - bool packed; - - MeterInfo() { - meter = 0; - width = 0; - length = 0; - packed = false; - } - }; - - guint16 regular_meter_width; - static const guint16 thin_meter_width = 2; - vector meters; float max_peak; - Gtk::VBox* fader_vbox; - Gtk::HBox hbox; - Gtk::HBox meter_packer; - void gain_adjusted (); void gain_changed (); void meter_point_clicked (); void gain_unit_changed (); - void hide_all_meters (); + virtual void hide_all_meters (); gint meter_button_press (GdkEventButton*, uint32_t); - gint meter_button_release (GdkEventButton*, uint32_t); bool peak_button_release (GdkEventButton*); bool gain_key_press (GdkEventKey*); @@ -185,12 +162,41 @@ class GainMeter : public Gtk::VBox static sigc::signal ResetAllPeakDisplays; static sigc::signal ResetGroupPeakDisplays; - static Glib::RefPtr slider; - static Glib::RefPtr rail; - static int setup_slider_pix (); - void on_theme_changed (); bool style_changed; + bool dpi_changed; + bool color_changed; + void color_handler(bool); +}; + +class GainMeter : public GainMeterBase, public Gtk::VBox +{ + public: + GainMeter (ARDOUR::Session&); + ~GainMeter () {} + + void set_io (boost::shared_ptr); + + int get_gm_width (); + void setup_meters (int len=0); + + static void setup_slider_pix (); + + protected: + void hide_all_meters (); + + gint meter_metrics_expose (GdkEventExpose *); + + static std::map > metric_pixmaps; + static Glib::RefPtr render_metrics (Gtk::Widget&); + + private: + Gtk::HBox gain_display_box; + Gtk::HBox fader_box; + Gtk::VBox* fader_vbox; + Gtk::HBox hbox; + + static Glib::RefPtr slider; }; #endif /* __ardour_gtk_gain_meter_h__ */