{
}
-
+
dcpomatic::Rect<int>
TimelineTimeAxisView::bbox () const
{
if (!_timeline.pixels_per_second()) {
return;
}
-
+
double const pps = _timeline.pixels_per_second().get ();
-
+
gc->SetPen (*wxThePenList->FindOrCreatePen (wxColour (0, 0, 0), 1, wxPENSTYLE_SOLID));
-
+
double mark_interval = rint (128 / pps);
if (mark_interval > 5) {
mark_interval -= int (rint (mark_interval)) % 5;
if (mark_interval > 3600) {
mark_interval -= int (rint (mark_interval)) % 3600;
}
-
+
if (mark_interval < 1) {
mark_interval = 1;
}
-
+
wxGraphicsPath path = gc->CreatePath ();
path.MoveToPoint (_timeline.x_offset(), _y);
path.AddLineToPoint (_timeline.width(), _y);
gc->StrokePath (path);
-
+
gc->SetFont (gc->CreateFont (*wxNORMAL_FONT));
-
+
/* Time in seconds */
DCPTime t;
while ((t.seconds() * pps) < _timeline.width()) {
path.MoveToPoint (time_x (t), _y - 4);
path.AddLineToPoint (time_x (t), _y + 4);
gc->StrokePath (path);
-
+
double tc = t.seconds ();
int const h = tc / 3600;
tc -= h * 3600;
int const m = tc / 60;
tc -= m * 60;
int const s = tc;
-
+
wxString str = wxString::Format (wxT ("%02d:%02d:%02d"), h, m, s);
wxDouble str_width;
wxDouble str_height;
wxDouble str_descent;
wxDouble str_leading;
gc->GetTextExtent (str, &str_width, &str_height, &str_descent, &str_leading);
-
+
int const tx = _timeline.x_offset() + t.seconds() * pps;
if ((tx + str_width) < _timeline.width()) {
gc->DrawText (str, time_x (t), _y + 16);
}
-
+
t += DCPTime::from_seconds (mark_interval);
}
}