summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_ops.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-05-01 15:58:40 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-05-01 15:58:40 +0000
commite4fceee69f66a62e0a706c1be4159c8953aa046d (patch)
tree2460516904571daa2dae19ec5002e2025e7496fd /gtk2_ardour/editor_ops.cc
parent77ebc1fb423e400de7448e0154f65bc73ff51cf1 (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.cc40
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);
}
}