expand bbox for Canvas::Line to get rid of artifacts caused when moving them around...
[ardour.git] / gtk2_ardour / region_view.h
index 135c573ac2d59487e7a6aff0ba9d3bb56a6334b6..566304fa92cf0ea8d9e48bcf0c5821308ed793e9 100644 (file)
 
 #include <vector>
 
-#include <libgnomecanvasmm.h>
-#include <libgnomecanvasmm/polygon.h>
 #include <sigc++/signal.h>
 #include "ardour/region.h"
 #include "ardour/beats_frames_converter.h"
 
+#include "canvas/fwd.h"
+
 #include "time_axis_view_item.h"
 #include "automation_line.h"
 #include "enums.h"
-#include "canvas.h"
 
 class TimeAxisView;
 class RegionEditor;
@@ -38,9 +37,10 @@ class GhostRegion;
 class AutomationTimeAxisView;
 class AutomationRegionView;
 
-namespace Gnome { namespace Canvas {
-       class NoEventText;
-} }
+namespace ArdourCanvas {
+       class Polygon;
+       class Text;
+}
 
 class RegionView : public TimeAxisViewItem
 {
@@ -48,7 +48,7 @@ class RegionView : public TimeAxisViewItem
        RegionView (ArdourCanvas::Group* parent,
                    TimeAxisView&        time_view,
                    boost::shared_ptr<ARDOUR::Region> region,
-                   double               samples_per_unit,
+                   double               samples_per_pixel,
                    Gdk::Color const &   basic_color,
                    bool                 automation = false);
 
@@ -66,7 +66,7 @@ class RegionView : public TimeAxisViewItem
        void set_valid (bool yn) { valid = yn; }
 
        virtual void set_height (double);
-       virtual void set_samples_per_unit (double);
+       virtual void set_samples_per_pixel (double);
        virtual bool set_duration (framecnt_t, void*);
 
        void move (double xdelta, double ydelta);
@@ -96,19 +96,23 @@ class RegionView : public TimeAxisViewItem
 
        static PBD::Signal1<void,RegionView*> RegionViewGoingAway;
 
-       ARDOUR::BeatsFramesConverter const & time_converter () {
-               return _time_converter;
+       ARDOUR::BeatsFramesConverter const & region_relative_time_converter () const {
+               return _region_relative_time_converter;
+       }
+
+       ARDOUR::BeatsFramesConverter const & source_relative_time_converter () const {
+               return _source_relative_time_converter;
        }
 
        /** Called when a front trim is about to begin */
        virtual void trim_front_starting () {}
 
-       void trim_front (framepos_t, bool);
+       bool trim_front (framepos_t, bool);
 
        /** Called when a start trim has finished */
        virtual void trim_front_ending () {}
 
-       void trim_end (framepos_t, bool);
+       bool trim_end (framepos_t, bool);
        void trim_contents (framepos_t, bool, bool);
        virtual void thaw_after_trim ();
 
@@ -116,6 +120,8 @@ class RegionView : public TimeAxisViewItem
         void drop_silent_frames ();
         void hide_silent_frames ();
 
+       ARDOUR::frameoffset_t snap_frame_to_frame (ARDOUR::frameoffset_t) const;
+       
   protected:
 
        /** Allows derived types to specify their visibility requirements
@@ -124,7 +130,7 @@ class RegionView : public TimeAxisViewItem
        RegionView (ArdourCanvas::Group *,
                    TimeAxisView&,
                    boost::shared_ptr<ARDOUR::Region>,
-                   double samples_per_unit,
+                   double samples_per_pixel,
                    Gdk::Color const & basic_color,
                    bool recording,
                    TimeAxisViewItem::Visibility);
@@ -170,19 +176,20 @@ class RegionView : public TimeAxisViewItem
            different bits of regions according to whether or not they are the one
            that will be played at any given time.
        */
-       std::list<ArdourCanvas::SimpleRect*> _coverage_frames;
+       std::list<ArdourCanvas::Rectangle*> _coverage_frames;
 
        /** a list of rectangles used to show silent segments
        */
-       std::list<ArdourCanvas::SimpleRect*> _silent_frames;
+       std::list<ArdourCanvas::Rectangle*> _silent_frames;
        /** a list of rectangles used to show the current silence threshold
        */
-       std::list<ArdourCanvas::SimpleRect*> _silent_threshold_frames;
+       std::list<ArdourCanvas::Rectangle*> _silent_threshold_frames;
         /** a text item to display strip silence statistics
          */
-        ArdourCanvas::NoEventText* _silence_text;
+        ArdourCanvas::Text* _silence_text;
 
-       ARDOUR::BeatsFramesConverter _time_converter;
+       ARDOUR::BeatsFramesConverter _region_relative_time_converter;
+       ARDOUR::BeatsFramesConverter _source_relative_time_converter;
 };
 
 #endif /* __gtk_ardour_region_view_h__ */