diff options
author | Nick Mainsbridge <beatroute@iprimus.com.au> | 2008-09-29 13:41:17 +0000 |
---|---|---|
committer | Nick Mainsbridge <beatroute@iprimus.com.au> | 2008-09-29 13:41:17 +0000 |
commit | 3f81ed9bdd091271dc57f56ea545734142229102 (patch) | |
tree | 2eb74acf862c9b76ba328aae127aad060335268b /gtk2_ardour/tempo_lines.h | |
parent | abc5ab39332a382e904bf0789e630db299ca471e (diff) |
Backport drobilla's tempo bar cache from 3.0, fix track display regression, rework canvas layers and region_motion_group, remove duplicate code, make track heights consistent (track zero is no longer different).
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3831 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/tempo_lines.h')
-rw-r--r-- | gtk2_ardour/tempo_lines.h | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/gtk2_ardour/tempo_lines.h b/gtk2_ardour/tempo_lines.h index 375ae9342b..f435c83588 100644 --- a/gtk2_ardour/tempo_lines.h +++ b/gtk2_ardour/tempo_lines.h @@ -19,30 +19,43 @@ #ifndef __ardour_tempo_lines_h__ #define __ardour_tempo_lines_h__ -#include <vector> +#include <map> +#include <boost/pool/pool.hpp> +#include <boost/pool/pool_alloc.hpp> #include <ardour/tempo.h> #include "canvas.h" #include "simpleline.h" +typedef boost::fast_pool_allocator< + std::pair<double, ArdourCanvas::SimpleLine>, + boost::default_user_allocator_new_delete, + boost::details::pool::null_mutex, + 8192> + MapAllocator; + class TempoLines { public: - TempoLines(ArdourCanvas::Canvas& canvas, ArdourCanvas::Group* group) - : _canvas(canvas) - , _group(group) - {} - - ArdourCanvas::SimpleLine* get_line(); - + TempoLines(ArdourCanvas::Canvas& canvas, ArdourCanvas::Group* group); + + void tempo_map_changed(); + void draw(ARDOUR::TempoMap::BBTPointList& points, double frames_per_unit); + + void show(); void hide(); private: - typedef std::vector<ArdourCanvas::SimpleLine*> Lines; - Lines _free_lines; - Lines _used_lines; +#ifdef GTKOSX + typedef std::map<double, ArdourCanvas::SimpleLine*, std::less<double> > Lines; +#else + typedef std::map<double, ArdourCanvas::SimpleLine*, std::less<double>, MapAllocator> Lines; +#endif + Lines _lines; ArdourCanvas::Canvas& _canvas; ArdourCanvas::Group* _group; + double _clean_left; + double _clean_right; }; #endif /* __ardour_tempo_lines_h__ */ |