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/wx/timeline.cc | |
| parent | 9b36e81dba949ba29a6cfb89f11072317a0dc7c5 (diff) | |
Add playhead line to timeline (#1563).
Diffstat (limited to 'src/wx/timeline.cc')
| -rw-r--r-- | src/wx/timeline.cc | 26 |
1 files changed, 25 insertions, 1 deletions
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; } |
