diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2008-05-01 15:58:40 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2008-05-01 15:58:40 +0000 |
commit | e4fceee69f66a62e0a706c1be4159c8953aa046d (patch) | |
tree | 2460516904571daa2dae19ec5002e2025e7496fd /gtk2_ardour/editor_ops.cc | |
parent | 77ebc1fb423e400de7448e0154f65bc73ff51cf1 (diff) |
phase two (of 3 or 4) for zoom-to-region et al
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3300 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_ops.cc')
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 8cb55a1cf1..a67a5f4557 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -1687,13 +1687,14 @@ Editor::temporal_zoom (gdouble fpu) } void -Editor::temporal_zoom_region () +Editor::temporal_zoom_region (bool both_axes) { nframes64_t start = max_frames; nframes64_t end = 0; RegionSelection rs; set<TimeAxisView*> tracks; + double top_y_position = DBL_MAX; get_regions_for_action (rs); @@ -1702,14 +1703,20 @@ Editor::temporal_zoom_region () } for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) { + if ((*i)->region()->position() < start) { start = (*i)->region()->position(); } + if ((*i)->region()->last_frame() + 1 > end) { end = (*i)->region()->last_frame() + 1; } tracks.insert (&((*i)->get_time_axis_view())); + + if ((*i)->get_time_axis_view().y_position < top_y_position) { + top_y_position = (*i)->get_time_axis_view().y_position; + } } /* now comes an "interesting" hack ... make sure we leave a little space @@ -1738,24 +1745,41 @@ Editor::temporal_zoom_region () temporal_zoom_by_frame (start, end, "zoom to region"); - uint32_t per_track_height = (uint32_t) floor ((canvas_height - 10.0) / tracks.size()); + if (both_axes) { + double per_track_height = (canvas_height - 10.0) / tracks.size(); + + /* set visible track heights appropriately */ + + for (set<TimeAxisView*>::iterator t = tracks.begin(); t != tracks.end(); ++t) { + (*t)->set_height_scaling_factor (per_track_height/(*t)->height); + } + + /* hide irrelevant tracks */ + + no_route_list_redisplay = true; + + for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { + if (find (tracks.begin(), tracks.end(), (*i)) == tracks.end()) { + hide_track_in_display (**i, true); + } + } - for (set<TimeAxisView*>::iterator t = tracks.begin(); t != tracks.end(); ++t) { - (*t)->set_height (per_track_height); - } + no_route_list_redisplay = false; + redisplay_route_list (); - vertical_adjustment.set_value (std::max ((*tracks.begin())->y_position - 5.0, 0.0)); + vertical_adjustment.set_value (std::max (top_y_position - 5.0, 0.0)); + } zoomed_to_region = true; } void -Editor::toggle_zoom_region () +Editor::toggle_zoom_region (bool both_axes) { if (zoomed_to_region) { swap_visual_state (); } else { - temporal_zoom_region (); + temporal_zoom_region (both_axes); } } |