remove all unit-based methods from (Public)Editor; rationalize Editor::event_frame...
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 12 Apr 2013 15:09:49 +0000 (11:09 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 12 Apr 2013 15:09:49 +0000 (11:09 -0400)
17 files changed:
gtk2_ardour/automation_line.cc
gtk2_ardour/editor.cc
gtk2_ardour/editor.h
gtk2_ardour/editor_canvas.cc
gtk2_ardour/editor_canvas_events.cc
gtk2_ardour/editor_cursors.cc
gtk2_ardour/editor_drag.cc
gtk2_ardour/editor_imageframe.cc
gtk2_ardour/editor_mouse.cc
gtk2_ardour/editor_ops.cc
gtk2_ardour/editor_summary.cc
gtk2_ardour/editor_videotimeline.cc
gtk2_ardour/marker.cc
gtk2_ardour/public_editor.h
gtk2_ardour/time_axis_view.cc
gtk2_ardour/video_image_frame.cc
gtk2_ardour/video_timeline.cc

index 460802309a2aaee1ffce52e42a3c5dc245798015..72098fd7c88faed9f9fae3b63af58fb3e5f00da6 100644 (file)
@@ -243,7 +243,7 @@ AutomationLine::modify_point_y (ControlPoint& cp, double y)
        y = min (1.0, y);
        y = _height - (y * _height);
 
-       double const x = trackview.editor().frame_to_unit_unrounded (_time_converter->to((*cp.model())->when) - _offset);
+       double const x = trackview.editor().frame_to_pixel_unrounded (_time_converter->to((*cp.model())->when) - _offset);
 
        trackview.editor().session()->begin_reversible_command (_("automation event move"));
        trackview.editor().session()->add_command (
@@ -739,10 +739,10 @@ AutomationLine::sync_model_with_view_point (ControlPoint& cp)
 
        /* if xval has not changed, set it directly from the model to avoid rounding errors */
 
-       if (view_x == trackview.editor().frame_to_unit_unrounded (_time_converter->to ((*cp.model())->when)) - _offset) {
+       if (view_x == trackview.editor().frame_to_pixel_unrounded (_time_converter->to ((*cp.model())->when)) - _offset) {
                view_x = (*cp.model())->when - _offset;
        } else {
-               view_x = trackview.editor().unit_to_frame (view_x);
+               view_x = trackview.editor().pixel_to_frame (view_x);
                view_x = _time_converter->from (view_x + _offset);
        }
 
@@ -760,7 +760,7 @@ AutomationLine::control_points_adjacent (double xval, uint32_t & before, uint32_
        ControlPoint *acp = 0;
        double unit_xval;
 
-       unit_xval = trackview.editor().frame_to_unit_unrounded (xval);
+       unit_xval = trackview.editor().frame_to_pixel_unrounded (xval);
 
        for (vector<ControlPoint*>::iterator i = control_points.begin(); i != control_points.end(); ++i) {
 
@@ -947,7 +947,7 @@ AutomationLine::reset_callback (const Evoral::ControlList& events)
                 * zoom and scroll into account).
                 */
                        
-               tx = trackview.editor().frame_to_unit_unrounded (tx);
+               tx = trackview.editor().frame_to_pixel_unrounded (tx);
                
                /* convert from canonical view height (0..1.0) to actual
                 * height coordinates (using X11's top-left rooted system)
index 613a73e5c982fcb83612a5cedb1cd0dd05313bfb..f72e33bf4654bf6cb27c4381386767944e55248a 100644 (file)
@@ -2833,12 +2833,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_frame(snap_threshold))) {
                                start = presnap;
                        }
 
                } else if (presnap < start) {
-                       if (presnap < (start - unit_to_frame(snap_threshold))) {
+                       if (presnap < (start - pixel_to_frame(snap_threshold))) {
                                start = presnap;
                        }
                }
@@ -4400,7 +4400,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) {
index edb0e8761b195c1a4baa90c17844672e6f682d4e..897ea0afee249e4c44e1f99113409a91c39ea0d6 100644 (file)
@@ -220,24 +220,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        void separate_regions_using_location (ARDOUR::Location&);
        void transition_to_rolling (bool forward);
 
-       /* undo related */
-
-       framepos_t unit_to_frame (double unit) const {
-               return (framepos_t) rint (unit * frames_per_pixel);
-       }
-
-       double frame_to_unit (framepos_t frame) const {
-               return rint ((double) frame / (double) frames_per_pixel);
-       }
-
-       double frame_to_unit_unrounded (framepos_t frame) const {
-               return frame / frames_per_pixel;
-       }
-       
-       double frame_to_unit (double frame) const {
-               return rint (frame / frames_per_pixel);
-       }
-
        /* NOTE: these functions assume that the "pixel" coordinate is
           the result of using the world->canvas affine transform on a
           world coordinate. These coordinates already take into
@@ -260,8 +242,12 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
                }
        }
 
-       gulong frame_to_pixel (framepos_t frame) const {
-               return (gulong) rint (frame / frames_per_pixel);
+       double frame_to_pixel (framepos_t frame) const {
+               return rint (frame / frames_per_pixel);
+       }
+
+       double frame_to_pixel_unrounded (framepos_t frame) const {
+               return frame / frames_per_pixel;
        }
 
        void flush_canvas ();
@@ -1885,7 +1871,15 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
 
        void duplicate_range (bool with_dialog);
 
-       framepos_t event_frame (GdkEvent const *, double* px = 0, double* py = 0) const;
+        /** computes the timeline frame (sample) of an event whose coordinates
+        * are in canvas units (pixels, scroll offset included).
+        */
+       framepos_t canvas_event_frame (GdkEvent const *, double* px = 0, double* py = 0) const;
+
+        /** computes the timeline frame (sample) of an event whose coordinates
+        * are in window units (pixels, no scroll offset).
+        */
+       framepos_t window_event_frame (GdkEvent const *, double* px = 0, double* py = 0) const;
 
        /* returns false if mouse pointer is not in track or marker canvas
         */
index d7a5373637a0b1e276452b12420b94daad984777..5b5ae3e0dec5705b0e30063f0c836494174c98e4 100644 (file)
@@ -422,8 +422,6 @@ Editor::drop_paths (const RefPtr<Gdk::DragContext>& context,
        vector<string> paths;
        GdkEvent ev;
        framepos_t frame;
-       double wx;
-       double wy;
        double cy;
 
        if (convert_drop_to_paths (paths, context, x, y, data, info, time) == 0) {
@@ -431,13 +429,11 @@ Editor::drop_paths (const RefPtr<Gdk::DragContext>& context,
                /* D-n-D coordinates are window-relative, so convert to "world" coordinates
                 */
 
-               _track_canvas_viewport->window_to_canvas (x, y, wx, wy);
-
                ev.type = GDK_BUTTON_RELEASE;
-               ev.button.x = wx;
-               ev.button.y = wy;
+               ev.button.x = x;
+               ev.button.y = y;
 
-               frame = event_frame (&ev, 0, &cy);
+               frame = window_event_frame (&ev, 0, &cy);
 
                snap_to (frame);
 
@@ -916,7 +912,7 @@ Editor::update_canvas_now ()
 double
 Editor::horizontal_position () const
 {
-       return frame_to_unit (leftmost_frame);
+       return frame_to_pixel (leftmost_frame);
 }
 
 void
index afbfff224882f77925b6f80e1a3307692f58aa31..0c55da8a0a568f953dc3745d33a42b9619dabcda 100644 (file)
@@ -1003,8 +1003,6 @@ Editor::canvas_note_event (GdkEvent *event, ArdourCanvas::Item* item)
 bool
 Editor::track_canvas_drag_motion (Glib::RefPtr<Gdk::DragContext> const& context, int x, int y, guint time)
 {
-       ArdourCanvas::Coord wx;
-       ArdourCanvas::Coord wy;
        boost::shared_ptr<Region> region;
        boost::shared_ptr<Region> region_copy;
        RouteTimeAxisView* rtav;
@@ -1018,15 +1016,13 @@ Editor::track_canvas_drag_motion (Glib::RefPtr<Gdk::DragContext> const& context,
                return false;
        }
 
-       _track_canvas_viewport->window_to_canvas (x, y, wx, wy);
-
        event.type = GDK_MOTION_NOTIFY;
-       event.button.x = wx;
-       event.button.y = wy;
+       event.button.x = x;
+       event.button.y = y;
        /* assume we're dragging with button 1 */
        event.motion.state = Gdk::BUTTON1_MASK;
 
-       (void) event_frame (&event, &px, &py);
+       (void) window_event_frame (&event, &px, &py);
 
        std::pair<TimeAxisView*, int> const tv = trackview_by_y_position (py);
        bool can_drop = false;
@@ -1096,8 +1092,6 @@ Editor::drop_regions (const Glib::RefPtr<Gdk::DragContext>& /*context*/,
                      const SelectionData& /*data*/,
                      guint /*info*/, guint /*time*/)
 {
-       double wx;
-       double wy;
        boost::shared_ptr<Region> region;
        boost::shared_ptr<Region> region_copy;
        RouteTimeAxisView* rtav;
@@ -1105,15 +1099,13 @@ Editor::drop_regions (const Glib::RefPtr<Gdk::DragContext>& /*context*/,
        double px;
        double py;
 
-       _track_canvas_viewport->window_to_canvas (x, y, wx, wy);
-
        event.type = GDK_MOTION_NOTIFY;
-       event.button.x = wx;
-       event.button.y = wy;
+       event.button.x = x;
+       event.button.y = y;
        /* assume we're dragging with button 1 */
        event.motion.state = Gdk::BUTTON1_MASK;
 
-       framepos_t const pos = event_frame (&event, &px, &py);
+       framepos_t const pos = window_event_frame (&event, &px, &py);
 
        std::pair<TimeAxisView*, int> const tv = trackview_by_y_position (py);
 
index afe5b22bfcf4dd90a4f2da4edf24a1da7db2dc05..81fba54b78cf89567089fb0cb803191dc98a78bd 100644 (file)
@@ -67,7 +67,7 @@ EditorCursor::set_position (framepos_t frame)
 {
        PositionChanged (frame);
 
-       double const new_pos = _editor.frame_to_unit (frame);
+       double const new_pos = _editor.frame_to_pixel (frame);
 
        if (new_pos != _time_bars_canvas_item.x ()) {
                _time_bars_canvas_item.set_x (new_pos);
index 250951f43885c397480f6c3d42d64bc1a20cc6ee..270f5f7d31d8f912f37aaef2c2d3920cc731a50c 100644 (file)
@@ -127,7 +127,7 @@ DragManager::start_grab (GdkEvent* e, Gdk::Cursor* c)
        _old_follow_playhead = _editor->follow_playhead ();
        _editor->set_follow_playhead (false);
 
-       _current_pointer_frame = _editor->event_frame (e, &_current_pointer_x, &_current_pointer_y);
+       _current_pointer_frame = _editor->canvas_event_frame (e, &_current_pointer_x, &_current_pointer_y);
 
        for (list<Drag*>::const_iterator i = _drags.begin(); i != _drags.end(); ++i) {
                (*i)->start_grab (e, c);
@@ -165,7 +165,7 @@ DragManager::motion_handler (GdkEvent* e, bool from_autoscroll)
 {
        bool r = false;
 
-       _current_pointer_frame = _editor->event_frame (e, &_current_pointer_x, &_current_pointer_y);
+       _current_pointer_frame = _editor->canvas_event_frame (e, &_current_pointer_x, &_current_pointer_y);
 
        for (list<Drag*>::iterator i = _drags.begin(); i != _drags.end(); ++i) {
                bool const t = (*i)->motion_handler (e, from_autoscroll);
@@ -232,7 +232,7 @@ Drag::start_grab (GdkEvent* event, Gdk::Cursor *cursor)
                _y_constrained = false;
        }
 
-       _raw_grab_frame = _editor->event_frame (event, &_grab_x, &_grab_y);
+       _raw_grab_frame = _editor->canvas_event_frame (event, &_grab_x, &_grab_y);
        setup_pointer_frame_offset ();
        _grab_frame = adjusted_frame (_raw_grab_frame, event);
        _last_pointer_frame = _grab_frame;
@@ -1896,7 +1896,7 @@ TrimDrag::motion (GdkEvent* event, bool first_move)
                                        boost::shared_ptr<AudioRegion> ar (arv->audio_region());
                                        distance = _drags->current_pointer_x() - grab_x();
                                        len = ar->fade_in()->back()->when;
-                                       new_length = len - _editor->unit_to_frame (distance);
+                                       new_length = len - _editor->pixel_to_frame (distance);
                                        new_length = ar->verify_xfade_bounds (new_length, true  /*START*/ );
                                        arv->reset_fade_in_shape_width (ar, new_length);  //the grey shape
                                }
@@ -1916,7 +1916,7 @@ TrimDrag::motion (GdkEvent* event, bool first_move)
                                        boost::shared_ptr<AudioRegion> ar (arv->audio_region());
                                        distance = grab_x() - _drags->current_pointer_x();
                                        len = ar->fade_out()->back()->when;
-                                       new_length = len - _editor->unit_to_frame (distance);
+                                       new_length = len - _editor->pixel_to_frame (distance);
                                        new_length = ar->verify_xfade_bounds (new_length, false  /*END*/ );
                                        arv->reset_fade_out_shape_width (ar, new_length);  //the grey shape
                                }
@@ -1990,7 +1990,7 @@ TrimDrag::finished (GdkEvent* event, bool movement_occurred)
                                                boost::shared_ptr<AudioRegion> ar (arv->audio_region());
                                                distance = _drags->current_pointer_x() - grab_x();
                                                len = ar->fade_in()->back()->when;
-                                               new_length = len - _editor->unit_to_frame (distance);
+                                               new_length = len - _editor->pixel_to_frame (distance);
                                                new_length = ar->verify_xfade_bounds (new_length, true  /*START*/ );
                                                ar->set_fade_in_length(new_length);
                                        }
@@ -2007,7 +2007,7 @@ TrimDrag::finished (GdkEvent* event, bool movement_occurred)
                                                boost::shared_ptr<AudioRegion> ar (arv->audio_region());
                                                distance = _drags->current_pointer_x() - grab_x();
                                                len = ar->fade_out()->back()->when;
-                                               new_length = len - _editor->unit_to_frame (distance);
+                                               new_length = len - _editor->pixel_to_frame (distance);
                                                new_length = ar->verify_xfade_bounds (new_length, false  /*END*/ );
                                                ar->set_fade_out_length(new_length);
                                        }
@@ -2387,7 +2387,7 @@ CursorDrag::start_grab (GdkEvent* event, Gdk::Cursor* c)
 
        _grab_zoom = _editor->frames_per_pixel;
 
-       framepos_t where = _editor->event_frame (event, 0, 0);
+       framepos_t where = _editor->canvas_event_frame (event, 0, 0);
        _editor->snap_to_with_modifier (where, event);
 
        _editor->_dragging_playhead = true;
@@ -3140,7 +3140,7 @@ ControlPointDrag::motion (GdkEvent* event, bool)
        cy = max (0.0, cy);
        cy = min ((double) _point->line().height(), cy);
 
-       framepos_t cx_frames = _editor->unit_to_frame (cx);
+       framepos_t cx_frames = _editor->pixel_to_frame (cx);
 
        if (!_x_constrained) {
                _editor->snap_to_with_modifier (cx_frames, event);
@@ -3150,7 +3150,7 @@ ControlPointDrag::motion (GdkEvent* event, bool)
 
        float const fraction = 1.0 - (cy / _point->line().height());
 
-       _point->line().drag_motion (_editor->frame_to_unit_unrounded (cx_frames), fraction, false, _pushing, _final_index);
+       _point->line().drag_motion (_editor->frame_to_pixel_unrounded (cx_frames), fraction, false, _pushing, _final_index);
 
        _editor->verbose_cursor()->set_text (_point->line().get_verbose_cursor_string (fraction));
 }
@@ -4279,7 +4279,7 @@ frameoffset_t
 NoteDrag::total_dx () const
 {
        /* dx in frames */
-       frameoffset_t const dx = _editor->unit_to_frame (_drags->current_pointer_x() - grab_x());
+       frameoffset_t const dx = _editor->pixel_to_frame (_drags->current_pointer_x() - grab_x());
 
        /* primary note time */
        frameoffset_t const n = _region->source_beats_to_absolute_frames (_primary->note()->time ());
@@ -4319,7 +4319,7 @@ NoteDrag::motion (GdkEvent *, bool)
        int8_t const dy = total_dy ();
 
        /* Now work out what we have to do to the note canvas items to set this new drag delta */
-       double const tdx = _editor->frame_to_unit (dx) - _cumulative_dx;
+       double const tdx = _editor->frame_to_pixel (dx) - _cumulative_dx;
        double const tdy = -dy * _note_height - _cumulative_dy;
 
        if (tdx || tdy) {
@@ -4641,7 +4641,7 @@ PatchChangeDrag::motion (GdkEvent* ev, bool)
        f = min (f, r->last_frame ());
 
        framecnt_t const dxf = f - grab_frame(); // permitted dx in frames
-       double const dxu = _editor->frame_to_unit (dxf); // permitted fx in units
+       double const dxu = _editor->frame_to_pixel (dxf); // permitted fx in units
        _patch_change->move (ArdourCanvas::Duple (dxu - _cumulative_dx, 0));
        _cumulative_dx = dxu;
 }
@@ -4905,7 +4905,7 @@ CrossfadeEdgeDrag::motion (GdkEvent*, bool)
 
        /* how long should it be ? */
 
-       new_length = len + _editor->unit_to_frame (distance);
+       new_length = len + _editor->pixel_to_frame (distance);
 
        /* now check with the region that this is legal */
 
@@ -4935,7 +4935,7 @@ CrossfadeEdgeDrag::finished (GdkEvent*, bool)
                len = ar->fade_out()->back()->when;
        }
 
-       new_length = ar->verify_xfade_bounds (len + _editor->unit_to_frame (distance), start);
+       new_length = ar->verify_xfade_bounds (len + _editor->pixel_to_frame (distance), start);
        
        _editor->begin_reversible_command ("xfade trim");
        ar->playlist()->clear_owned_changes (); 
index e1c3a5bf4a8f9dede5fb36273064bdad6619b1e9..9b00d53dd09a024aab0de688a18ea9de0524a30f 100644 (file)
@@ -491,7 +491,7 @@ Editor::markerview_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event)
        framepos_t pending_region_position ;
        framepos_t pointer_frame ;
 
-       pointer_frame = event_frame(event, &cx, &cy) ;
+       pointer_frame = canvas_event_frame(event, &cx, &cy) ;
 
        snap_to(pointer_frame) ;
 
@@ -539,7 +539,7 @@ Editor::imageframe_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event)
        framepos_t pending_region_position;
        framepos_t pointer_frame;
 
-       pointer_frame = event_frame(event, &cx, &cy) ;
+       pointer_frame = canvas_event_frame(event, &cx, &cy) ;
 
        snap_to(pointer_frame) ;
 
@@ -676,7 +676,7 @@ Editor::imageframe_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent*
 
        framepos_t start = 0 ;
        framepos_t end = 0 ;
-       framepos_t pointer_frame = event_frame(event) ;
+       framepos_t pointer_frame = canvas_event_frame(event) ;
 
        // chekc th eposition of the item is not locked
        if(!ifv->get_position_locked()) {
@@ -765,7 +765,7 @@ Editor::imageframe_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev
 
        framepos_t start = 0 ;
        framepos_t end = 0 ;
-       framepos_t pointer_frame = event_frame(event) ;
+       framepos_t pointer_frame = canvas_event_frame(event) ;
        framepos_t new_dur_val = 0 ;
 
        snap_to(pointer_frame) ;
@@ -890,7 +890,7 @@ Editor::markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent*
 
        framepos_t start = 0 ;
        framepos_t end = 0 ;
-       framepos_t pointer_frame = event_frame(event) ;
+       framepos_t pointer_frame = canvas_event_frame(event) ;
 
        // chekc th eposition of the item is not locked
        if(!mv->get_position_locked())
@@ -982,7 +982,7 @@ Editor::markerview_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev
 
        framepos_t start = 0 ;
        framepos_t end = 0 ;
-       framepos_t pointer_frame = event_frame(event) ;
+       framepos_t pointer_frame = canvas_event_frame(event) ;
        framepos_t new_dur_val = 0 ;
 
        snap_to(pointer_frame) ;
index 563ec8bc3fea7da39fbd8c26974d86c5757f00ca..8a1c47859380ffd53b0722b78636e201134f6405 100644 (file)
@@ -102,86 +102,81 @@ Editor::mouse_frame (framepos_t& where, bool& in_track_canvas) const
         }
 
        int x, y;
-       double wx, wy;
-       Gdk::ModifierType mask;
-       Glib::RefPtr<Gdk::Window> canvas_window = const_cast<Editor*>(this)->_track_canvas_viewport->get_window();
-       Glib::RefPtr<const Gdk::Window> pointer_window;
+       Glib::RefPtr<Gdk::Window> canvas_window = const_cast<Editor*>(this)->_track_canvas->get_window();
 
        if (!canvas_window) {
                return false;
        }
 
-       pointer_window = canvas_window->get_pointer (x, y, mask);
+       Glib::RefPtr<const Gdk::Window> pointer_window = Gdk::Display::get_default()->get_window_at_pointer (x, y);
 
-       if (pointer_window == _track_canvas->get_window()) {
-               wx = x;
-               wy = y;
-               in_track_canvas = true;
-       } else {
+       if (!pointer_window) {
+               return false;
+       }
+
+       if (pointer_window != canvas_window && pointer_window != _time_bars_canvas->get_window()) {
                in_track_canvas = false;
                return false;
        }
 
+       in_track_canvas = true;
+
        GdkEvent event;
        event.type = GDK_BUTTON_RELEASE;
-       event.button.x = wx;
-       event.button.y = wy;
+       event.button.x = x;
+       event.button.y = y;
+
+       where = window_event_frame (&event, 0, 0);
 
-       where = event_frame (&event, 0, 0);
        return true;
 }
 
 framepos_t
-Editor::event_frame (GdkEvent const * event, double* pcx, double* pcy) const
+Editor::window_event_frame (GdkEvent const * event, double* pcx, double* pcy) const
 {
-       using ArdourCanvas::Duple;
-       Duple d;
-       double cx, cy;
+       double x;
+       double y;
 
-       if (pcx == 0) {
-               pcx = &cx;
+       if (!gdk_event_get_coords (event, &x, &y)) {
+               return 0;
        }
-       if (pcy == 0) {
-               pcy = &cy;
-       }
-
-       *pcx = 0;
-       *pcy = 0;
 
-       /* The event coordinates will be window coordinates and we need canvas
-        * coordinates (units are pixels as with the window, but scrolling is taken into account)
+       /* event coordinates are in window units, so convert to canvas
+        * (i.e. account for scrolling)
         */
 
-       switch (event->type) {
-       case GDK_BUTTON_RELEASE:
-       case GDK_BUTTON_PRESS:
-       case GDK_2BUTTON_PRESS:
-       case GDK_3BUTTON_PRESS:
-               d = _track_canvas->window_to_canvas (Duple (event->button.x, event->button.y));
-               *pcx = d.x;
-               *pcy = d.y;
-               break;
-       case GDK_MOTION_NOTIFY:
-               d = _track_canvas->window_to_canvas (Duple (event->motion.x, event->motion.y));
-               *pcx = d.x;
-               *pcy = d.y;
-               break;
-       case GDK_ENTER_NOTIFY:
-       case GDK_LEAVE_NOTIFY:
-               d = _track_canvas->window_to_canvas (Duple (event->crossing.x, event->crossing.y));
+       ArdourCanvas::Duple d = _track_canvas->window_to_canvas (ArdourCanvas::Duple (x, y));
+
+       if (pcx) {
                *pcx = d.x;
+       }
+
+       if (pcy) {
                *pcy = d.y;
-               break;
-       case GDK_KEY_PRESS:
-       case GDK_KEY_RELEASE:
-               // need to get pointer for this to work
-               // d = _track_canvas->window_to_canvas (Duple (event->key.x, event->key.y));
-               *pcx = 0;
-               *pcy = 0;
-               break;
-       default:
-               warning << string_compose (_("Editor::event_frame() used on unhandled event type %1"), event->type) << endmsg;
-               break;
+       }
+
+       return pixel_to_frame (d.x);
+}
+
+framepos_t
+Editor::canvas_event_frame (GdkEvent const * event, double* pcx, double* pcy) const
+{
+       double x;
+       double y;
+
+       /* event coordinates are already in canvas units */
+
+       if (!gdk_event_get_coords (event, &x, &y)) {
+               cerr << "!NO c COORDS for event type " << event->type << endl;
+               return 0;
+       }
+
+       if (pcx) {
+               *pcx = x;
+       }
+
+       if (pcy) {
+               *pcy = y;
        }
 
        /* note that pixel_to_frame() never returns less than zero, so even if the pixel
@@ -189,7 +184,7 @@ Editor::event_frame (GdkEvent const * event, double* pcx, double* pcy) const
           the frame location is always positive.
        */
 
-       return pixel_to_frame (*pcx);
+       return pixel_to_frame (x);
 }
 
 Gdk::Cursor*
@@ -1086,7 +1081,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                                _drags->set (new RegionCreateDrag (this, item, parent), event);
                                        } else {
                                                /* See if there's a region before the click that we can extend, and extend it if so */
-                                               framepos_t const t = event_frame (event);
+                                               framepos_t const t = canvas_event_frame (event);
                                                boost::shared_ptr<Region> prev = pl->find_next_region (t, End, -1);
                                                if (!prev) {
                                                        _drags->set (new RegionCreateDrag (this, item, parent), event);
@@ -1124,7 +1119,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                                                                boost::shared_ptr<Playlist> pl = t->playlist ();
                                                                if (pl) {
 
-                                                                       boost::shared_ptr<Region> r = pl->top_region_at (event_frame (event));
+                                                                       boost::shared_ptr<Region> r = pl->top_region_at (canvas_event_frame (event));
                                                                        if (r) {
                                                                                RegionView* rv = rtv->view()->find_view (r);
                                                                                clicked_selection = select_range (rv->region()->position(), 
@@ -1316,9 +1311,9 @@ Editor::button_press_handler_2 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
 
        case MouseZoom:
                if (Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
-                       temporal_zoom_to_frame (false, event_frame (event));
+                       temporal_zoom_to_frame (false, canvas_event_frame (event));
                } else {
-                       temporal_zoom_to_frame (true, event_frame(event));
+                       temporal_zoom_to_frame (true, canvas_event_frame(event));
                }
                return true;
                break;
@@ -1411,7 +1406,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
 
        //not rolling, range mode click + join_play_range :  locate the PH here
        if ( !_drags->active () && !_session->transport_rolling() && ( effective_mouse_mode() == MouseRange ) && Config->get_always_play_range() ) {
-               framepos_t where = event_frame (event, 0, 0);
+               framepos_t where = canvas_event_frame (event, 0, 0);
                snap_to(where);
                _session->request_locate (where, false);
        }
@@ -1460,7 +1455,7 @@ Editor::button_release_dispatch (GdkEventButton* ev)
 bool
 Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
 {
-       framepos_t where = event_frame (event, 0, 0);
+       framepos_t where = canvas_event_frame (event, 0, 0);
        AutomationTimeAxisView* atv = 0;
 
         if (pre_press_cursor) {
index c4f084170abd1f757dbbba3650fb18a82ebfaa23..1e96f378a7c2cc0316a3fd40c6381890564a746f 100644 (file)
@@ -1964,20 +1964,17 @@ Editor::unhide_ranges ()
 void
 Editor::insert_region_list_drag (boost::shared_ptr<Region> region, int x, int y)
 {
-       double wx, wy;
        double cx, cy;
        framepos_t where;
        RouteTimeAxisView *rtv = 0;
        boost::shared_ptr<Playlist> playlist;
 
-       _track_canvas_viewport->window_to_canvas (x, y, wx, wy);
-
        GdkEvent event;
        event.type = GDK_BUTTON_RELEASE;
-       event.button.x = wx;
-       event.button.y = wy;
+       event.button.x = x;
+       event.button.y = y;
 
-       where = event_frame (&event, &cx, &cy);
+       where = window_event_frame (&event, &cx, &cy);
 
        if (where < leftmost_frame || where > leftmost_frame + current_page_frames()) {
                /* clearly outside canvas area */
@@ -2009,19 +2006,16 @@ Editor::insert_region_list_drag (boost::shared_ptr<Region> region, int x, int y)
 void
 Editor::insert_route_list_drag (boost::shared_ptr<Route> route, int x, int y)
 {
-       double wx, wy;
        double cx, cy;
        RouteTimeAxisView *dest_rtv = 0;
        RouteTimeAxisView *source_rtv = 0;
 
-       _track_canvas_viewport->window_to_canvas (x, y, wx, wy);
-
        GdkEvent event;
        event.type = GDK_BUTTON_RELEASE;
-       event.button.x = wx;
-       event.button.y = wy;
+       event.button.x = x;
+       event.button.y = y;
 
-       event_frame (&event, &cx, &cy);
+       window_event_frame (&event, &cx, &cy);
 
        std::pair<TimeAxisView*, int> const tv = trackview_by_y_position (cy);
        if (tv.first == 0) {
index b1fa984027ce0f5d28a863212c39d910ff3d52c6..6d7ddd05c11ef0e53b2cd68956a2c3a91303dcd8 100644 (file)
@@ -778,7 +778,7 @@ EditorSummary::set_editor_x (pair<double, double> x)
                
                double const nx = (
                        ((x.second - x.first) / _x_scale) /
-                       _editor->frame_to_unit (_editor->current_page_frames())
+                       _editor->frame_to_pixel (_editor->current_page_frames())
                        );
                
                if (nx != _editor->get_current_zoom ()) {
index e1adb6c8b6faa35f9d30e71ef18bdb63810b6890..4951a4e35a7707e5688d54fb1313f26c554d55ff 100644 (file)
@@ -58,8 +58,8 @@ Editor::update_video_timeline (bool flush)
 #if DEBUG
        framepos_t rightmost_frame = leftmost_frame + current_page_frames();
        std::cout << "VIDEO SCROLL: " << leftmost_frame << " -- " << rightmost_frame << std::endl;
-       std::cout << "SCROLL UNITS: " << frame_to_unit(leftmost_frame) << " -- " << frame_to_unit(rightmost_frame)
-                 << " = " << frame_to_unit(rightmost_frame) - frame_to_unit(leftmost_frame)
+       std::cout << "SCROLL UNITS: " << frame_to_pixel(leftmost_frame) << " -- " << frame_to_pixel(rightmost_frame)
+                 << " = " << frame_to_pixel(rightmost_frame) - frame_to_pixel(leftmost_frame)
                        << std::endl;
 #endif
 
index e9fcb9112ef0fa905b70576664f0bf3befb6c82e..ed65cc221b2b453d0640dbb26fc2f453a7415c14 100644 (file)
@@ -234,7 +234,7 @@ Marker::Marker (PublicEditor& ed, ArdourCanvas::Group& parent, guint32 rgba, con
        }
 
        frame_position = frame;
-       unit_position = editor.frame_to_unit (frame);
+       unit_position = editor.frame_to_pixel (frame);
        unit_position -= _shift;
 
        group = new ArdourCanvas::Group (&parent, ArdourCanvas::Duple (unit_position, 0));
@@ -429,7 +429,7 @@ Marker::setup_name_display ()
 void
 Marker::set_position (framepos_t frame)
 {
-       unit_position = editor.frame_to_unit (frame) - _shift;
+       unit_position = editor.frame_to_pixel (frame) - _shift;
        group->set_x_position (unit_position);
        frame_position = frame;
 }
index 89c75bdd948361f33ee6c0269e427030f36bb870..0c82d92d5e046a1f971ce94fc3f53b4161e7cf8e 100644 (file)
@@ -198,12 +198,9 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible {
        virtual void separate_region_from_selection () = 0;
 
        virtual void transition_to_rolling (bool fwd) = 0;
-       virtual framepos_t unit_to_frame (double unit) const = 0;
-       virtual double frame_to_unit (framepos_t frame) const = 0;
-       virtual double frame_to_unit (double frame) const = 0;
-       virtual double frame_to_unit_unrounded (framepos_t frame) const = 0;
        virtual framepos_t pixel_to_frame (double pixel) const = 0;
-       virtual gulong frame_to_pixel (framepos_t frame) const = 0;
+       virtual double frame_to_pixel (framepos_t frame) const = 0;
+       virtual double frame_to_pixel_unrounded (framepos_t frame) const = 0;
        virtual Selection& get_selection () const = 0;
        virtual Selection& get_cut_buffer () const = 0;
        virtual void track_mixer_selection () = 0;
index 4408b88f8618d7680a811f7a0551d051b0b4a9f2..122a44556404e174c0f8f25332eeeebcdfa7bd06 100644 (file)
@@ -856,8 +856,8 @@ TimeAxisView::show_selection (TimeSelection& ts)
 
                rect = get_selection_rect ((*i).id);
 
-               x1 = _editor.frame_to_unit (start);
-               x2 = _editor.frame_to_unit (start + cnt - 1);
+               x1 = _editor.frame_to_pixel (start);
+               x2 = _editor.frame_to_pixel (start + cnt - 1);
                y2 = current_height();
 
                rect->rect->set (ArdourCanvas::Rect (x1, 1, x2, y2));
index 418848898fad86e463f073a26eae0559773ba804..8e7100113e75db802ddc636f0600e9f4397fac68 100644 (file)
@@ -56,7 +56,7 @@ VideoImageFrame::VideoImageFrame (PublicEditor& ed, ArdourCanvas::Group& parent,
        printf("New VideoImageFrame (%ix%i) %s - %s\n", w, h, vsurl.c_str(), vfn.c_str());
 #endif
 
-       unit_position = editor.frame_to_unit (frame_position);
+       unit_position = editor.frame_to_pixel (frame_position);
        group = new ArdourCanvas::Group (_parent, ArdourCanvas::Duple(unit_position, 1.0));
        img_pixbuf = new ArdourCanvas::Pixbuf(group);
 
@@ -85,7 +85,7 @@ VideoImageFrame::~VideoImageFrame ()
 void
 VideoImageFrame::set_position (framepos_t frame)
 {
-       double new_unit_position = editor.frame_to_unit (frame);
+       double new_unit_position = editor.frame_to_pixel (frame);
        group->move (ArdourCanvas::Duple (new_unit_position - unit_position, 0.0));
        frame_position = frame;
        unit_position = new_unit_position;
index 5ddbe78d12bbf4bdd03eddbafce5e343b5ab49c7..5fc96d95f8813526bc9c1947b3eec29ea4a91c71 100644 (file)
@@ -302,7 +302,7 @@ VideoTimeLine::update_video_timeline()
                if (_session->timecode_frames_per_second() == 0 ) return;
        }
 
-       double frames_per_unit = editor->unit_to_frame(1.0);
+       double frames_per_unit = editor->pixel_to_frame(1.0);
        framepos_t leftmost_frame =  editor->leftmost_position();
 
        /* Outline: