summaryrefslogtreecommitdiff
path: root/src/wx/timeline.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2018-07-04 00:51:31 +0100
committerCarl Hetherington <cth@carlh.net>2018-07-04 00:51:31 +0100
commitaaaa51f6d9eda60ab3b3d182c6d2a7a5bda375aa (patch)
tree9a8a1ec74936fb47c4700d34da6e63cd82fe0f84 /src/wx/timeline.cc
parentbeddaeab9011e745dcac9732f4e8de3f91bd81a5 (diff)
Add zoom-all button.
Diffstat (limited to 'src/wx/timeline.cc')
-rw-r--r--src/wx/timeline.cc65
1 files changed, 51 insertions, 14 deletions
diff --git a/src/wx/timeline.cc b/src/wx/timeline.cc
index 6fac62727..a0bf50f05 100644
--- a/src/wx/timeline.cc
+++ b/src/wx/timeline.cc
@@ -55,7 +55,7 @@ using boost::optional;
/* 3 hours in 640 pixels */
double const Timeline::_minimum_pixels_per_second = 640.0 / (60 * 60 * 3);
-int const Timeline::_minimum_track_height = 16;
+int const Timeline::_minimum_pixels_per_track = 16;
Timeline::Timeline (wxWindow* parent, ContentPanel* cp, shared_ptr<Film> film)
: wxPanel (parent, wxID_ANY)
@@ -75,7 +75,7 @@ Timeline::Timeline (wxWindow* parent, ContentPanel* cp, shared_ptr<Film> film)
, _tool (SELECT)
, _x_scroll_rate (16)
, _y_scroll_rate (16)
- , _track_height (48)
+ , _pixels_per_track (48)
{
#ifndef __WXOSX__
_labels_canvas->SetDoubleBuffered (true);
@@ -99,18 +99,24 @@ Timeline::Timeline (wxWindow* parent, ContentPanel* cp, shared_ptr<Film> film)
film_changed (Film::CONTENT);
- SetMinSize (wxSize (640, 4 * track_height() + 96));
+ SetMinSize (wxSize (640, 4 * pixels_per_track() + 96));
_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 (_minimum_pixels_per_second, static_cast<double>(640) / film->length().seconds ());
+ set_pixels_per_second (static_cast<double>(640) / film->length().seconds ());
setup_scrollbars ();
_labels_canvas->ShowScrollbars (wxSHOW_SB_NEVER, wxSHOW_SB_NEVER);
}
void
+Timeline::set_pixels_per_second (double pps)
+{
+ _pixels_per_second = max (_minimum_pixels_per_second, pps);
+}
+
+void
Timeline::paint_labels ()
{
wxPaintDC dc (_labels_canvas);
@@ -387,9 +393,9 @@ Timeline::setup_scrollbars ()
if (!film || !_pixels_per_second) {
return;
}
- _labels_canvas->SetVirtualSize (_labels_view->bbox().width, tracks() * track_height() + 96);
+ _labels_canvas->SetVirtualSize (_labels_view->bbox().width, tracks() * pixels_per_track() + 96);
_labels_canvas->SetScrollRate (_x_scroll_rate, _y_scroll_rate);
- _main_canvas->SetVirtualSize (*_pixels_per_second * film->length().seconds(), tracks() * track_height() + 96);
+ _main_canvas->SetVirtualSize (*_pixels_per_second * film->length().seconds(), tracks() * pixels_per_track() + 96);
_main_canvas->SetScrollRate (_x_scroll_rate, _y_scroll_rate);
}
@@ -422,6 +428,7 @@ Timeline::left_down (wxMouseEvent& ev)
left_down_select (ev);
break;
case ZOOM:
+ case ZOOM_ALL:
/* Nothing to do */
break;
}
@@ -492,6 +499,8 @@ Timeline::left_up (wxMouseEvent& ev)
case ZOOM:
left_up_zoom (ev);
break;
+ case ZOOM_ALL:
+ break;
}
}
@@ -532,21 +541,27 @@ Timeline::left_up_zoom (wxMouseEvent& ev)
DCPTime const time_left = DCPTime::from_seconds((top_left.x + vsx) / *_pixels_per_second);
DCPTime const time_right = DCPTime::from_seconds((bottom_right.x + vsx) / *_pixels_per_second);
- _pixels_per_second = max (_minimum_pixels_per_second, double(GetSize().GetWidth()) / (time_right.seconds() - time_left.seconds()));
+ set_pixels_per_second (double(GetSize().GetWidth()) / (time_right.seconds() - time_left.seconds()));
- double const tracks_top = double(top_left.y) / _track_height;
- double const tracks_bottom = double(bottom_right.y) / _track_height;
- _track_height = max(_minimum_track_height, int(lrint(GetSize().GetHeight() / (tracks_bottom - tracks_top))));
+ double const tracks_top = double(top_left.y) / _pixels_per_track;
+ double const tracks_bottom = double(bottom_right.y) / _pixels_per_track;
+ set_pixels_per_track (lrint(GetSize().GetHeight() / (tracks_bottom - tracks_top)));
setup_scrollbars ();
- _main_canvas->Scroll (time_left.seconds() * *_pixels_per_second / _x_scroll_rate, tracks_top * _track_height / _y_scroll_rate);
- _labels_canvas->Scroll (0, tracks_top * _track_height / _y_scroll_rate);
+ _main_canvas->Scroll (time_left.seconds() * *_pixels_per_second / _x_scroll_rate, tracks_top * _pixels_per_track / _y_scroll_rate);
+ _labels_canvas->Scroll (0, tracks_top * _pixels_per_track / _y_scroll_rate);
_zoom_point = optional<wxPoint> ();
Refresh ();
}
void
+Timeline::set_pixels_per_track (int h)
+{
+ _pixels_per_track = max(_minimum_pixels_per_track, h);
+}
+
+void
Timeline::mouse_moved (wxMouseEvent& ev)
{
switch (_tool) {
@@ -556,6 +571,8 @@ Timeline::mouse_moved (wxMouseEvent& ev)
case ZOOM:
mouse_moved_zoom (ev);
break;
+ case ZOOM_ALL:
+ break;
}
}
@@ -589,11 +606,13 @@ Timeline::right_down (wxMouseEvent& ev)
break;
case ZOOM:
/* Zoom out */
- _pixels_per_second = max (_minimum_pixels_per_second, *_pixels_per_second / 2);
- _track_height = max (_minimum_track_height, _track_height / 2);
+ set_pixels_per_second (*_pixels_per_second / 2);
+ set_pixels_per_track (_pixels_per_track / 2);
setup_scrollbars ();
Refresh ();
break;
+ case ZOOM_ALL:
+ break;
}
}
@@ -776,3 +795,21 @@ Timeline::scrolled (wxScrollWinEvent& ev)
}
ev.Skip ();
}
+
+void
+Timeline::tool_clicked (Tool t)
+{
+ switch (t) {
+ case ZOOM:
+ case SELECT:
+ _tool = t;
+ break;
+ case ZOOM_ALL:
+ shared_ptr<Film> film = _film.lock ();
+ DCPOMATIC_ASSERT (film);
+ set_pixels_per_second ((_main_canvas->GetSize().GetWidth() - 32) / film->length().seconds());
+ set_pixels_per_track ((_main_canvas->GetSize().GetHeight() - tracks_y_offset() - _time_axis_view->bbox().height - 32) / _tracks);
+ Refresh ();
+ break;
+ }
+}