#include "lib/film.h"
#include "lib/image_content.h"
#include "lib/playlist.h"
-#include "lib/scope_guard.h"
#include "lib/text_content.h"
#include "lib/timer.h"
#include "lib/video_content.h"
+#include <dcp/scope_guard.h>
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
#include <wx/graphics.h>
_main_canvas->Bind (wxEVT_SCROLLWIN_PAGEDOWN, boost::bind (&Timeline::scrolled, this, _1));
_main_canvas->Bind (wxEVT_SCROLLWIN_THUMBTRACK, boost::bind (&Timeline::scrolled, this, _1));
- film_change (ChangeType::DONE, Film::Property::CONTENT);
+ film_change(ChangeType::DONE, FilmProperty::CONTENT);
SetMinSize (wxSize (640, 4 * pixels_per_track() + 96));
return;
}
- ScopeGuard sg = [gc]() { delete gc; };
+ dcp::ScopeGuard sg = [gc]() { delete gc; };
int vsx, vsy;
_labels_canvas->GetViewStart (&vsx, &vsy);
Timeline::paint_main ()
{
wxPaintDC dc (_main_canvas);
+ dc.Clear();
auto film = _film.lock();
if (film->content().empty()) {
return;
}
- ScopeGuard sg = [gc]() { delete gc; };
-
- int vsx, vsy;
- _main_canvas->GetViewStart (&vsx, &vsy);
- gc->Translate (-vsx * _x_scroll_rate, -vsy * _y_scroll_rate);
+ dcp::ScopeGuard sg = [gc]() { delete gc; };
gc->SetAntialiasMode (wxANTIALIAS_DEFAULT);
}
if (_zoom_point) {
- /* Translate back as _down_point and _zoom_point do not take scroll into account */
- gc->Translate (vsx * _x_scroll_rate, vsy * _y_scroll_rate);
gc->SetPen(gui_is_dark() ? *wxWHITE_PEN : *wxBLACK_PEN);
gc->SetBrush (*wxTRANSPARENT_BRUSH);
gc->DrawRectangle (
void
-Timeline::film_change (ChangeType type, Film::Property p)
+Timeline::film_change(ChangeType type, FilmProperty p)
{
if (type != ChangeType::DONE) {
return;
}
- if (p == Film::Property::CONTENT || p == Film::Property::REEL_TYPE || p == Film::Property::REEL_LENGTH) {
+ if (p == FilmProperty::CONTENT || p == FilmProperty::REEL_TYPE || p == FilmProperty::REEL_LENGTH) {
ensure_ui_thread ();
recreate_views ();
- } else if (p == Film::Property::CONTENT_ORDER) {
+ } else if (p == FilmProperty::CONTENT_ORDER) {
Refresh ();
}
}
}
auto cv = dynamic_pointer_cast<TimelineContentView> (i);
+ DCPOMATIC_ASSERT(cv);
int t = base;
}
_zoom_point = ev.GetPosition ();
+ setup_scrollbars();
Refresh ();
}
{
auto 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);
+ set_pixels_per_second((_main_canvas->GetSize().GetWidth() - 32) / std::max(1.0, film->length().seconds()));
+ set_pixels_per_track((_main_canvas->GetSize().GetHeight() - tracks_y_offset() - _time_axis_view->bbox().height - 32) / std::max(1, _tracks));
setup_scrollbars ();
_main_canvas->Scroll (0, 0);
_labels_canvas->Scroll (0, 0);
{
if (event.GetKeyCode() == WXK_DELETE) {
auto film = _film.lock();
+ DCPOMATIC_ASSERT(film);
film->remove_content(selected_content());
+ } else {
+ switch (event.GetRawKeyCode()) {
+ case '+':
+ set_pixels_per_second(_pixels_per_second.get_value_or(1) * 2);
+ setup_scrollbars();
+ break;
+ case '-':
+ set_pixels_per_second(_pixels_per_second.get_value_or(1) / 2);
+ setup_scrollbars();
+ break;
+ }
}
}