X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Ftimeline.cc;h=9f71847f5c626dfb7e39690c91010e19d4f54252;hb=0b94724919f01edc7fc91e899ef179a7d94da039;hp=cac9318cca2eac486aee8ce30cb40c87f08a872f;hpb=43b5ff1d2dc872f9029a7e59a85af59dbad8536f;p=dcpomatic.git diff --git a/src/wx/timeline.cc b/src/wx/timeline.cc index cac9318cc..9f71847f5 100644 --- a/src/wx/timeline.cc +++ b/src/wx/timeline.cc @@ -82,6 +82,7 @@ Timeline::Timeline (wxWindow* parent, ContentPanel* cp, shared_ptr film, w , _y_scroll_rate (16) , _pixels_per_track (48) , _first_resize (true) + , _timer (this) { #ifndef __WXOSX__ _labels_canvas->SetDoubleBuffered (true); @@ -116,16 +117,15 @@ Timeline::Timeline (wxWindow* parent, ContentPanel* cp, shared_ptr film, w _film_changed_connection = film->Change.connect (bind (&Timeline::film_change, this, _1, _2)); _film_content_change_connection = film->ContentChange.connect (bind (&Timeline::film_content_change, this, _1, _3, _4)); - shared_ptr vp = viewer.lock (); - DCPOMATIC_ASSERT (vp); - _viewer_position_change_connection = vp->PositionChanged.connect (bind(&Timeline::position_change, this)); + Bind (wxEVT_TIMER, boost::bind(&Timeline::update_playhead, this)); + _timer.Start (200, wxTIMER_CONTINUOUS); setup_scrollbars (); _labels_canvas->ShowScrollbars (wxSHOW_SB_NEVER, wxSHOW_SB_NEVER); } void -Timeline::position_change () +Timeline::update_playhead () { Refresh (); } @@ -478,7 +478,11 @@ Timeline::event_to_view (wxMouseEvent& ev) { /* Search backwards through views so that we find the uppermost one first */ TimelineViewList::reverse_iterator i = _views.rbegin(); - Position const p (ev.GetX(), ev.GetY()); + + int vsx, vsy; + _main_canvas->GetViewStart (&vsx, &vsy); + Position const p (ev.GetX() + vsx * _x_scroll_rate, ev.GetY() + vsy * _y_scroll_rate); + while (i != _views.rend() && !(*i)->bbox().contains (p)) { shared_ptr cv = dynamic_pointer_cast (*i); ++i;