clear waveform cache when shape changes - fixes #6525
authorRobin Gareus <robin@gareus.org>
Thu, 20 Aug 2015 01:01:51 +0000 (03:01 +0200)
committerRobin Gareus <robin@gareus.org>
Thu, 20 Aug 2015 01:01:51 +0000 (03:01 +0200)
libs/canvas/canvas/wave_view.h
libs/canvas/wave_view.cc

index c4e19ec7bb353df0dd035b1db5e1e7eab1f72ccf..e9df823a9cbc79328649322357bd27dee78b25e0 100644 (file)
@@ -126,6 +126,7 @@ class LIBCANVAS_API WaveViewCache
 
        uint64_t image_cache_threshold () const { return _image_cache_threshold; }
        void set_image_cache_threshold (uint64_t);
+       void clear_cache ();
        
        void add (boost::shared_ptr<ARDOUR::AudioSource>, boost::shared_ptr<Entry>);
        void use (boost::shared_ptr<ARDOUR::AudioSource>, boost::shared_ptr<Entry>);
index e8db7d8c6a3055a8a6056f94d94aa91e5d7a7dcc..a0b9e48fda3066acfff08ea874713d5a1fa4abb2 100644 (file)
@@ -1351,6 +1351,9 @@ WaveView::set_global_shape (Shape s)
 {
        if (_global_shape != s) {
                _global_shape = s;
+               if (images) {
+                       images->clear_cache ();
+               }
                VisualPropertiesChanged (); /* EMIT SIGNAL */
        }
 }
@@ -1360,6 +1363,9 @@ WaveView::set_global_logscaled (bool yn)
 {
        if (_global_logscaled != yn) {
                _global_logscaled = yn;
+               if (images) {
+                       images->clear_cache ();
+               }
                VisualPropertiesChanged (); /* EMIT SIGNAL */
        }
 }
@@ -1827,10 +1833,20 @@ WaveViewCache::cache_flush ()
        }
 }
 
+void
+WaveViewCache::clear_cache ()
+{
+       DEBUG_TRACE (DEBUG::WaveView, "clear cache\n");
+       const uint64_t image_cache_threshold = _image_cache_threshold;
+       _image_cache_threshold = 0;
+       cache_flush ();
+       _image_cache_threshold = image_cache_threshold;
+}
+
 void
 WaveViewCache::set_image_cache_threshold (uint64_t sz)
 {
-       DEBUG_TRACE (DEBUG::WaveView, string_compose ("new image cache size \n", sz));
+       DEBUG_TRACE (DEBUG::WaveView, string_compose ("new image cache size %1\n", sz));
        _image_cache_threshold = sz;
        cache_flush ();
 }