From a6d1b90b33e9f1e63029c0df8911ef9647969cda Mon Sep 17 00:00:00 2001 From: Nick Mainsbridge Date: Mon, 3 Nov 2008 21:29:35 +0000 Subject: [PATCH] Dont move track backgrounds, so that they no longer disappear at high zooms, SAE version uses shift button1 to solo additional tracks in not latched solo mode. git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@4089 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/audio_time_axis.cc | 2 ++ gtk2_ardour/automation_time_axis.cc | 4 ++-- gtk2_ardour/editor.cc | 8 ++++---- gtk2_ardour/editor.h | 5 +++++ gtk2_ardour/editor_canvas.cc | 4 +++- gtk2_ardour/public_editor.h | 3 +++ gtk2_ardour/route_time_axis.cc | 1 + gtk2_ardour/route_ui.cc | 17 ++++++++++++++--- gtk2_ardour/streamview.cc | 9 ++++----- gtk2_ardour/streamview.h | 2 ++ gtk2_ardour/time_axis_view.cc | 13 +++++++++++-- gtk2_ardour/time_axis_view.h | 1 + 12 files changed, 52 insertions(+), 17 deletions(-) diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc index 18a0d12199..270cc71a96 100644 --- a/gtk2_ardour/audio_time_axis.cc +++ b/gtk2_ardour/audio_time_axis.cc @@ -489,6 +489,7 @@ AudioTimeAxisView::toggle_gain_track () if (showit) { gain_track->set_marked_for_display (true); gain_track->canvas_display->show(); + gain_track->canvas_background->show(); gain_track->get_state_node()->add_property ("shown", X_("yes")); } else { gain_track->set_marked_for_display (false); @@ -525,6 +526,7 @@ AudioTimeAxisView::toggle_pan_track () if (showit) { pan_track->set_marked_for_display (true); pan_track->canvas_display->show(); + pan_track->canvas_background->show(); pan_track->get_state_node()->add_property ("shown", X_("yes")); } else { pan_track->set_marked_for_display (false); diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc index 06a6e6c73c..98b99cca07 100644 --- a/gtk2_ardour/automation_time_axis.cc +++ b/gtk2_ardour/automation_time_axis.cc @@ -70,10 +70,10 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptrproperty_x1() = 0.0; base_rect->property_y1() = 0.0; - base_rect->property_x2() = editor.frame_to_pixel (max_frames); + base_rect->property_x2() = editor.get_physical_screen_width(); base_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_AutomationTrackOutline.get(); /* outline ends and bottom */ base_rect->property_outline_what() = (guint32) (0x1|0x2|0x8); diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index fc231ff30e..12782f33e6 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -1287,16 +1287,16 @@ Editor::connect_to_session (Session *t) redisplay_named_selections (); redisplay_snapshots (); + restore_ruler_visibility (); + //tempo_map_changed (Change (0)); + session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks); + initial_route_list_display (); for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { (static_cast(*i))->set_samples_per_unit (frames_per_unit); } - restore_ruler_visibility (); - //tempo_map_changed (Change (0)); - session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks); - start_scrolling (); /* don't show master bus in a new session */ diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 137108dcdd..02b8b56906 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -317,6 +317,7 @@ class Editor : public PublicEditor void toggle_measure_visibility (); void toggle_logo_visibility (); + double get_physical_screen_width () const { return physical_screen_width; }; double physical_screen_width; double physical_screen_height; @@ -630,6 +631,7 @@ class Editor : public PublicEditor ArdourCanvas::Group* transport_marker_bar_group; ArdourCanvas::Group* cd_marker_bar_group; + ArdourCanvas::Group* _background_group; /* The _master_group is the group containing all items that require horizontal scrolling.. @@ -720,6 +722,7 @@ class Editor : public PublicEditor static const double timebar_height; guint32 visible_timebars; gdouble canvas_timebars_vsize; + gdouble get_canvas_timebars_vsize () const { return canvas_timebars_vsize; } Gtk::Menu *editor_ruler_menu; ArdourCanvas::SimpleRect* tempo_bar; @@ -848,6 +851,8 @@ class Editor : public PublicEditor sigc::connection control_scroll_connection; gdouble get_trackview_group_vertical_offset () const { return vertical_adjustment.get_value () - canvas_timebars_vsize;} + + ArdourCanvas::Group* get_background_group () const { return _background_group; } ArdourCanvas::Group* get_trackview_group () const { return _trackview_group; } double last_trackview_group_vertical_offset; void tie_vertical_scrolling (); diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index b5a0177b38..91a73307d9 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -132,7 +132,7 @@ Editor::initialize_canvas () // logo_item->property_width_set() = true; logo_item->show (); } - + _background_group = new ArdourCanvas::Group (*track_canvas->root()); _master_group = new ArdourCanvas::Group (*track_canvas->root()); transport_loop_range_rect = new ArdourCanvas::SimpleRect (*_master_group, 0.0, 0.0, 0.0, physical_screen_height); @@ -828,6 +828,7 @@ Editor::scroll_canvas_horizontally () _master_group->move (-x_delta, 0); timebar_group->move (-x_delta, 0); cursor_group->move (-x_delta, 0); + update_fixed_rulers (); redisplay_tempo (true); @@ -851,6 +852,7 @@ Editor::scroll_canvas_vertically () y_delta = last_trackview_group_vertical_offset - get_trackview_group_vertical_offset (); _trackview_group->move (0, y_delta); + _background_group->move (0, y_delta); for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { (*i)->clip_to_viewport (); diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index 22e4fef388..2ea266c327 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -147,6 +147,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway virtual void toggle_follow_playhead () = 0; virtual bool follow_playhead() const = 0; virtual bool dragging_playhead() const = 0; + virtual double get_physical_screen_width() const = 0; virtual void ensure_float (Gtk::Window&) = 0; virtual void show_window () = 0; virtual TrackViewList* get_valid_views (TimeAxisView*, ARDOUR::RouteGroup* grp = 0) = 0; @@ -225,6 +226,8 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway static const int horizontal_spacing; virtual gdouble get_trackview_group_vertical_offset () const = 0; + virtual gdouble get_canvas_timebars_vsize () const = 0; + virtual ArdourCanvas::Group* get_background_group () const = 0; virtual ArdourCanvas::Group* get_trackview_group () const = 0; static PublicEditor* _instance; diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index cab6262706..941d0dfa6a 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -1828,6 +1828,7 @@ RouteTimeAxisView::redirect_menu_item_toggled (RouteTimeAxisView::RedirectAutoma if (showit) { ran->view->set_marked_for_display (true); ran->view->canvas_display->show(); + ran->view->canvas_background->show(); } else { rai->redirect->mark_automation_visible (ran->what, true); ran->view->set_marked_for_display (false); diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index de6b6cfad9..4b913f4489 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -39,6 +39,7 @@ #include #include #include +#include #include "i18n.h" using namespace sigc; @@ -292,7 +293,7 @@ RouteUI::solo_press(GdkEventButton* ev) if (!ignore_toggle) { if (Keyboard::is_context_menu_event (ev)) { - + if (solo_menu == 0) { build_solo_menu (); } @@ -342,8 +343,17 @@ RouteUI::solo_press(GdkEventButton* ev) // shift-click: set this route to solo safe - _route->set_solo_safe (!_route->solo_safe(), this); - wait_for_release = false; + if (Profile->get_sae() && ev->button == 1) { + // button 1 and shift-click: disables solo_latched for this click + if (!Config->get_solo_latched ()) { + Config->set_solo_latched (true); + reversibly_apply_route_boolean ("solo change", &Route::set_solo, !_route->soloed(), this); + Config->set_solo_latched (false); + } + } else { + _route->set_solo_safe (!_route->solo_safe(), this); + wait_for_release = false; + } } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) { @@ -444,6 +454,7 @@ RouteUI::rec_enable_release (GdkEventButton* ev) void RouteUI::solo_changed(void* src) { + Gtkmm2ext::UI::instance()->call_slot (mem_fun (*this, &RouteUI::update_solo_display)); } diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc index d8f0aadcfe..ce532ba97a 100644 --- a/gtk2_ardour/streamview.cc +++ b/gtk2_ardour/streamview.cc @@ -47,6 +47,7 @@ using namespace Editing; StreamView::StreamView (RouteTimeAxisView& tv) : _trackview (tv) + , _background_group(new ArdourCanvas::Group(*_trackview.canvas_background)) , canvas_group(new ArdourCanvas::Group(*_trackview.canvas_display)) , _samples_per_unit(_trackview.editor.get_current_zoom()) , rec_updating(false) @@ -57,10 +58,10 @@ StreamView::StreamView (RouteTimeAxisView& tv) { /* set_position() will position the group */ - canvas_rect = new ArdourCanvas::SimpleRect (*canvas_group); + canvas_rect = new ArdourCanvas::SimpleRect (*_background_group); canvas_rect->property_x1() = 0.0; canvas_rect->property_y1() = 0.0; - canvas_rect->property_x2() = _trackview.editor.frame_to_pixel (max_frames - 1); + canvas_rect->property_x2() = _trackview.editor.get_physical_screen_width(); canvas_rect->property_y2() = (double) tv.current_height(); canvas_rect->property_outline_what() = (guint32) (0x1|0x2|0x8); // outline ends and bottom @@ -285,10 +286,8 @@ StreamView::region_layered (RegionView* rv) /* don't ever leave it at the bottom, since then it doesn't get events - the parent group does instead ... - we need to raise it above the streamview's - canvas_rect, hence the layer+1 here */ - rv->get_canvas_group()->raise (rv->region()->layer() + 1); + rv->get_canvas_group()->raise (rv->region()->layer()); } void diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h index b56c29257c..5ace1ed8de 100644 --- a/gtk2_ardour/streamview.h +++ b/gtk2_ardour/streamview.h @@ -72,6 +72,7 @@ public: virtual int set_samples_per_unit (gdouble spp); gdouble get_samples_per_unit () { return _samples_per_unit; } + ArdourCanvas::Group* background_group() { return _background_group; } ArdourCanvas::Group* canvas_item() { return canvas_group; } enum ColorTarget { @@ -123,6 +124,7 @@ protected: RouteTimeAxisView& _trackview; + ArdourCanvas::Group* _background_group; ArdourCanvas::Group* canvas_group; ArdourCanvas::SimpleRect* canvas_rect; /* frame around the whole thing */ diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc index 6c5bb2aef5..9b3e5d6c3f 100644 --- a/gtk2_ardour/time_axis_view.cc +++ b/gtk2_ardour/time_axis_view.cc @@ -78,9 +78,9 @@ TimeAxisView::TimeAxisView (ARDOUR::Session& sess, PublicEditor& ed, TimeAxisVie compute_controls_size_info (); need_size_info = false; } - + canvas_background = new Group (*ed.get_background_group (), 0.0, 0.0); canvas_display = new Group (*ed.get_trackview_group (), 0.0, 0.0); - + selection_group = new Group (*canvas_display); selection_group->hide(); @@ -197,6 +197,11 @@ TimeAxisView::~TimeAxisView() selection_group = 0; } + if (canvas_background) { + delete canvas_background; + canvas_background = 0; + } + if (canvas_display) { delete canvas_display; canvas_display = 0; @@ -223,11 +228,14 @@ TimeAxisView::show_at (double y, int& nth, VBox *parent) if (y_position != y) { canvas_display->property_y () = y; + canvas_background->property_y () = y + editor.get_canvas_timebars_vsize(); + canvas_background->move (0.0, 0.0); /* silly canvas */ canvas_display->move (0.0, 0.0); y_position = y; } + canvas_background->raise_to_top (); canvas_display->raise_to_top (); if (_marked_for_display) { @@ -328,6 +336,7 @@ TimeAxisView::hide () } canvas_display->hide(); + canvas_background->hide(); controls_frame.hide (); if (control_parent) { diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h index 059312c16b..b186c49fb0 100644 --- a/gtk2_ardour/time_axis_view.h +++ b/gtk2_ardour/time_axis_view.h @@ -103,6 +103,7 @@ class TimeAxisView : public virtual AxisView, public Stateful uint32_t current_height() const { return height; } + ArdourCanvas::Group *canvas_background; ArdourCanvas::Group *canvas_display; Gtk::VBox *control_parent;