X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Fpush2%2Ftrack_mix.cc;h=5c0b111ef9e5c42de02daf32138ac99f45af51c4;hb=ea8d089e3c1374da1cb693928bce01e5e722d1eb;hp=67602a809aa11618a97325d929a0206fc845d1a4;hpb=33015a7173ef790746a340cc39a1242a03dc015b;p=ardour.git diff --git a/libs/surfaces/push2/track_mix.cc b/libs/surfaces/push2/track_mix.cc index 67602a809a..5c0b111ef9 100644 --- a/libs/surfaces/push2/track_mix.cc +++ b/libs/surfaces/push2/track_mix.cc @@ -29,8 +29,9 @@ #include "pbd/enumwriter.h" #include "midi++/parser.h" -#include "timecode/time.h" -#include "timecode/bbt_time.h" + +#include "temporal/time.h" +#include "temporal/bbt_time.h" #include "ardour/async_midi_port.h" #include "ardour/audioengine.h" @@ -55,6 +56,7 @@ #include "canvas/meter.h" #include "canvas/rectangle.h" #include "canvas/text.h" +#include "canvas/types.h" #include "canvas.h" #include "knob.h" @@ -64,6 +66,10 @@ #include "track_mix.h" #include "utils.h" +#ifdef __APPLE__ +#define Rect ArdourCanvas::Rect +#endif + using namespace ARDOUR; using namespace std; using namespace PBD; @@ -71,12 +77,12 @@ using namespace Glib; using namespace ArdourSurface; using namespace ArdourCanvas; -TrackMixLayout::TrackMixLayout (Push2& p, Session& s) - : Push2Layout (p, s) +TrackMixLayout::TrackMixLayout (Push2& p, Session & s, std::string const & name) + : Push2Layout (p, s, name) { Pango::FontDescription fd ("Sans 10"); - bg = new Rectangle (this); + bg = new ArdourCanvas::Rectangle (this); bg->set (Rect (0, 0, display_width(), display_height())); bg->set_fill_color (p2.get_color (Push2::DarkBackground)); @@ -155,8 +161,6 @@ TrackMixLayout::TrackMixLayout (Push2& p, Session& s) minsec_text->set_font_description (fd2); minsec_text->set_color (p2.get_color (Push2::LightBackground)); minsec_text->set_position (Duple (10 + (4 * Push2Canvas::inter_button_spacing()), 90)); - - ControlProtocol::StripableSelectionChanged.connect (selection_connection, invalidator (*this), boost::bind (&TrackMixLayout::selection_changed, this), &p2); } TrackMixLayout::~TrackMixLayout () @@ -166,24 +170,9 @@ TrackMixLayout::~TrackMixLayout () } } -void -TrackMixLayout::selection_changed () -{ - if (!parent()) { - return; - } - - boost::shared_ptr s = ControlProtocol::first_selected_stripable(); - if (s) { - set_stripable (s); - } -} - void TrackMixLayout::show () { - selection_changed (); - Push2::ButtonID lower_buttons[] = { Push2::Lower1, Push2::Lower2, Push2::Lower3, Push2::Lower4, Push2::Lower5, Push2::Lower6, Push2::Lower7, Push2::Lower8 }; @@ -194,17 +183,19 @@ TrackMixLayout::show () p2.write (b->state_msg()); } + show_state (); + Container::show (); } void TrackMixLayout::hide () { - set_stripable (boost::shared_ptr()); + } void -TrackMixLayout::render (ArdourCanvas::Rect const & area, Cairo::RefPtr context) const +TrackMixLayout::render (Rect const & area, Cairo::RefPtr context) const { Container::render (area, context); } @@ -225,23 +216,31 @@ TrackMixLayout::button_lower (uint32_t n) switch (n) { case 0: - stripable->mute_control()->set_value (!stripable->mute_control()->get_value(), PBD::Controllable::UseGroup); + if (stripable->mute_control()) { + stripable->mute_control()->set_value (!stripable->mute_control()->get_value(), PBD::Controllable::UseGroup); + } break; case 1: - stripable->solo_control()->set_value (!stripable->solo_control()->get_value(), PBD::Controllable::UseGroup); + if (stripable->solo_control()) { + stripable->solo_control()->set_value (!stripable->solo_control()->get_value(), PBD::Controllable::UseGroup); + } break; case 2: - stripable->rec_enable_control()->set_value (!stripable->rec_enable_control()->get_value(), PBD::Controllable::UseGroup); + if (stripable->rec_enable_control()) { + stripable->rec_enable_control()->set_value (!stripable->rec_enable_control()->get_value(), PBD::Controllable::UseGroup); + } break; case 3: - mc = stripable->monitoring_control()->monitoring_choice(); - switch (mc) { - case MonitorInput: - stripable->monitoring_control()->set_value (MonitorAuto, PBD::Controllable::UseGroup); - break; - default: - stripable->monitoring_control()->set_value (MonitorInput, PBD::Controllable::UseGroup); - break; + if (stripable->monitor_control()) { + mc = stripable->monitoring_control()->monitoring_choice(); + switch (mc) { + case MonitorInput: + stripable->monitoring_control()->set_value (MonitorAuto, PBD::Controllable::UseGroup); + break; + default: + stripable->monitoring_control()->set_value (MonitorInput, PBD::Controllable::UseGroup); + break; + } } break; case 4: @@ -256,10 +255,14 @@ TrackMixLayout::button_lower (uint32_t n) } break; case 5: - stripable->solo_isolate_control()->set_value (!stripable->solo_isolate_control()->get_value(), PBD::Controllable::UseGroup); + if (stripable->solo_isolate_control()) { + stripable->solo_isolate_control()->set_value (!stripable->solo_isolate_control()->get_value(), PBD::Controllable::UseGroup); + } break; case 6: - stripable->solo_safe_control()->set_value (!stripable->solo_safe_control()->get_value(), PBD::Controllable::UseGroup); + if (stripable->solo_safe_control()) { + stripable->solo_safe_control()->set_value (!stripable->solo_safe_control()->get_value(), PBD::Controllable::UseGroup); + } break; case 7: /* nothing here */ @@ -434,6 +437,28 @@ TrackMixLayout::monitoring_change () p2.write (b2->state_msg()); } +void +TrackMixLayout::show_state () +{ + if (!parent()) { + return; + } + + if (stripable) { + name_changed (); + color_changed (); + solo_mute_change (); + rec_enable_change (); + solo_iso_change (); + solo_safe_change (); + monitoring_change (); + + meter->set_meter (stripable->peak_meter ().get()); + } else { + meter->set_meter (0); + } +} + void TrackMixLayout::set_stripable (boost::shared_ptr s) { @@ -471,19 +496,9 @@ TrackMixLayout::set_stripable (boost::shared_ptr s) knobs[5]->set_controllable (boost::shared_ptr()); knobs[6]->set_controllable (boost::shared_ptr()); knobs[7]->set_controllable (boost::shared_ptr()); - - name_changed (); - color_changed (); - solo_mute_change (); - rec_enable_change (); - solo_iso_change (); - solo_safe_change (); - monitoring_change (); - - meter->set_meter (stripable->peak_meter ().get()); - } else { - meter->set_meter (0); } + + show_state (); } void @@ -497,10 +512,16 @@ void TrackMixLayout::name_changed () { if (stripable) { - /* poor-man's right justification */ - char buf[92]; - snprintf (buf, sizeof (buf), "%*s", (int) sizeof (buf) - 1, stripable->name().c_str()); - name_text->set (buf); + + name_text->set (stripable->name()); + + /* right justify */ + + Duple pos; + pos.y = name_text->position().y; + pos.x = display_width() - 10 - name_text->width(); + + name_text->set_position (pos); } } @@ -511,7 +532,7 @@ TrackMixLayout::color_changed () return; } - Color rgba = stripable->presentation_info().color(); + Gtkmm2ext::Color rgba = stripable->presentation_info().color(); selection_color = p2.get_color_index (rgba); name_text->set_color (rgba); @@ -550,9 +571,9 @@ TrackMixLayout::strip_vpot_touch (int n, bool touching) boost::shared_ptr ac = knobs[n]->controllable(); if (ac) { if (touching) { - ac->start_touch (session.audible_frame()); + ac->start_touch (session.audible_sample()); } else { - ac->stop_touch (true, session.audible_frame()); + ac->stop_touch (session.audible_sample()); } } } @@ -570,7 +591,7 @@ TrackMixLayout::update_meters () void TrackMixLayout::update_clocks () { - framepos_t pos = session.audible_frame(); + samplepos_t pos = session.audible_sample(); bool negative = false; if (pos < 0) { @@ -579,7 +600,7 @@ TrackMixLayout::update_clocks () } char buf[16]; - Timecode::BBT_Time BBT = session.tempo_map().bbt_at_frame (pos); + Timecode::BBT_Time BBT = session.tempo_map().bbt_at_sample (pos); #define BBT_BAR_CHAR "|" @@ -593,22 +614,22 @@ TrackMixLayout::update_clocks () bbt_text->set (buf); - framecnt_t left; + samplecnt_t left; int hrs; int mins; int secs; int millisecs; - const double frame_rate = session.frame_rate (); + const double sample_rate = session.sample_rate (); left = pos; - hrs = (int) floor (left / (frame_rate * 60.0f * 60.0f)); - left -= (framecnt_t) floor (hrs * frame_rate * 60.0f * 60.0f); - mins = (int) floor (left / (frame_rate * 60.0f)); - left -= (framecnt_t) floor (mins * frame_rate * 60.0f); - secs = (int) floor (left / (float) frame_rate); - left -= (framecnt_t) floor ((double)(secs * frame_rate)); - millisecs = floor (left * 1000.0 / (float) frame_rate); + hrs = (int) floor (left / (sample_rate * 60.0f * 60.0f)); + left -= (samplecnt_t) floor (hrs * sample_rate * 60.0f * 60.0f); + mins = (int) floor (left / (sample_rate * 60.0f)); + left -= (samplecnt_t) floor (mins * sample_rate * 60.0f); + secs = (int) floor (left / (float) sample_rate); + left -= (samplecnt_t) floor ((double)(secs * sample_rate)); + millisecs = floor (left * 1000.0 / (float) sample_rate); if (negative) { snprintf (buf, sizeof (buf), "-%02" PRId32 ":%02" PRId32 ":%02" PRId32 ".%03" PRId32, hrs, mins, secs, millisecs);