summaryrefslogtreecommitdiff
path: root/gtk2_ardour/tempo_lines.h
diff options
context:
space:
mode:
authorNick Mainsbridge <beatroute@iprimus.com.au>2008-09-29 13:41:17 +0000
committerNick Mainsbridge <beatroute@iprimus.com.au>2008-09-29 13:41:17 +0000
commit3f81ed9bdd091271dc57f56ea545734142229102 (patch)
tree2eb74acf862c9b76ba328aae127aad060335268b /gtk2_ardour/tempo_lines.h
parentabc5ab39332a382e904bf0789e630db299ca471e (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.h35
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__ */