summaryrefslogtreecommitdiff
path: root/src
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
parent9b36e81dba949ba29a6cfb89f11072317a0dc7c5 (diff)
Add playhead line to timeline (#1563).
Diffstat (limited to 'src')
-rw-r--r--src/wx/content_panel.cc2
-rw-r--r--src/wx/timeline.cc26
-rw-r--r--src/wx/timeline.h6
-rw-r--r--src/wx/timeline_dialog.cc7
-rw-r--r--src/wx/timeline_dialog.h4
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);