fix zoom focus issue that was messing up zoom changes
[ardour.git] / gtk2_ardour / editor.cc
index bbf4ccde49f1bfdfd044b9f68a0390190361d3c3..ab2b96439a824e83bc78ad29d00f98bd20fde5b7 100644 (file)
 
 #include "i18n.h"
 
-#ifdef WITH_CMT
-#include "imageframe_socket_handler.h"
-#endif
-
 using namespace std;
 using namespace ARDOUR;
 using namespace PBD;
@@ -246,9 +242,7 @@ Editor::Editor ()
        , range_mark_label (_("Range Markers"))
        , transport_mark_label (_("Loop/Punch Ranges"))
        , cd_mark_label (_("CD Markers"))
-#ifdef WITH_VIDEOTIMELINE
        , videotl_label (_("Video Timeline"))
-#endif
        , edit_packer (4, 4, true)
 
          /* the values here don't matter: layout widgets
@@ -256,6 +250,10 @@ Editor::Editor ()
          */
 
        , vertical_adjustment (0.0, 0.0, 10.0, 400.0)
+       , horizontal_adjustment (0.0, 0.0, 1e16)
+       , unused_adjustment (0.0, 0.0, 10.0, 400.0)
+
+       , controls_layout (unused_adjustment, vertical_adjustment)
 
          /* tool bar related */
 
@@ -267,10 +265,6 @@ Editor::Editor ()
 
        , _toolbar_viewport (*manage (new Gtk::Adjustment (0, 0, 1e10)), *manage (new Gtk::Adjustment (0, 0, 1e10)))
 
-#ifdef WITH_CMT
-       , image_socket_listener(0)
-#endif
-
          /* nudge */
 
        , nudge_clock (new AudioClock (X_("nudge"), false, X_("nudge"), true, false, true))
@@ -369,17 +363,17 @@ Editor::Editor ()
 
        sfbrowser = 0;
 
-       location_marker_color = ARDOUR_UI::config()->canvasvar_LocationMarker.get();
-       location_range_color = ARDOUR_UI::config()->canvasvar_LocationRange.get();
-       location_cd_marker_color = ARDOUR_UI::config()->canvasvar_LocationCDMarker.get();
-       location_loop_color = ARDOUR_UI::config()->canvasvar_LocationLoop.get();
-       location_punch_color = ARDOUR_UI::config()->canvasvar_LocationPunch.get();
+       location_marker_color = ARDOUR_UI::config()->get_canvasvar_LocationMarker();
+       location_range_color = ARDOUR_UI::config()->get_canvasvar_LocationRange();
+       location_cd_marker_color = ARDOUR_UI::config()->get_canvasvar_LocationCDMarker();
+       location_loop_color = ARDOUR_UI::config()->get_canvasvar_LocationLoop();
+       location_punch_color = ARDOUR_UI::config()->get_canvasvar_LocationPunch();
 
        _edit_point = EditAtMouse;
        _internal_editing = false;
        current_canvas_cursor = 0;
 
-       frames_per_pixel = 2048; /* too early to use reset_zoom () */
+       samples_per_pixel = 2048; /* too early to use reset_zoom () */
 
        _scroll_callbacks = 0;
 
@@ -440,7 +434,6 @@ Editor::Editor ()
        cd_mark_label.hide();
        cd_mark_label.set_no_show_all();
 
-#ifdef WITH_VIDEOTIMELINE
        videotl_bar_height = 4;
        videotl_label.set_name ("EditorRulerLabel");
        videotl_label.set_size_request (-1, (int)timebar_height * videotl_bar_height);
@@ -448,7 +441,6 @@ Editor::Editor ()
        videotl_label.set_padding (5,0);
        videotl_label.hide();
        videotl_label.set_no_show_all();
-#endif
 
        range_mark_label.set_name ("EditorRulerLabel");
        range_mark_label.set_size_request (-1, (int)timebar_height);
@@ -496,7 +488,7 @@ Editor::Editor ()
 
        _cursors = new MouseCursors;
 
-       ArdourCanvas::Canvas* time_pad = new ArdourCanvas::GtkCanvas ();
+       ArdourCanvas::GtkCanvas* time_pad = manage (new ArdourCanvas::GtkCanvas ());
 
        ArdourCanvas::Line* pad_line_1 = new ArdourCanvas::Line (time_pad->root());
        pad_line_1->set (ArdourCanvas::Duple (0.0, 1.0), ArdourCanvas::Duple (100.0, 1.0));
@@ -504,7 +496,7 @@ Editor::Editor ()
        pad_line_1->show();
 
        // CAIROCANVAS
-       //time_pad->show();
+       time_pad->show();
 
        time_canvas_vbox.set_size_request (-1, (int)(timebar_height * visible_timebars) + 2);
        time_canvas_vbox.set_size_request (-1, -1);
@@ -517,12 +509,6 @@ Editor::Editor ()
        time_bars_event_box.set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
        time_bars_event_box.signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::ruler_label_button_release));
 
-       /* these enable us to have a dedicated window (for cursor setting, etc.)
-          for the canvas areas.
-       */
-
-       track_canvas_event_box.add (*_track_canvas_viewport);
-
        time_canvas_event_box.add (time_canvas_vbox);
        time_canvas_event_box.set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK);
 
@@ -543,7 +529,7 @@ Editor::Editor ()
        /* time bars canvas */
        edit_packer.attach (*_time_bars_canvas_viewport, 2, 3, 1, 2,    FILL,    FILL, 0, 0);
        /* track canvas */
-       edit_packer.attach (track_canvas_event_box,  2, 3, 2, 3,    FILL|EXPAND, FILL|EXPAND, 0, 0);
+       edit_packer.attach (*_track_canvas_viewport,  2, 3, 2, 3,    FILL|EXPAND, FILL|EXPAND, 0, 0);
 
        bottom_hbox.set_border_width (2);
        bottom_hbox.set_spacing (3);
@@ -773,21 +759,10 @@ Editor::Editor ()
 
 Editor::~Editor()
 {
-#ifdef WITH_CMT
-       if(image_socket_listener) {
-               if(image_socket_listener->is_connected())
-               {
-                       image_socket_listener->close_connection() ;
-               }
-
-               delete image_socket_listener ;
-               image_socket_listener = 0 ;
-       }
-#endif
-
         delete button_bindings;
        delete _routes;
        delete _route_groups;
+       delete _time_bars_canvas_viewport;
        delete _track_canvas_viewport;
        delete _drags;
 }
@@ -937,8 +912,8 @@ Editor::zoom_adjustment_changed ()
                return;
        }
 
-       double fpu = zoom_range_clock->current_duration() / _visible_canvas_width;
-       bool clamped = clamp_frames_per_pixel (fpu);
+       framecnt_t fpu = llrintf (zoom_range_clock->current_duration() / _visible_canvas_width);
+       bool clamped = clamp_samples_per_pixel (fpu);
        
        if (clamped) {
                zoom_range_clock->set ((framepos_t) floor (fpu * _visible_canvas_width));
@@ -1042,7 +1017,7 @@ Editor::control_scroll (float fraction)
                return;
        }
 
-       double step = fraction * current_page_frames();
+       double step = fraction * current_page_samples();
 
        /*
                _control_scroll_target is an optional<T>
@@ -1063,7 +1038,7 @@ Editor::control_scroll (float fraction)
        if ((fraction < 0.0f) && (*_control_scroll_target < (framepos_t) fabs(step))) {
                *_control_scroll_target = 0;
        } else if ((fraction > 0.0f) && (max_framepos - *_control_scroll_target < step)) {
-               *_control_scroll_target = max_framepos - (current_page_frames()*2); // allow room for slop in where the PH is on the screen
+               *_control_scroll_target = max_framepos - (current_page_samples()*2); // allow room for slop in where the PH is on the screen
        } else {
                *_control_scroll_target += (framepos_t) floor (step);
        }
@@ -1073,9 +1048,9 @@ Editor::control_scroll (float fraction)
        playhead_cursor->set_position (*_control_scroll_target);
        UpdateAllTransportClocks (*_control_scroll_target);
 
-       if (*_control_scroll_target > (current_page_frames() / 2)) {
+       if (*_control_scroll_target > (current_page_samples() / 2)) {
                /* try to center PH in window */
-               reset_x_origin (*_control_scroll_target - (current_page_frames()/2));
+               reset_x_origin (*_control_scroll_target - (current_page_samples()/2));
        } else {
                reset_x_origin (0);
        }
@@ -1148,7 +1123,7 @@ Editor::map_position_change (framepos_t frame)
 void
 Editor::center_screen (framepos_t frame)
 {
-       double const page = _visible_canvas_width * frames_per_pixel;
+       framecnt_t const page = _visible_canvas_width * samples_per_pixel;
 
        /* if we're off the page, then scroll.
         */
@@ -1314,7 +1289,7 @@ Editor::set_session (Session *t)
        _session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks);
 
        for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
-               (static_cast<TimeAxisView*>(*i))->set_frames_per_pixel (frames_per_pixel);
+               (static_cast<TimeAxisView*>(*i))->set_samples_per_pixel (samples_per_pixel);
        }
 
        super_rapid_screen_update_connection = ARDOUR_UI::instance()->SuperRapidScreenUpdate.connect (
@@ -2130,9 +2105,9 @@ Editor::set_snap_to (SnapType st)
                ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_begin;
                ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_end;
                
-               compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_frames(),
+               compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_samples(),
                                            current_bbt_points_begin, current_bbt_points_end);
-               compute_bbt_ruler_scale (leftmost_frame, leftmost_frame + current_page_frames(),
+               compute_bbt_ruler_scale (leftmost_frame, leftmost_frame + current_page_samples(),
                                         current_bbt_points_begin, current_bbt_points_end);
                update_tempo_based_rulers (current_bbt_points_begin, current_bbt_points_end);
                break;
@@ -2288,9 +2263,11 @@ Editor::set_state (const XMLNode& node, int /*version*/)
        }
 
        if ((prop = node.property ("zoom"))) {
-               reset_zoom (PBD::atof (prop->value()));
+               /* older versions of ardour used floating point samples_per_pixel */
+               double f = PBD::atof (prop->value());
+               reset_zoom (llrintf (f));
        } else {
-               reset_zoom (frames_per_pixel);
+               reset_zoom (samples_per_pixel);
        }
 
        if ((prop = node.property ("snap-to"))) {
@@ -2510,7 +2487,8 @@ Editor::get_state ()
        maybe_add_mixer_strip_width (*node);
 
        node->add_property ("zoom-focus", enum_2_string (zoom_focus));
-       snprintf (buf, sizeof(buf), "%f", frames_per_pixel);
+
+       snprintf (buf, sizeof(buf), "%" PRId64, samples_per_pixel);
        node->add_property ("zoom", buf);
        node->add_property ("snap-to", enum_2_string (_snap_type));
        node->add_property ("snap-mode", enum_2_string (_snap_mode));
@@ -2842,12 +2820,12 @@ Editor::snap_to_internal (framepos_t& start, int32_t direction, bool for_mark)
        case SnapMagnetic:
 
                if (presnap > start) {
-                       if (presnap > (start + unit_to_frame(snap_threshold))) {
+                       if (presnap > (start + pixel_to_sample(snap_threshold))) {
                                start = presnap;
                        }
 
                } else if (presnap < start) {
-                       if (presnap < (start - unit_to_frame(snap_threshold))) {
+                       if (presnap < (start - pixel_to_sample(snap_threshold))) {
                                start = presnap;
                        }
                }
@@ -3337,8 +3315,6 @@ Editor::duplicate_range (bool with_dialog)
                win.add_button (_("Duplicate"), RESPONSE_ACCEPT);
                win.set_default_response (RESPONSE_ACCEPT);
 
-               win.set_position (WIN_POS_MOUSE);
-
                spinner.grab_focus ();
 
                switch (win.run ()) {
@@ -3730,8 +3706,14 @@ Editor::set_show_measures (bool yn)
                        if (tempo_lines) {
                                tempo_lines->show();
                        }
-                       (void) redraw_measures ();
-               }
+
+                       ARDOUR::TempoMap::BBTPointList::const_iterator begin;
+                       ARDOUR::TempoMap::BBTPointList::const_iterator end;
+                       
+                       compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_samples(), begin, end);
+                       draw_measures (begin, end);
+               } 
+
                instant_save ();
        }
 }
@@ -4040,7 +4022,7 @@ Editor::restore_editing_space ()
 
 /**
  *  Make new playlists for a given track and also any others that belong
- *  to the same active route group with the `edit' property.
+ *  to the same active route group with the `select' property.
  *  @param v Track.
  */
 
@@ -4056,7 +4038,7 @@ Editor::new_playlists (TimeAxisView* v)
 
 /**
  *  Use a copy of the current playlist for a given track and also any others that belong
- *  to the same active route group with the `edit' property.
+ *  to the same active route group with the `select' property.
  *  @param v Track.
  */
 
@@ -4071,7 +4053,7 @@ Editor::copy_playlists (TimeAxisView* v)
 }
 
 /** Clear the current playlist for a given track and also any others that belong
- *  to the same active route group with the `edit' property.
+ *  to the same active route group with the `select' property.
  *  @param v Track.
  */
 
@@ -4136,16 +4118,16 @@ Editor::reset_y_origin (double y)
 }
 
 void
-Editor::reset_zoom (double fpp)
+Editor::reset_zoom (framecnt_t spp)
 {
-       clamp_frames_per_pixel (fpp);
+       clamp_samples_per_pixel (spp);
 
-       if (fpp == frames_per_pixel) {
+       if (spp == samples_per_pixel) {
                return;
        }
 
        pending_visual_change.add (VisualChange::ZoomLevel);
-       pending_visual_change.frames_per_pixel = fpp;
+       pending_visual_change.samples_per_pixel = spp;
        ensure_visual_change_idle_handler ();
 }
 
@@ -4175,7 +4157,7 @@ Editor::current_visual_state (bool with_tracks)
 {
        VisualState* vs = new VisualState (with_tracks);
        vs->y_position = vertical_adjustment.get_value();
-       vs->frames_per_pixel = frames_per_pixel;
+       vs->samples_per_pixel = samples_per_pixel;
        vs->leftmost_frame = leftmost_frame;
        vs->zoom_focus = zoom_focus;
 
@@ -4237,7 +4219,7 @@ Editor::use_visual_state (VisualState& vs)
        vertical_adjustment.set_value (vs.y_position);
 
        set_zoom_focus (vs.zoom_focus);
-       reposition_and_zoom (vs.leftmost_frame, vs.frames_per_pixel);
+       reposition_and_zoom (vs.leftmost_frame, vs.samples_per_pixel);
        
        if (vs.gui_state) {
                *ARDOUR_UI::instance()->gui_object_state = *vs.gui_state;
@@ -4256,19 +4238,20 @@ Editor::use_visual_state (VisualState& vs)
  *  @param fpu New frames per unit; should already have been clamped so that it is sensible.
  */
 void
-Editor::set_frames_per_pixel (double fpp)
+Editor::set_samples_per_pixel (framecnt_t spp)
 {
+       clamp_samples_per_pixel (spp);
+       samples_per_pixel = spp;
+
        if (tempo_lines) {
                tempo_lines->tempo_map_changed();
        }
 
-       frames_per_pixel = fpp;
-
        /* convert fpu to frame count */
 
-       framepos_t frames = (framepos_t) floor (frames_per_pixel * _visible_canvas_width);
+       framepos_t frames = samples_per_pixel * _visible_canvas_width;
 
-       if (frames_per_pixel != zoom_range_clock->current_duration()) {
+       if (samples_per_pixel != zoom_range_clock->current_duration()) {
                zoom_range_clock->set (frames);
        }
 
@@ -4296,7 +4279,6 @@ Editor::set_frames_per_pixel (double fpp)
        instant_save ();
 }
 
-#ifdef WITH_VIDEOTIMELINE
 void
 Editor::queue_visual_videotimeline_update ()
 {
@@ -4309,7 +4291,6 @@ Editor::queue_visual_videotimeline_update ()
         */
        ensure_visual_change_idle_handler ();
 }
-#endif
 
 void
 Editor::ensure_visual_change_idle_handler ()
@@ -4347,29 +4328,26 @@ Editor::idle_visual_changer ()
 
        double const last_time_origin = horizontal_position ();
 
+
        if (p & VisualChange::ZoomLevel) {
-               set_frames_per_pixel (pending_visual_change.frames_per_pixel);
+               set_samples_per_pixel (pending_visual_change.samples_per_pixel);
 
                compute_fixed_ruler_scale ();
 
                ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_begin;
                ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_end;
                
-               compute_current_bbt_points (pending_visual_change.time_origin, pending_visual_change.time_origin + current_page_frames(),
+               compute_current_bbt_points (pending_visual_change.time_origin, pending_visual_change.time_origin + current_page_samples(),
                                            current_bbt_points_begin, current_bbt_points_end);
-               compute_bbt_ruler_scale (pending_visual_change.time_origin, pending_visual_change.time_origin + current_page_frames(),
+               compute_bbt_ruler_scale (pending_visual_change.time_origin, pending_visual_change.time_origin + current_page_samples(),
                                         current_bbt_points_begin, current_bbt_points_end);
                update_tempo_based_rulers (current_bbt_points_begin, current_bbt_points_end);
-       }
 
-#ifdef WITH_VIDEOTIMELINE
-       if (p & VisualChange::ZoomLevel) {
                update_video_timeline();
        }
-#endif
 
        if (p & VisualChange::TimeOrigin) {
-               set_horizontal_position (pending_visual_change.time_origin / frames_per_pixel);
+               set_horizontal_position (pending_visual_change.time_origin / samples_per_pixel);
        }
 
        if (p & VisualChange::YOrigin) {
@@ -4381,11 +4359,10 @@ Editor::idle_visual_changer ()
                update_fixed_rulers ();
                redisplay_tempo (true);
        }
-#ifdef WITH_VIDEOTIMELINE
+
        if (!(p & VisualChange::ZoomLevel)) {
                update_video_timeline();
        }
-#endif
 
        _summary->set_overlays_dirty ();
 
@@ -4414,7 +4391,7 @@ Editor::get_preferred_edit_position (bool ignore_playhead, bool from_context_men
        EditPoint ep = _edit_point;
 
        if (from_context_menu && (ep == EditAtMouse)) {
-               return  event_frame (&context_click_event, 0, 0);
+               return  window_event_frame (&context_click_event, 0, 0);
        }
 
        if (entered_marker) {
@@ -4592,32 +4569,16 @@ Editor::get_regions_after (RegionSelection& rs, framepos_t where, const TrackVie
        }
 }
 
-/** Start with regions that are selected.  Then add equivalent regions
- *  on tracks in the same active edit-enabled route group as any of
- *  the regions that we started with.
- */
-
-RegionSelection
-Editor::get_regions_from_selection ()
-{
-       return get_equivalent_regions (selection->regions, ARDOUR::Properties::select.property_id);
-}
-
 /** Get regions using the following method:
  *
- *  Make an initial region list using the selected regions, unless
+ *  Make a region list using the selected regions, unless
  *  the edit point is `mouse' and the mouse is over an unselected
- *  region.  In this case, start with just that region.
- *
- *  Then, add equivalent regions in active edit groups to the region list.
- *
- *  Then, search the list of selected tracks to find any selected tracks which
- *  do not contain regions already in the region list. If there are no selected
- *  tracks and 'No Selection = All Tracks' is active, search all tracks rather
- *  than just the selected.
+ *  region.  In this case, use just that region.
  *
- *  Add any regions that are under the edit point on these tracks to get the
- *  returned region list.
+ *  If the edit point is not 'mouse', and there are no regions selected,
+ *  search the list of selected tracks and return regions that are under
+ *  the edit point on these tracks. If there are no selected tracks and
+ *  'No Selection = All Tracks' is active, search all tracks,
  *
  *  The rationale here is that the mouse edit point is special in that
  *  its position describes both a time and a track; the other edit
@@ -4639,48 +4600,25 @@ Editor::get_regions_from_selection_and_edit_point ()
                regions = selection->regions;
        }
 
-       TrackViewList tracks;
 
-       if (_edit_point != EditAtMouse) {
-               tracks = selection->tracks;
-       }
+       if (regions.empty() && _edit_point != EditAtMouse) {
+               TrackViewList tracks = selection->tracks;
 
-       /* Add any other regions that are in the same
-          edit-activated route group as one of our regions.
-        */
-       regions = get_equivalent_regions (regions, ARDOUR::Properties::select.property_id);
-       framepos_t const where = get_preferred_edit_position ();
-
-       if (_route_groups->all_group_active_button().get_active() && tracks.empty()) {
-               /* tracks is empty (no track selected), and 'No Selection = All Tracks'
-                * is enabled, so consider all tracks
-                */
-               tracks = track_views; 
-       }
-
-       if (!tracks.empty()) {
-               /* now search the selected tracks for tracks which don't
-                  already contain regions to be acted upon, and get regions at
-                  the edit point on those tracks too.
-                */
-               TrackViewList tracks_without_relevant_regions;
-
-               for (TrackViewList::iterator t = tracks.begin (); t != tracks.end (); ++t) {
-                       if (!regions.involves (**t)) {
-                               /* there are no equivalent regions on this track */
-                               tracks_without_relevant_regions.push_back (*t);
-                       }
+               if (_route_groups->all_group_active_button().get_active() && tracks.empty()) {
+                       /* tracks is empty (no track selected), and 'No Selection = All Tracks'
+                        * is enabled, so consider all tracks
+                        */
+                       tracks = track_views; 
                }
 
-               if (!tracks_without_relevant_regions.empty()) {
-                       /* there are some selected tracks with neither selected
-                        * regions or their equivalents: act upon all regions in
-                        * those tracks
-                        */
-                       get_regions_at (regions, where, tracks_without_relevant_regions);
+               if (!tracks.empty()) {
+                       /* no region selected or entered, but some selected tracks:
+                        * act on all regions on the selected tracks at the edit point
+                        *
+                       framepos_t const where = get_preferred_edit_position ();
+                       get_regions_at(regions, where, tracks);
                }
        }
-
        return regions;
 }
 
@@ -4698,7 +4636,7 @@ Editor::get_regions_from_selection_and_entered ()
                regions.add (entered_regionview);
        }
 
-       return get_equivalent_regions (regions, ARDOUR::Properties::select.property_id);
+       return regions;
 }
 
 void
@@ -4833,7 +4771,6 @@ Editor::idle_resize ()
        }
 
        _pending_resize_amount = 0;
-       flush_canvas ();
        _group_tabs->set_dirty ();
        resize_idle_id = -1;
 
@@ -4910,7 +4847,7 @@ Editor::add_routes (RouteList& routes)
        for (RouteList::iterator x = routes.begin(); x != routes.end(); ++x) {
                boost::shared_ptr<Route> route = (*x);
 
-               if (route->is_hidden() || route->is_monitor()) {
+               if (route->is_auditioner() || route->is_monitor()) {
                        continue;
                }
 
@@ -5225,14 +5162,14 @@ Editor::reset_x_origin_to_follow_playhead ()
 {
        framepos_t const frame = playhead_cursor->current_frame ();
 
-       if (frame < leftmost_frame || frame > leftmost_frame + current_page_frames()) {
+       if (frame < leftmost_frame || frame > leftmost_frame + current_page_samples()) {
 
                if (_session->transport_speed() < 0) {
 
-                       if (frame > (current_page_frames() / 2)) {
-                               center_screen (frame-(current_page_frames()/2));
+                       if (frame > (current_page_samples() / 2)) {
+                               center_screen (frame-(current_page_samples()/2));
                        } else {
-                               center_screen (current_page_frames()/2);
+                               center_screen (current_page_samples()/2);
                        }
 
                } else {
@@ -5243,10 +5180,10 @@ Editor::reset_x_origin_to_follow_playhead ()
                                /* moving left */
                                if (_session->transport_rolling()) {
                                        /* rolling; end up with the playhead at the right of the page */
-                                       l = frame - current_page_frames ();
+                                       l = frame - current_page_samples ();
                                } else {
                                        /* not rolling: end up with the playhead 1/4 of the way along the page */
-                                       l = frame - current_page_frames() / 4;
+                                       l = frame - current_page_samples() / 4;
                                }
                        } else {
                                /* moving right */
@@ -5255,7 +5192,7 @@ Editor::reset_x_origin_to_follow_playhead ()
                                        l = frame;
                                } else {
                                        /* not rolling: end up with the playhead 3/4 of the way along the page */
-                                       l = frame - 3 * current_page_frames() / 4;
+                                       l = frame - 3 * current_page_samples() / 4;
                                }
                        }
 
@@ -5263,7 +5200,7 @@ Editor::reset_x_origin_to_follow_playhead ()
                                l = 0;
                        }
                        
-                       center_screen_internal (l + (current_page_frames() / 2), current_page_frames ());
+                       center_screen_internal (l + (current_page_samples() / 2), current_page_samples ());
                }
        }
 }
@@ -5334,11 +5271,11 @@ Editor::super_rapid_screen_update ()
                        */
 #if 0
                        // FIXME DO SOMETHING THAT WORKS HERE - this is 2.X code
-                       double target = ((double)frame - (double)current_page_frames()/2.0) / frames_per_pixel;
+                       double target = ((double)frame - (double)current_page_samples()/2.0) / samples_per_pixel;
                        if (target <= 0.0) {
                                target = 0.0;
                        }
-                       if (fabs(target - current) < current_page_frames() / frames_per_pixel) {
+                       if (fabs(target - current) < current_page_samples() / samples_per_pixel) {
                                target = (target * 0.15) + (current * 0.85);
                        } else {
                                /* relax */
@@ -5460,7 +5397,6 @@ Editor::change_region_layering_order (bool from_context_menu)
 
        if (layering_order_editor == 0) {
                layering_order_editor = new RegionLayeringOrderEditor (*this);
-               layering_order_editor->set_position (WIN_POS_MOUSE);
        }
 
        layering_order_editor->set_context (clicked_routeview->name(), _session, clicked_routeview, pl, position);
@@ -5578,12 +5514,3 @@ Editor::shift_key_released ()
 {
        _stepping_axis_view = 0;
 }
-
-
-void
-Editor::save_canvas_state ()
-{
-       XMLTree* tree = static_cast<ArdourCanvas::Canvas*>(_track_canvas)->get_state ();
-       string path = string_compose ("%1/canvas-state.xml", _session->path());
-       tree->write (path);
-}