diff options
| author | Carl Hetherington <cth@carlh.net> | 2019-05-31 22:26:42 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2019-05-31 22:26:42 +0100 |
| commit | 43b5ff1d2dc872f9029a7e59a85af59dbad8536f (patch) | |
| tree | 58756fb095c333a62d9863f3b72c10f46ea96e39 /src | |
| parent | 9b36e81dba949ba29a6cfb89f11072317a0dc7c5 (diff) | |
Add playhead line to timeline (#1563).
Diffstat (limited to 'src')
| -rw-r--r-- | src/wx/content_panel.cc | 2 | ||||
| -rw-r--r-- | src/wx/timeline.cc | 26 | ||||
| -rw-r--r-- | src/wx/timeline.h | 6 | ||||
| -rw-r--r-- | src/wx/timeline_dialog.cc | 7 | ||||
| -rw-r--r-- | src/wx/timeline_dialog.h | 4 |
5 files changed, 37 insertions, 8 deletions
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> film) +Timeline::Timeline (wxWindow* parent, ContentPanel* cp, shared_ptr<Film> film, weak_ptr<FilmViewer> 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,11 +116,21 @@ Timeline::Timeline (wxWindow* parent, ContentPanel* cp, shared_ptr<Film> 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<FilmViewer> 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) { _pixels_per_second = max (_minimum_pixels_per_second, pps); @@ -195,6 +207,18 @@ Timeline::paint_main () ); } + /* Playhead */ + + shared_ptr<FilmViewer> 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<Film>); + Timeline (wxWindow *, ContentPanel *, boost::shared_ptr<Film>, boost::weak_ptr<FilmViewer> viewer); boost::shared_ptr<const Film> 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<TimelineView> event_to_view (wxMouseEvent &); TimelineContentViewList selected_views () const; @@ -113,6 +115,7 @@ private: wxScrolledCanvas* _main_canvas; ContentPanel* _content_panel; boost::weak_ptr<Film> _film; + boost::weak_ptr<FilmViewer> _viewer; TimelineViewList _views; boost::shared_ptr<TimelineTimeAxisView> _time_axis_view; boost::shared_ptr<TimelineReelsView> _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 <cth@carlh.net> + Copyright (C) 2013-2019 Carl Hetherington <cth@carlh.net> 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> film) +TimelineDialog::TimelineDialog (ContentPanel* cp, shared_ptr<Film> film, weak_ptr<FilmViewer> viewer) : wxDialog ( cp->window(), wxID_ANY, @@ -51,7 +52,7 @@ TimelineDialog::TimelineDialog (ContentPanel* cp, shared_ptr<Film> 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 <cth@carlh.net> + Copyright (C) 2013-2019 Carl Hetherington <cth@carlh.net> This file is part of DCP-o-matic. @@ -28,7 +28,7 @@ class Playlist; class TimelineDialog : public wxDialog { public: - TimelineDialog (ContentPanel *, boost::shared_ptr<Film>); + TimelineDialog (ContentPanel *, boost::shared_ptr<Film>, boost::weak_ptr<FilmViewer> viewer); void set_selection (ContentList selection); |
