diff options
| author | Carl Hetherington <cth@carlh.net> | 2018-07-04 00:51:31 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2018-07-04 00:51:31 +0100 |
| commit | aaaa51f6d9eda60ab3b3d182c6d2a7a5bda375aa (patch) | |
| tree | 9a8a1ec74936fb47c4700d34da6e63cd82fe0f84 /src/wx/timeline.cc | |
| parent | beddaeab9011e745dcac9732f4e8de3f91bd81a5 (diff) | |
Add zoom-all button.
Diffstat (limited to 'src/wx/timeline.cc')
| -rw-r--r-- | src/wx/timeline.cc | 65 |
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; + } +} |
