summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2018-07-02 16:39:06 +0100
committerCarl Hetherington <cth@carlh.net>2018-07-02 16:39:06 +0100
commit220518a7bf41bfd9e9da852b4d5ac1461fdd0e1a (patch)
treec91fe6a4ee59e14052be26e742a23669e384e23d /src
parentf07a469603298049d12e1af9deda4ad830362e58 (diff)
Hacks to stop scrolling track names.
Diffstat (limited to 'src')
-rw-r--r--src/wx/timeline.cc67
-rw-r--r--src/wx/timeline.h12
-rw-r--r--src/wx/timeline_content_view.cc2
-rw-r--r--src/wx/timeline_labels_view.cc8
-rw-r--r--src/wx/timeline_time_axis_view.cc6
-rw-r--r--src/wx/timeline_view.cc2
6 files changed, 57 insertions, 40 deletions
diff --git a/src/wx/timeline.cc b/src/wx/timeline.cc
index 42fb9187f..2e4de2274 100644
--- a/src/wx/timeline.cc
+++ b/src/wx/timeline.cc
@@ -54,7 +54,9 @@ using boost::bind;
using boost::optional;
Timeline::Timeline (wxWindow* parent, ContentPanel* cp, shared_ptr<Film> film)
- : wxScrolledCanvas (parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE)
+ : wxPanel (parent, wxID_ANY)
+ , _labels_panel (new wxPanel (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)
, _time_axis_view (new TimelineTimeAxisView (*this, 64))
@@ -71,36 +73,56 @@ Timeline::Timeline (wxWindow* parent, ContentPanel* cp, shared_ptr<Film> film)
, _y_scroll_rate (16)
{
#ifndef __WXOSX__
- SetDoubleBuffered (true);
+ _labels_panel->SetDoubleBuffered (true);
+ _main_canvas->SetDoubleBuffered (true);
#endif
- Bind (wxEVT_PAINT, boost::bind (&Timeline::paint, this));
- Bind (wxEVT_LEFT_DOWN, boost::bind (&Timeline::left_down, this, _1));
- Bind (wxEVT_LEFT_UP, boost::bind (&Timeline::left_up, this, _1));
- Bind (wxEVT_RIGHT_DOWN, boost::bind (&Timeline::right_down, this, _1));
- Bind (wxEVT_MOTION, boost::bind (&Timeline::mouse_moved, this, _1));
- Bind (wxEVT_SIZE, boost::bind (&Timeline::resized, this));
+ wxSizer* sizer = new wxBoxSizer (wxHORIZONTAL);
+ sizer->Add (_labels_panel, 0, wxEXPAND);
+ sizer->Add (_main_canvas, 1, wxEXPAND);
+ SetSizer (sizer);
+
+ _labels_panel->Bind (wxEVT_PAINT, boost::bind (&Timeline::paint_labels, this));
+ _main_canvas->Bind (wxEVT_PAINT, boost::bind (&Timeline::paint_main, this));
+ _main_canvas->Bind (wxEVT_LEFT_DOWN, boost::bind (&Timeline::left_down, this, _1));
+ _main_canvas->Bind (wxEVT_LEFT_UP, boost::bind (&Timeline::left_up, this, _1));
+ _main_canvas->Bind (wxEVT_RIGHT_DOWN, boost::bind (&Timeline::right_down, this, _1));
+ _main_canvas->Bind (wxEVT_MOTION, boost::bind (&Timeline::mouse_moved, this, _1));
+ _main_canvas->Bind (wxEVT_SIZE, boost::bind (&Timeline::resized, this));
film_changed (Film::CONTENT);
SetMinSize (wxSize (640, 4 * track_height() + 96));
- _tracks_position = Position<int> (_labels_view->bbox().width, 32);
-
_film_changed_connection = film->Changed.connect (bind (&Timeline::film_changed, this, _1));
_film_content_changed_connection = film->ContentChanged.connect (bind (&Timeline::film_content_changed, this, _2, _3));
- _pixels_per_second = max (0.01, static_cast<double>(640 - tracks_position().x * 2) / film->length().seconds ());
+ _pixels_per_second = max (0.01, static_cast<double>(640) / film->length().seconds ());
setup_scrollbars ();
- EnableScrolling (true, true);
+ _main_canvas->EnableScrolling (true, true);
+}
+
+void
+Timeline::paint_labels ()
+{
+ wxPaintDC dc (this);
+
+ wxGraphicsContext* gc = wxGraphicsContext::Create (dc);
+ if (!gc) {
+ return;
+ }
+
+ _labels_view->paint (gc, list<dcpomatic::Rect<int> >());
+
+ delete gc;
}
void
-Timeline::paint ()
+Timeline::paint_main ()
{
wxPaintDC dc (this);
- DoPrepareDC (dc);
+ _main_canvas->DoPrepareDC (dc);
wxGraphicsContext* gc = wxGraphicsContext::Create (dc);
if (!gc) {
@@ -108,7 +130,7 @@ Timeline::paint ()
}
int vsx, vsy;
- GetViewStart (&vsx, &vsy);
+ _main_canvas->GetViewStart (&vsx, &vsy);
gc->Translate (-vsx * _x_scroll_rate, -vsy * _y_scroll_rate);
gc->SetAntialiasMode (wxANTIALIAS_DEFAULT);
@@ -173,7 +195,6 @@ Timeline::recreate_views ()
_views.clear ();
_views.push_back (_time_axis_view);
_views.push_back (_reels_view);
- _views.push_back (_labels_view);
BOOST_FOREACH (shared_ptr<Content> i, film->content ()) {
if (i->video) {
@@ -355,8 +376,8 @@ Timeline::setup_scrollbars ()
if (!film || !_pixels_per_second) {
return;
}
- SetVirtualSize (*_pixels_per_second * film->length().seconds(), tracks() * track_height() + 96);
- SetScrollRate (_x_scroll_rate, _y_scroll_rate);
+ _main_canvas->SetVirtualSize (*_pixels_per_second * film->length().seconds(), tracks() * track_height() + 96);
+ _main_canvas->SetScrollRate (_x_scroll_rate, _y_scroll_rate);
}
shared_ptr<TimelineView>
@@ -486,18 +507,16 @@ Timeline::left_up_zoom (wxMouseEvent& ev)
_zoom_point = ev.GetPosition ();
int vsx, vsy;
- GetViewStart (&vsx, &vsy);
+ _main_canvas->GetViewStart (&vsx, &vsy);
wxPoint top_left(min(_down_point.x, _zoom_point->x), min(_down_point.y, _zoom_point->y));
wxPoint bottom_right(max(_down_point.x, _zoom_point->x), max(_down_point.y, _zoom_point->y));
- DCPTime time_left = DCPTime::from_seconds((top_left.x + vsx - _tracks_position.x) / *_pixels_per_second);
- DCPTime time_right = DCPTime::from_seconds((bottom_right.x + vsx - _tracks_position.x) / *_pixels_per_second);
+ DCPTime time_left = DCPTime::from_seconds((top_left.x + vsx) / *_pixels_per_second);
+ DCPTime time_right = DCPTime::from_seconds((bottom_right.x + vsx) / *_pixels_per_second);
_pixels_per_second = GetSize().GetWidth() / (time_right.seconds() - time_left.seconds());
- cout << "Zoom range " << to_string(time_left) << " " << to_string(time_right) << " " << *_pixels_per_second << "\n";
setup_scrollbars ();
- Scroll (time_left.seconds() * *_pixels_per_second / _x_scroll_rate, wxDefaultCoord);
- cout << "Offset " << (time_left.seconds() * *_pixels_per_second / _x_scroll_rate) << "\n";
+ _main_canvas->Scroll (time_left.seconds() * *_pixels_per_second / _x_scroll_rate, wxDefaultCoord);
_zoom_point = optional<wxPoint> ();
Refresh ();
diff --git a/src/wx/timeline.h b/src/wx/timeline.h
index 375a837a8..3175d028c 100644
--- a/src/wx/timeline.h
+++ b/src/wx/timeline.h
@@ -35,7 +35,7 @@ class TimelineTimeAxisView;
class TimelineReelsView;
class TimelineLabelsView;
-class Timeline : public wxScrolledCanvas
+class Timeline : public wxPanel
{
public:
Timeline (wxWindow *, ContentPanel *, boost::shared_ptr<Film>);
@@ -56,10 +56,6 @@ public:
return _pixels_per_second;
}
- Position<int> tracks_position () const {
- return _tracks_position;
- }
-
int tracks () const;
void set_snap (bool s) {
@@ -82,7 +78,8 @@ public:
}
private:
- void paint ();
+ void paint_labels ();
+ void paint_main ();
void left_down (wxMouseEvent &);
void left_down_select (wxMouseEvent &);
void left_up (wxMouseEvent &);
@@ -107,6 +104,8 @@ private:
ContentList selected_content () const;
void maybe_snap (DCPTime a, DCPTime b, boost::optional<DCPTime>& nearest_distance) const;
+ wxPanel* _labels_panel;
+ wxScrolledCanvas* _main_canvas;
ContentPanel* _content_panel;
boost::weak_ptr<Film> _film;
TimelineViewList _views;
@@ -125,7 +124,6 @@ private:
bool _snap;
std::list<DCPTime> _start_snaps;
std::list<DCPTime> _end_snaps;
- Position<int> _tracks_position;
Tool _tool;
int _x_scroll_rate;
int _y_scroll_rate;
diff --git a/src/wx/timeline_content_view.cc b/src/wx/timeline_content_view.cc
index 5877aacbd..eacfbfd4a 100644
--- a/src/wx/timeline_content_view.cc
+++ b/src/wx/timeline_content_view.cc
@@ -156,7 +156,7 @@ TimelineContentView::do_paint (wxGraphicsContext* gc, list<dcpomatic::Rect<int>
int
TimelineContentView::y_pos (int t) const
{
- return _timeline.tracks_position().y + t * _timeline.track_height();
+ return t * _timeline.track_height();
}
void
diff --git a/src/wx/timeline_labels_view.cc b/src/wx/timeline_labels_view.cc
index ee1b19489..3fe315aaf 100644
--- a/src/wx/timeline_labels_view.cc
+++ b/src/wx/timeline_labels_view.cc
@@ -66,23 +66,23 @@ TimelineLabelsView::do_paint (wxGraphicsContext* gc, list<dcpomatic::Rect<int> >
int fy = 0;
int ty = _threed ? 2 * h : h;
- gc->DrawText (_("Video"), 0, _timeline.tracks_position().y + (ty + fy) / 2 - 8);
+ gc->DrawText (_("Video"), 0, (ty + fy) / 2 - 8);
fy = ty;
if (_subtitle_tracks) {
ty = fy + _subtitle_tracks * h;
- gc->DrawText (_("Subtitles"), 0, _timeline.tracks_position().y + (ty + fy) / 2 - 8);
+ gc->DrawText (_("Subtitles"), 0, (ty + fy) / 2 - 8);
fy = ty;
}
if (_atmos) {
ty = fy + h;
- gc->DrawText (_("Atmos"), 0, _timeline.tracks_position().y + (ty + fy) / 2 - 8);
+ gc->DrawText (_("Atmos"), 0, (ty + fy) / 2 - 8);
fy = ty;
}
ty = _timeline.tracks() * h;
- gc->DrawText (_("Audio"), 0, _timeline.tracks_position().y + (ty + fy) / 2 - 8);
+ gc->DrawText (_("Audio"), 0, (ty + fy) / 2 - 8);
}
void
diff --git a/src/wx/timeline_time_axis_view.cc b/src/wx/timeline_time_axis_view.cc
index 1947faa0b..c8808a62f 100644
--- a/src/wx/timeline_time_axis_view.cc
+++ b/src/wx/timeline_time_axis_view.cc
@@ -36,7 +36,7 @@ TimelineTimeAxisView::TimelineTimeAxisView (Timeline& tl, int y)
dcpomatic::Rect<int>
TimelineTimeAxisView::bbox () const
{
- return dcpomatic::Rect<int> (_timeline.tracks_position().x, _y - 4, _timeline.width(), 24);
+ return dcpomatic::Rect<int> (0, _y - 4, _timeline.width(), 24);
}
void
@@ -60,7 +60,7 @@ TimelineTimeAxisView::do_paint (wxGraphicsContext* gc, list<dcpomatic::Rect<int>
double const mark_interval = calculate_mark_interval (rint (128 / pps));
wxGraphicsPath path = gc->CreatePath ();
- path.MoveToPoint (_timeline.tracks_position().x, _y);
+ path.MoveToPoint (0, _y);
path.AddLineToPoint (_timeline.width(), _y);
gc->StrokePath (path);
@@ -88,7 +88,7 @@ TimelineTimeAxisView::do_paint (wxGraphicsContext* gc, list<dcpomatic::Rect<int>
wxDouble str_leading;
gc->GetTextExtent (str, &str_width, &str_height, &str_descent, &str_leading);
- int const tx = _timeline.tracks_position().x + t.seconds() * pps;
+ int const tx = t.seconds() * pps;
if ((tx + str_width) < _timeline.width()) {
gc->DrawText (str, time_x (t), _y + 16);
}
diff --git a/src/wx/timeline_view.cc b/src/wx/timeline_view.cc
index e8b3856ad..bb6ab6034 100644
--- a/src/wx/timeline_view.cc
+++ b/src/wx/timeline_view.cc
@@ -49,5 +49,5 @@ TimelineView::force_redraw ()
int
TimelineView::time_x (DCPTime t) const
{
- return _timeline.tracks_position().x + t.seconds() * _timeline.pixels_per_second().get_value_or (0);
+ return t.seconds() * _timeline.pixels_per_second().get_value_or (0);
}