From ce016589422986aa1350f097d001a7206e8ae4f9 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 5 Jul 2013 14:55:07 +0200 Subject: [PATCH] add meter ticks to mixer.. --- gtk2_ardour/gain_meter.cc | 56 ++++++++++++++++++++++++++++++----- gtk2_ardour/gain_meter.h | 5 ++++ gtk2_ardour/level_meter.cc | 2 +- gtk2_ardour/meter_patterns.cc | 12 ++++++-- gtk2_ardour/meter_strip.cc | 16 +++++----- 5 files changed, 72 insertions(+), 19 deletions(-) diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc index 380fc56b8e..50d4ff80b8 100644 --- a/gtk2_ardour/gain_meter.cc +++ b/gtk2_ardour/gain_meter.cc @@ -287,15 +287,24 @@ GainMeterBase::setup_meters (int len) meter_width = 10; } level_meter->setup_meters(len, meter_width); + + switch (_width) { + case Wide: + //meter_metric_area.show(); + meter_ticks1_area.show(); + meter_ticks2_area.show(); + break; + case Narrow: + //meter_metric_area.hide(); + meter_ticks1_area.hide(); + meter_ticks2_area.hide(); + break; + } } void GainMeter::setup_meters (int len) { - if (!meter_metric_area.get_parent()) { - level_meter->pack_end (meter_metric_area, false, false); - meter_metric_area.show_all (); - } GainMeterBase::setup_meters (len); } @@ -499,6 +508,8 @@ void GainMeterBase::set_meter_strip_name (const char * name) { meter_metric_area.set_name (name); + meter_ticks1_area.set_name (name); + meter_ticks2_area.set_name (name); } void @@ -837,6 +848,8 @@ void GainMeterBase::color_handler(bool dpi) meter_clear_pattern_cache(); setup_meters(); meter_metric_area.queue_draw (); + meter_ticks1_area.queue_draw (); + meter_ticks2_area.queue_draw (); } void @@ -856,6 +869,8 @@ GainMeterBase::on_theme_changed() { meter_clear_pattern_cache(); meter_metric_area.queue_draw (); + meter_ticks1_area.queue_draw (); + meter_ticks2_area.queue_draw (); } GainMeter::GainMeter (Session* s, int fader_length) @@ -902,6 +917,19 @@ GainMeter::GainMeter (Session* s, int fader_length) meter_metric_area.signal_expose_event().connect ( sigc::mem_fun(*this, &GainMeter::meter_metrics_expose)); + + meter_ticks1_area.set_size_request(3,-1); + meter_ticks2_area.set_size_request(3,-1); + + meter_ticks1_area.signal_expose_event().connect ( + sigc::mem_fun(*this, &GainMeter::meter_ticks1_expose)); + meter_ticks2_area.signal_expose_event().connect ( + sigc::mem_fun(*this, &GainMeter::meter_ticks2_expose)); + + meter_hbox.pack_start (meter_ticks1_area, false, false); + meter_hbox.pack_start (meter_alignment, true, true); + meter_hbox.pack_start (meter_ticks2_area, false, false); + meter_hbox.pack_start (meter_metric_area, false, false); } void @@ -910,7 +938,7 @@ GainMeter::set_controls (boost::shared_ptr r, boost::shared_ptr amp) { if (meter_alignment.get_parent()) { - hbox.remove (meter_alignment); + hbox.remove (meter_hbox); } // if (gain_automation_state_button.get_parent()) { @@ -933,14 +961,14 @@ GainMeter::set_controls (boost::shared_ptr r, pack some route-dependent stuff. */ - hbox.pack_start (meter_alignment, true, true); + hbox.pack_start (meter_hbox, true, true); // if (r && !r->is_auditioner()) { // fader_vbox->pack_start (gain_automation_state_button, false, false, 0); // } - setup_meters (); hbox.show_all (); + setup_meters (); } int @@ -957,6 +985,18 @@ GainMeter::meter_metrics_expose (GdkEventExpose *ev) return meter_expose_metrics(ev, _types, &meter_metric_area); } +gint +GainMeter::meter_ticks1_expose (GdkEventExpose *ev) +{ + return meter_expose_ticks(ev, _types, &meter_ticks1_area); +} + +gint +GainMeter::meter_ticks2_expose (GdkEventExpose *ev) +{ + return meter_expose_ticks(ev, _types, &meter_ticks2_area); +} + boost::shared_ptr GainMeterBase::get_controllable() { @@ -1019,5 +1059,7 @@ GainMeter::meter_configuration_changed (ChanCount c) meter_clear_pattern_cache(); meter_metric_area.queue_draw (); + meter_ticks1_area.queue_draw (); + meter_ticks2_area.queue_draw (); } diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h index 466569e355..8a4613be5a 100644 --- a/gtk2_ardour/gain_meter.h +++ b/gtk2_ardour/gain_meter.h @@ -114,6 +114,8 @@ class GainMeterBase : virtual public sigc::trackable, ARDOUR::SessionHandlePtr Gtkmm2ext::FocusEntry gain_display; Gtk::Button peak_display; Gtk::DrawingArea meter_metric_area; + Gtk::DrawingArea meter_ticks1_area; + Gtk::DrawingArea meter_ticks2_area; LevelMeter *level_meter; sigc::connection gain_watching; @@ -212,6 +214,8 @@ class GainMeter : public GainMeterBase, public Gtk::VBox void hide_all_meters (); gint meter_metrics_expose (GdkEventExpose *); + gint meter_ticks1_expose (GdkEventExpose *); + gint meter_ticks2_expose (GdkEventExpose *); private: @@ -221,6 +225,7 @@ class GainMeter : public GainMeterBase, public Gtk::VBox Gtk::HBox fader_box; Gtk::VBox* fader_vbox; Gtk::HBox hbox; + Gtk::HBox meter_hbox; Gtk::Alignment fader_alignment; Gtk::Alignment meter_alignment; std::vector _types; diff --git a/gtk2_ardour/level_meter.cc b/gtk2_ardour/level_meter.cc index 0e73d86e9e..04bfdb8fd6 100644 --- a/gtk2_ardour/level_meter.cc +++ b/gtk2_ardour/level_meter.cc @@ -96,7 +96,7 @@ LevelMeter::update_meters () return 0.0f; } - int32_t nmidi = _meter->input_streams().n_midi(); + uint32_t nmidi = _meter->input_streams().n_midi(); for (n = 0, i = meters.begin(); i != meters.end(); ++i, ++n) { if ((*i).packed) { diff --git a/gtk2_ardour/meter_patterns.cc b/gtk2_ardour/meter_patterns.cc index f7e1226b13..6069bcb343 100644 --- a/gtk2_ardour/meter_patterns.cc +++ b/gtk2_ardour/meter_patterns.cc @@ -43,8 +43,12 @@ meter_render_ticks (Gtk::Widget& w, vector types) { Glib::RefPtr win (w.get_window()); + bool background; gint width, height; win->get_size (width, height); + background = + w.get_name().substr(w.get_name().length() - 4) == "Left" + || w.get_name().substr(w.get_name().length() - 5) == "Right"; cairo_surface_t* surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height); cairo_t* cr = cairo_create (surface); @@ -52,7 +56,7 @@ meter_render_ticks (Gtk::Widget& w, vector types) cairo_move_to (cr, 0, 0); cairo_rectangle (cr, 0, 0, width, height); { - Gdk::Color c = w.get_style()->get_bg (Gtk::STATE_ACTIVE); + Gdk::Color c = w.get_style()->get_bg (background ? Gtk::STATE_ACTIVE : Gtk::STATE_NORMAL); cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p()); } cairo_fill (cr); @@ -184,11 +188,13 @@ meter_render_metrics (Gtk::Widget& w, vector types) { Glib::RefPtr win (w.get_window()); - bool tickleft = true; + bool tickleft; + bool background; gint width, height; win->get_size (width, height); tickleft = w.get_name().substr(w.get_name().length() - 4) == "Left"; + background = tickleft || w.get_name().substr(w.get_name().length() - 5) == "Right"; cairo_surface_t* surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height); cairo_t* cr = cairo_create (surface); @@ -226,7 +232,7 @@ meter_render_metrics (Gtk::Widget& w, vector types) cairo_move_to (cr, 0, 0); cairo_rectangle (cr, 0, 0, width, height); { - Gdk::Color c = w.get_style()->get_bg (Gtk::STATE_ACTIVE); + Gdk::Color c = w.get_style()->get_bg (background ? Gtk::STATE_ACTIVE : Gtk::STATE_NORMAL); cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p()); } cairo_fill (cr); diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc index 9580aaf24f..d28e123d1f 100644 --- a/gtk2_ardour/meter_strip.cc +++ b/gtk2_ardour/meter_strip.cc @@ -279,22 +279,22 @@ MeterStrip::meter_configuration_changed (ChanCount c) if (boost::dynamic_pointer_cast(_route) == 0 && boost::dynamic_pointer_cast(_route) == 0 ) { - meter_ticks1_area.set_name ("AudioBusMetrics"); - meter_ticks2_area.set_name ("AudioBusMetrics"); + meter_ticks1_area.set_name ("AudioBusMetricsLeft"); + meter_ticks2_area.set_name ("AudioBusMetricsRight"); _has_midi = false; } else if (type == (1 << DataType::AUDIO)) { - meter_ticks1_area.set_name ("AudioTrackMetrics"); - meter_ticks2_area.set_name ("AudioTrackMetrics"); + meter_ticks1_area.set_name ("AudioTrackMetricsLeft"); + meter_ticks2_area.set_name ("AudioTrackMetricsRight"); _has_midi = false; } else if (type == (1 << DataType::MIDI)) { - meter_ticks1_area.set_name ("MidiTrackMetrics"); - meter_ticks2_area.set_name ("MidiTrackMetrics"); + meter_ticks1_area.set_name ("MidiTrackMetricsLeft"); + meter_ticks2_area.set_name ("MidiTrackMetricsRight"); _has_midi = true; } else { - meter_ticks1_area.set_name ("AudioMidiTrackMetrics"); - meter_ticks2_area.set_name ("AudioMidiTrackMetrics"); + meter_ticks1_area.set_name ("AudioMidiTrackMetricsLeft"); + meter_ticks2_area.set_name ("AudioMidiTrackMetricsRight"); _has_midi = true; }