diff options
author | Robin Gareus <robin@gareus.org> | 2016-02-12 22:12:40 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-02-12 22:12:40 +0100 |
commit | 88bb11f27ebe291e5019f8427a249349f4f8067a (patch) | |
tree | 66d244f7fea2aa975b8faf17568965b8e77d2c8e /gtk2_ardour/export_report.h | |
parent | 8509b5fddc538853a80c97dfdb5b425996bf9662 (diff) |
Add Playhead to Export Report Dialog
Diffstat (limited to 'gtk2_ardour/export_report.h')
-rw-r--r-- | gtk2_ardour/export_report.h | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/gtk2_ardour/export_report.h b/gtk2_ardour/export_report.h index 180b6a4167..06c6076dff 100644 --- a/gtk2_ardour/export_report.h +++ b/gtk2_ardour/export_report.h @@ -32,6 +32,9 @@ public: CimgArea (Cairo::RefPtr<Cairo::ImageSurface> sf) : CairoWidget() , _surface(sf) + , _playhead(-1) + , _x0 (0) + , _aw (0) { set_size_request (sf->get_width (), sf->get_height ()); } @@ -43,10 +46,38 @@ public: cairo_set_source_surface (cr, _surface->cobj(), 0, 0); cairo_set_operator (cr, CAIRO_OPERATOR_OVER); cairo_paint (cr); + + if (_playhead > 0 && _playhead < 1.0 && _aw > 0) { + cairo_rectangle (cr, _x0, 0, _aw, _surface->get_height()); + cairo_set_source_rgba (cr, .4, .4, .6, .4); + cairo_fill (cr); + + const float x = _playhead * _aw; + const float h = _surface->get_height(); + cairo_set_source_rgba (cr, 1, 0, 0, 1); + cairo_set_line_width (cr, 1.5); + cairo_move_to (cr, _x0 + x, 0); + cairo_line_to (cr, _x0 + x, h); + cairo_stroke (cr); + } + } + + void set_playhead (float pos) { + // TODO re-expose minimal area only, old playhead pos, new playead pos + if (_playhead == pos) { return; } + _playhead = pos; + set_dirty (); + } + + void set_audition_axis (float x0, float w) { + _x0 = x0; + _aw = w; } private: Cairo::RefPtr<Cairo::ImageSurface> _surface; + float _playhead; + float _x0, _aw; }; class ExportReport : public ArdourDialog @@ -58,13 +89,19 @@ public: private: void open_folder (std::string); - void audition (std::string, unsigned int); + void audition (std::string, unsigned int, int); void stop_audition (); void audition_active (bool); + void audition_progress (ARDOUR::framecnt_t, ARDOUR::framecnt_t); + void on_switch_page (GtkNotebookPage*, guint page_num); StatusPtr status; Gtk::Notebook pages; ARDOUR::Session* _session; Gtk::Button* stop_btn; PBD::ScopedConnectionList auditioner_connections; + + std::vector<CimgArea*> timeline; + int _audition_num; + int _page_num; }; |