From 492c933a69baf04678e68567550f1ea2965f4786 Mon Sep 17 00:00:00 2001 From: Ben Loftis Date: Fri, 11 Jul 2014 14:50:51 -0500 Subject: [PATCH] fix the visible_tracks_selector to show * when user tweaks a track height. various experimental tweaks to visible_tracks_selector and a new zoom_preset_selector for Mixbus. --- gtk2_ardour/ardour_button.cc | 24 ++++++++-- gtk2_ardour/editor.cc | 89 ++++++++++++++++++++++++++++-------- gtk2_ardour/editor.h | 3 ++ 3 files changed, 91 insertions(+), 25 deletions(-) diff --git a/gtk2_ardour/ardour_button.cc b/gtk2_ardour/ardour_button.cc index 2525d57c07..5761d18ebd 100644 --- a/gtk2_ardour/ardour_button.cc +++ b/gtk2_ardour/ardour_button.cc @@ -305,9 +305,21 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *) x = (get_width() - _pixbuf->get_width())/2.0; y = (get_height() - _pixbuf->get_height())/2.0; + //if this is a DropDown with an icon, then we need to + //move the icon left slightly to accomomodate the arrow + if (((_elements & Menu)==Menu)) { + cairo_save (cr); + cairo_translate (cr, -8,0 ); + } + cairo_rectangle (cr, x, y, _pixbuf->get_width(), _pixbuf->get_height()); gdk_cairo_set_source_pixbuf (cr, _pixbuf->gobj(), x, y); cairo_fill (cr); + + //..and then return to our previous drawing position + if (((_elements & Menu)==Menu)) { + cairo_restore (cr); + } } /* text, if any */ @@ -374,16 +386,18 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *) cairo_save (cr); - cairo_translate (cr, 0,0 ); - - //white arrow + //menu arrow cairo_set_source_rgba (cr, 1, 1, 1, 0.4); cairo_move_to(cr, get_width() - ((_diameter/2.0) + 6.0), get_height()/2.0 +_diameter/4); cairo_rel_line_to(cr, -_diameter/2, -_diameter/2); cairo_rel_line_to(cr, _diameter, 0); cairo_close_path(cr); - cairo_fill(cr); - + cairo_set_source_rgba (cr, 1, 1, 1, 0.4); + cairo_fill_preserve(cr); + cairo_set_source_rgba (cr, 0, 0, 0, 0.8); + cairo_set_line_width(cr, 0.5); + cairo_stroke(cr); + cairo_restore (cr); } diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 4d0a1fd270..991bb33c9f 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -2809,7 +2809,7 @@ Editor::setup_toolbar () mouse_mode_hbox->pack_start (mouse_select_button, false, false); mouse_mode_hbox->pack_start (mouse_cut_button, false, false); mouse_mode_hbox->pack_start (mouse_zoom_button, false, false); - + if (!ARDOUR::Profile->get_trx()) { mouse_mode_hbox->pack_start (mouse_gain_button, false, false); mouse_mode_hbox->pack_start (mouse_timefx_button, false, false); @@ -2857,6 +2857,10 @@ Editor::setup_toolbar () RefPtr act; + zoom_preset_selector.set_name ("zoom button"); + zoom_preset_selector.set_image(::get_icon ("time_exp")); + zoom_preset_selector.set_size_request (42, -1); + zoom_in_button.set_name ("zoom button"); // zoom_in_button.add_elements ( ArdourButton::Inset ); zoom_in_button.set_tweaks ((ArdourButton::Tweaks) (ArdourButton::ShowClick) ); @@ -2882,9 +2886,7 @@ Editor::setup_toolbar () // zoom_focus_selector.add_elements (ArdourButton::Inset); if (ARDOUR::Profile->get_mixbus()) { - _zoom_box.pack_start (zoom_out_button, false, false); - _zoom_box.pack_start (zoom_in_button, false, false); - _zoom_box.pack_start (zoom_out_full_button, false, false); + _zoom_box.pack_start (zoom_preset_selector, false, false); } else if (ARDOUR::Profile->get_trx()) { mode_box->pack_start (zoom_out_button, false, false); mode_box->pack_start (zoom_in_button, false, false); @@ -2898,7 +2900,12 @@ Editor::setup_toolbar () /* Track zoom buttons */ visible_tracks_selector.set_name ("zoom button"); // visible_tracks_selector.add_elements ( ArdourButton::Inset ); - set_size_request_to_display_given_text (visible_tracks_selector, _("all"), 40, 2); + if (Profile->get_mixbus()) { + visible_tracks_selector.set_image(::get_icon ("tav_exp")); + visible_tracks_selector.set_size_request (42, -1); + } else { + set_size_request_to_display_given_text (visible_tracks_selector, _("All"), 40, 2); + } tav_expand_button.set_name ("zoom button"); // tav_expand_button.add_elements ( ArdourButton::FlatFace ); @@ -2916,11 +2923,16 @@ Editor::setup_toolbar () act = ActionManager::get_action (X_("Editor"), X_("shrink-tracks")); tav_shrink_button.set_related_action (act); - if (!ARDOUR::Profile->get_trx()) { + if (ARDOUR::Profile->get_mixbus()) { _zoom_box.pack_start (visible_tracks_selector); + } else if (ARDOUR::Profile->get_trx()) { + _zoom_box.pack_start (tav_shrink_button); + _zoom_box.pack_start (tav_expand_button); + } else { + _zoom_box.pack_start (visible_tracks_selector); + _zoom_box.pack_start (tav_shrink_button); + _zoom_box.pack_start (tav_expand_button); } - _zoom_box.pack_start (tav_shrink_button); - _zoom_box.pack_start (tav_expand_button); if (!ARDOUR::Profile->get_trx()) { _zoom_tearoff = manage (new TearOff (_zoom_box)); @@ -3123,6 +3135,7 @@ Editor::setup_tooltips () ARDOUR_UI::instance()->set_tip (nudge_backward_button, _("Nudge Region/Selection Earlier")); ARDOUR_UI::instance()->set_tip (zoom_in_button, _("Zoom In")); ARDOUR_UI::instance()->set_tip (zoom_out_button, _("Zoom Out")); + ARDOUR_UI::instance()->set_tip (zoom_preset_selector, _("Zoom to Time Scale")); ARDOUR_UI::instance()->set_tip (zoom_out_full_button, _("Zoom to Session")); ARDOUR_UI::instance()->set_tip (zoom_focus_selector, _("Zoom focus")); ARDOUR_UI::instance()->set_tip (tav_expand_button, _("Expand Tracks")); @@ -3463,18 +3476,53 @@ Editor::build_track_count_menu () { using namespace Menu_Helpers; - visible_tracks_selector.AddMenuElem (MenuElem (X_("1"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 1))); - visible_tracks_selector.AddMenuElem (MenuElem (X_("2"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 2))); - visible_tracks_selector.AddMenuElem (MenuElem (X_("3"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 3))); - visible_tracks_selector.AddMenuElem (MenuElem (X_("4"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 4))); - visible_tracks_selector.AddMenuElem (MenuElem (X_("8"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 8))); - visible_tracks_selector.AddMenuElem (MenuElem (X_("12"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 12))); - visible_tracks_selector.AddMenuElem (MenuElem (X_("16"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 16))); - visible_tracks_selector.AddMenuElem (MenuElem (X_("20"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 20))); - visible_tracks_selector.AddMenuElem (MenuElem (X_("24"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 24))); - visible_tracks_selector.AddMenuElem (MenuElem (X_("32"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 32))); - visible_tracks_selector.AddMenuElem (MenuElem (X_("64"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 64))); - visible_tracks_selector.AddMenuElem (MenuElem (_("all"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 0))); + if (!Profile->get_mixbus()) { + visible_tracks_selector.AddMenuElem (MenuElem (X_("1"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 1))); + visible_tracks_selector.AddMenuElem (MenuElem (X_("2"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 2))); + visible_tracks_selector.AddMenuElem (MenuElem (X_("3"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 3))); + visible_tracks_selector.AddMenuElem (MenuElem (X_("4"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 4))); + visible_tracks_selector.AddMenuElem (MenuElem (X_("8"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 8))); + visible_tracks_selector.AddMenuElem (MenuElem (X_("12"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 12))); + visible_tracks_selector.AddMenuElem (MenuElem (X_("16"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 16))); + visible_tracks_selector.AddMenuElem (MenuElem (X_("20"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 20))); + visible_tracks_selector.AddMenuElem (MenuElem (X_("24"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 24))); + visible_tracks_selector.AddMenuElem (MenuElem (X_("32"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 32))); + visible_tracks_selector.AddMenuElem (MenuElem (X_("64"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 64))); + visible_tracks_selector.AddMenuElem (MenuElem (_("All"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 0))); + } else { + visible_tracks_selector.AddMenuElem (MenuElem (_("Fit current tracks"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 0))); + visible_tracks_selector.AddMenuElem (MenuElem (_("Fit 48 tracks"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 48))); + visible_tracks_selector.AddMenuElem (MenuElem (_("Fit 32 tracks"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 32))); + visible_tracks_selector.AddMenuElem (MenuElem (_("Fit 24 tracks"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 24))); + visible_tracks_selector.AddMenuElem (MenuElem (_("Fit 16 tracks"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 16))); + visible_tracks_selector.AddMenuElem (MenuElem (_("Fit 8 tracks"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 8))); + visible_tracks_selector.AddMenuElem (MenuElem (_("Fit 4 tracks"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 4))); + visible_tracks_selector.AddMenuElem (MenuElem (_("Fit 2 tracks"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 2))); + visible_tracks_selector.AddMenuElem (MenuElem (_("Fit 1 track"), sigc::bind (sigc::mem_fun(*this, &Editor::set_visible_track_count), 1))); + + zoom_preset_selector.AddMenuElem (MenuElem (_("Zoom to Session"), sigc::bind (sigc::mem_fun(*this, &Editor::set_zoom_preset), -1))); + zoom_preset_selector.AddMenuElem (MenuElem (_("Zoom to 24 hours"), sigc::bind (sigc::mem_fun(*this, &Editor::set_zoom_preset), 24 * 60 * 60 * 1000))); + zoom_preset_selector.AddMenuElem (MenuElem (_("Zoom to 8 hours"), sigc::bind (sigc::mem_fun(*this, &Editor::set_zoom_preset), 8 * 60 * 60 * 1000))); + zoom_preset_selector.AddMenuElem (MenuElem (_("Zoom to 1 hour"), sigc::bind (sigc::mem_fun(*this, &Editor::set_zoom_preset), 60 * 60 * 1000))); + zoom_preset_selector.AddMenuElem (MenuElem (_("Zoom to 10 min"), sigc::bind (sigc::mem_fun(*this, &Editor::set_zoom_preset), 10 * 60 * 1000))); + zoom_preset_selector.AddMenuElem (MenuElem (_("Zoom to 1 min"), sigc::bind (sigc::mem_fun(*this, &Editor::set_zoom_preset), 60 * 1000))); + zoom_preset_selector.AddMenuElem (MenuElem (_("Zoom to 10 sec"), sigc::bind (sigc::mem_fun(*this, &Editor::set_zoom_preset), 10 * 1000))); + zoom_preset_selector.AddMenuElem (MenuElem (_("Zoom to 1 sec"), sigc::bind (sigc::mem_fun(*this, &Editor::set_zoom_preset), 1 * 1000))); + zoom_preset_selector.AddMenuElem (MenuElem (_("Zoom to 100 ms"), sigc::bind (sigc::mem_fun(*this, &Editor::set_zoom_preset), 100))); + zoom_preset_selector.AddMenuElem (MenuElem (_("Zoom to 10 ms"), sigc::bind (sigc::mem_fun(*this, &Editor::set_zoom_preset), 10))); + } +} + +void +Editor::set_zoom_preset (int64_t ms) +{ + if ( ms <= 0 ) { + temporal_zoom_session(); + return; + } + + ARDOUR::framecnt_t const sample_rate = ARDOUR::AudioEngine::instance()->sample_rate(); + temporal_zoom( (sample_rate * ms / 1000) / _visible_canvas_width ); } void @@ -3524,6 +3572,7 @@ void Editor::override_visible_track_count () { _visible_track_count = -_visible_track_count; + visible_tracks_selector.set_text ( _("*") ); } bool diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index d96ac0c8f6..ac8976c033 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1590,10 +1590,13 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD ArdourButton tav_expand_button; ArdourButton tav_shrink_button; ArdourDropdown visible_tracks_selector; + ArdourDropdown zoom_preset_selector; int32_t _visible_track_count; void build_track_count_menu (); void set_visible_track_count (int32_t); + + void set_zoom_preset(int64_t); Gtk::VBox toolbar_clock_vbox; Gtk::VBox toolbar_selection_clock_vbox;