summaryrefslogtreecommitdiff
path: root/src/wx/timeline.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-05-31 22:26:42 +0100
committerCarl Hetherington <cth@carlh.net>2019-05-31 22:26:42 +0100
commit43b5ff1d2dc872f9029a7e59a85af59dbad8536f (patch)
tree58756fb095c333a62d9863f3b72c10f46ea96e39 /src/wx/timeline.cc
parent9b36e81dba949ba29a6cfb89f11072317a0dc7c5 (diff)
Add playhead line to timeline (#1563).
Diffstat (limited to 'src/wx/timeline.cc')
-rw-r--r--src/wx/timeline.cc26
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;
}