From: Carl Hetherington Date: Fri, 31 May 2019 21:26:42 +0000 (+0100) Subject: Add playhead line to timeline (#1563). X-Git-Tag: v2.15.6~22 X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=43b5ff1d2dc872f9029a7e59a85af59dbad8536f Add playhead line to timeline (#1563). --- diff --git a/src/wx/content_panel.cc b/src/wx/content_panel.cc index 72ef0e9eb..41a18f4b4 100644 --- a/src/wx/content_panel.cc +++ b/src/wx/content_panel.cc @@ -558,7 +558,7 @@ ContentPanel::timeline_clicked () _timeline_dialog = 0; } - _timeline_dialog = new TimelineDialog (this, _film); + _timeline_dialog = new TimelineDialog (this, _film, _film_viewer); _timeline_dialog->set_selection (selected()); _timeline_dialog->Show (); } diff --git a/src/wx/timeline.cc b/src/wx/timeline.cc index 2c510efb5..cac9318cc 100644 --- a/src/wx/timeline.cc +++ b/src/wx/timeline.cc @@ -29,6 +29,7 @@ #include "timeline_atmos_content_view.h" #include "content_panel.h" #include "wx_util.h" +#include "film_viewer.h" #include "lib/film.h" #include "lib/playlist.h" #include "lib/image_content.h" @@ -60,12 +61,13 @@ using namespace dcpomatic; double const Timeline::_minimum_pixels_per_second = 640.0 / (60 * 60 * 3); int const Timeline::_minimum_pixels_per_track = 16; -Timeline::Timeline (wxWindow* parent, ContentPanel* cp, shared_ptr film) +Timeline::Timeline (wxWindow* parent, ContentPanel* cp, shared_ptr film, weak_ptr viewer) : wxPanel (parent, wxID_ANY) , _labels_canvas (new wxScrolledCanvas (this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE)) , _main_canvas (new wxScrolledCanvas (this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE)) , _content_panel (cp) , _film (film) + , _viewer (viewer) , _time_axis_view (new TimelineTimeAxisView (*this, 64)) , _reels_view (new TimelineReelsView (*this, 32)) , _labels_view (new TimelineLabelsView (*this)) @@ -114,10 +116,20 @@ Timeline::Timeline (wxWindow* parent, ContentPanel* cp, shared_ptr film) _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)); + setup_scrollbars (); _labels_canvas->ShowScrollbars (wxSHOW_SB_NEVER, wxSHOW_SB_NEVER); } +void +Timeline::position_change () +{ + Refresh (); +} + void Timeline::set_pixels_per_second (double pps) { @@ -195,6 +207,18 @@ Timeline::paint_main () ); } + /* Playhead */ + + shared_ptr vp = _viewer.lock (); + DCPOMATIC_ASSERT (vp); + + gc->SetPen (*wxRED_PEN); + wxGraphicsPath path = gc->CreatePath (); + double const ph = vp->position().seconds() * pixels_per_second().get_value_or(0); + path.MoveToPoint (ph, 0); + path.AddLineToPoint (ph, pixels_per_track() * _tracks + 32); + gc->StrokePath (path); + delete gc; } diff --git a/src/wx/timeline.h b/src/wx/timeline.h index 84cb870f2..ef887dab8 100644 --- a/src/wx/timeline.h +++ b/src/wx/timeline.h @@ -34,11 +34,12 @@ class TimelineView; class TimelineTimeAxisView; class TimelineReelsView; class TimelineLabelsView; +class FilmViewer; class Timeline : public wxPanel { public: - Timeline (wxWindow *, ContentPanel *, boost::shared_ptr); + Timeline (wxWindow *, ContentPanel *, boost::shared_ptr, boost::weak_ptr viewer); boost::shared_ptr film () const; @@ -103,6 +104,7 @@ private: void set_pixels_per_second (double pps); void set_pixels_per_track (int h); void zoom_all (); + void position_change (); boost::shared_ptr event_to_view (wxMouseEvent &); TimelineContentViewList selected_views () const; @@ -113,6 +115,7 @@ private: wxScrolledCanvas* _main_canvas; ContentPanel* _content_panel; boost::weak_ptr _film; + boost::weak_ptr _viewer; TimelineViewList _views; boost::shared_ptr _time_axis_view; boost::shared_ptr _reels_view; @@ -140,4 +143,5 @@ private: boost::signals2::scoped_connection _film_changed_connection; boost::signals2::scoped_connection _film_content_change_connection; + boost::signals2::scoped_connection _viewer_position_change_connection; }; diff --git a/src/wx/timeline_dialog.cc b/src/wx/timeline_dialog.cc index 3af86b707..80686dc17 100644 --- a/src/wx/timeline_dialog.cc +++ b/src/wx/timeline_dialog.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2018 Carl Hetherington + Copyright (C) 2013-2019 Carl Hetherington This file is part of DCP-o-matic. @@ -33,8 +33,9 @@ using std::list; using std::cout; using std::string; using boost::shared_ptr; +using boost::weak_ptr; -TimelineDialog::TimelineDialog (ContentPanel* cp, shared_ptr film) +TimelineDialog::TimelineDialog (ContentPanel* cp, shared_ptr film, weak_ptr viewer) : wxDialog ( cp->window(), wxID_ANY, @@ -51,7 +52,7 @@ TimelineDialog::TimelineDialog (ContentPanel* cp, shared_ptr film) #endif ) , _film (film) - , _timeline (this, cp, film) + , _timeline (this, cp, film, viewer) { wxBoxSizer* sizer = new wxBoxSizer (wxVERTICAL); diff --git a/src/wx/timeline_dialog.h b/src/wx/timeline_dialog.h index 1aff36c8c..62649a5f2 100644 --- a/src/wx/timeline_dialog.h +++ b/src/wx/timeline_dialog.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2016 Carl Hetherington + Copyright (C) 2013-2019 Carl Hetherington This file is part of DCP-o-matic. @@ -28,7 +28,7 @@ class Playlist; class TimelineDialog : public wxDialog { public: - TimelineDialog (ContentPanel *, boost::shared_ptr); + TimelineDialog (ContentPanel *, boost::shared_ptr, boost::weak_ptr viewer); void set_selection (ContentList selection);