From 3b424fd8b55ee68f229463ccf3408de81a5c56d9 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 28 Sep 2008 15:22:07 +0000 Subject: [PATCH] Invalidate line cache when zoomed out to invisible line levels. Reduce line cache size to 128. git-svn-id: svn://localhost/ardour2/branches/3.0@3819 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/lineset.cc | 4 ++-- gtk2_ardour/tempo_lines.cc | 5 +++-- libs/evoral/evoral/TypeMap.hpp | 2 ++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/gtk2_ardour/lineset.cc b/gtk2_ardour/lineset.cc index 61e5804ed4..352d9331eb 100644 --- a/gtk2_ardour/lineset.cc +++ b/gtk2_ardour/lineset.cc @@ -269,7 +269,7 @@ LineSet::line_at(double coord) if (cached_pos != lines.end()) { if (coord < cached_pos->coord) { /* backward search */ - while(--cached_pos != lines.end()) { + while (--cached_pos != lines.end()) { if (cached_pos->coord <= coord) { if (cached_pos->coord + cached_pos->width < coord) { /* coord is between two lines */ @@ -281,7 +281,7 @@ LineSet::line_at(double coord) } } else { /* forward search */ - while(cached_pos != lines.end()) { + while (cached_pos != lines.end()) { if (cached_pos->coord > coord) { /* we searched past the line that we want, so now see if the previous line includes the coordinate */ diff --git a/gtk2_ardour/tempo_lines.cc b/gtk2_ardour/tempo_lines.cc index 5b73c877ac..3d2f54a2ff 100644 --- a/gtk2_ardour/tempo_lines.cc +++ b/gtk2_ardour/tempo_lines.cc @@ -24,7 +24,7 @@ using namespace std; -#define MAX_CACHED_LINES 512 +#define MAX_CACHED_LINES 128 TempoLines::TempoLines(ArdourCanvas::Canvas& canvas, ArdourCanvas::Group* group) : _canvas(canvas) @@ -40,7 +40,7 @@ TempoLines::tempo_map_changed() _clean_left = DBL_MAX; _clean_right = 0.0; - size_t d = 0; + size_t d = 1; // TODO: Dirty/slow, but 'needed' for zoom :( for (Lines::iterator i = _lines.begin(); i != _lines.end(); ++d) { Lines::iterator next = i; @@ -98,6 +98,7 @@ TempoLines::draw (ARDOUR::TempoMap::BBTPointList& points, double frames_per_unit if (beat_density > 4.0f) { /* if the lines are too close together, they become useless */ + tempo_map_changed(); return; } diff --git a/libs/evoral/evoral/TypeMap.hpp b/libs/evoral/evoral/TypeMap.hpp index 3d082fc4ef..3ab8066f70 100644 --- a/libs/evoral/evoral/TypeMap.hpp +++ b/libs/evoral/evoral/TypeMap.hpp @@ -30,6 +30,8 @@ class Parameter; */ class TypeMap { public: + virtual ~TypeMap() {} + /** Return true iff the type is a MIDI event. * The contents of the event will be used for specific ID */