Fix broken logic and possible NULL pointer dereference for Bundle XML.
[ardour.git] / libs / canvas / canvas / wave_view.h
index 6327277ef40c3923fe85da77418b3cb31856a57d..f26c3a5c104dfeb8c1ee6d31d973406b303943ad 100644 (file)
@@ -45,7 +45,7 @@ class WaveViewTest;
        
 namespace ArdourCanvas {
 
-class LIBCANVAS_API WaveView : virtual public Item, public Outline, public Fill
+class LIBCANVAS_API WaveView : public Item
 {
 public:
 
@@ -53,19 +53,24 @@ public:
                Normal,
                Rectified
         };
-       
+
        struct CacheEntry {
                int channel;
                Coord height;
                float amplitude;
+               Color fill_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) {} 
+
+       CacheEntry(int chan, Coord hght, float amp, Color fcl, framepos_t strt, framepos_t ed, Cairo::RefPtr<Cairo::ImageSurface> img)  :
+               
+               channel (chan), height (hght), amplitude (amp), fill_color (fcl), 
+                       start (strt), end (ed), image (img) {} 
        };
+
+       /* final ImageSurface rendered with colours */
+       Cairo::RefPtr<Cairo::ImageSurface> _image;
        
     /* Displays a single channel of waveform data for the given Region.
 
@@ -86,7 +91,8 @@ public:
     */
 
 
-       WaveView (Group *, boost::shared_ptr<ARDOUR::AudioRegion>);
+       WaveView (Canvas *, boost::shared_ptr<ARDOUR::AudioRegion>);
+       WaveView (Item*, boost::shared_ptr<ARDOUR::AudioRegion>);
        ~WaveView ();
 
        void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const;
@@ -186,7 +192,7 @@ private:
 
        void get_image (Cairo::RefPtr<Cairo::ImageSurface>& image, framepos_t start, framepos_t end, double& image_offset) const;
 
-        ArdourCanvas::Coord y_extent (double) const;
+        ArdourCanvas::Coord y_extent (double, bool) const;
        void draw_image (Cairo::RefPtr<Cairo::ImageSurface>&, ARDOUR::PeakData*, int) const;
 };