Cache entries are now region colour aware.
authornick_m <mainsbridge@gmail.com>
Tue, 17 Jun 2014 14:16:51 +0000 (00:16 +1000)
committernick_m <mainsbridge@gmail.com>
Tue, 17 Jun 2014 14:16:51 +0000 (00:16 +1000)
libs/canvas/canvas/wave_view.h
libs/canvas/wave_view.cc

index 674df969a5ffa5579b67e9bb82a48e07c7d4b498..c98c62c7a3f731e9d637eb2827126cd973d6d165 100644 (file)
@@ -58,13 +58,18 @@ public:
                int channel;
                Coord height;
                float amplitude;
+               Color fill_color;
+               Color outline_color;
                framepos_t start;
                framepos_t end;
                Cairo::RefPtr<Cairo::ImageSurface> image;
        CacheEntry() : 
-               channel (0), height (0), amplitude(0), start (0), end (0), image (0) {} 
-       CacheEntry(int chan, Coord hght, float amp, framepos_t strt, framepos_t ed, Cairo::RefPtr<Cairo::ImageSurface> img) :
-               channel (chan), height (hght), amplitude (amp), start (strt), end (ed), image (img) {} 
+               channel (0), height (0), amplitude(0), fill_color (0), 
+                       outline_color (0), start (0), end (0), image (0) {} 
+       CacheEntry(int chan, Coord hght, float amp, Color fcol, Color ocol, 
+                  framepos_t strt, framepos_t ed, Cairo::RefPtr<Cairo::ImageSurface> img) :
+               channel (chan), height (hght), amplitude (amp), fill_color (fcol),
+                       outline_color (ocol), start (strt), end (ed), image (img) {} 
        };
        
     /* Displays a single channel of waveform data for the given Region.
index 2d24e38969d9cb9f79b41f74d8e8c0706a125c1b..631be6254a367968b8f86233d1bcb07ff7a0748d 100644 (file)
@@ -223,7 +223,12 @@ WaveView::invalidate_image_cache ()
 
        for (uint32_t i = 0; i < caches.size (); ++i) {
 
-               if (_channel != caches[i].channel || _height != caches[i].height || _region_amplitude != caches[i].amplitude) {
+               if (_channel != caches[i].channel 
+                   || _height != caches[i].height
+                   || _region_amplitude != caches[i].amplitude 
+                   || _fill_color != caches[i].fill_color 
+                   || _outline_color != caches[i].outline_color) {
+
                        continue;
                }
 
@@ -258,7 +263,12 @@ WaveView::consolidate_image_cache () const
 
        for (uint32_t i = 0; i < caches.size (); ++i) {
 
-               if (_channel != caches[i].channel || _height != caches[i].height || _region_amplitude != caches[i].amplitude) {
+               if (_channel != caches[i].channel 
+                   || _height != caches[i].height
+                   || _region_amplitude != caches[i].amplitude 
+                   || _fill_color != caches[i].fill_color 
+                   || _outline_color != caches[i].outline_color) {
+
                        other_entries++;
                        continue;
                }
@@ -268,7 +278,12 @@ WaveView::consolidate_image_cache () const
 
                for (uint32_t j = i; j < caches.size (); ++j) {
 
-                       if (i == j || _channel != caches[j].channel || _height != caches[i].height || _region_amplitude != caches[i].amplitude) {
+                       if (i == j || _channel != caches[j].channel 
+                           || _height != caches[i].height 
+                           || _region_amplitude != caches[i].amplitude 
+                           || _fill_color != caches[i].fill_color 
+                           || _outline_color != caches[i].outline_color) {
+
                                continue;
                        }
 
@@ -546,7 +561,12 @@ WaveView::get_image (Cairo::RefPtr<Cairo::ImageSurface>& image, framepos_t start
        */
        for (uint32_t i = 0; i < caches.size (); ++i) {
 
-               if (_channel != caches[i].channel || _height != caches[i].height || _region_amplitude != caches[i].amplitude) {
+               if (_channel != caches[i].channel 
+                   || _height != caches[i].height
+                   || _region_amplitude != caches[i].amplitude 
+                   || _fill_color != caches[i].fill_color 
+                   || _outline_color != caches[i].outline_color) {
+
                        continue;
                }
 
@@ -589,7 +609,7 @@ WaveView::get_image (Cairo::RefPtr<Cairo::ImageSurface>& image, framepos_t start
 
        draw_image (image, peaks.get(), n_peaks);
 
-       _image_cache[_region->audio_source ()].push_back (CacheEntry (_channel, _height, _region_amplitude, sample_start,  sample_end, image));
+       _image_cache[_region->audio_source ()].push_back (CacheEntry (_channel, _height, _region_amplitude, _fill_color, _outline_color, sample_start,  sample_end, image));
 
        image_offset = (sample_start - _region->start()) / _samples_per_pixel;