NO-OP whitespace (updated GH PR #357)
[ardour.git] / gtk2_ardour / marker.h
index 623e624f9dfeb6e8c9f877078f89f24f2577c7b3..a99efc81c29f5299a6bd40530f26d79ea1ab2789 100644 (file)
 #include <string>
 #include <glib.h>
 
-#include <libgnomecanvasmm/pixbuf.h>
 #include <sigc++/signal.h>
 
 #include "ardour/ardour.h"
 #include "pbd/signals.h"
 
-#include "canvas.h"
+#include "canvas/fwd.h"
+#include "canvas/types.h"
 
 namespace ARDOUR {
        class TempoSection;
@@ -38,15 +38,21 @@ namespace ARDOUR {
 
 class PublicEditor;
 
-class Marker : public sigc::trackable
+/** Location Marker
+ *
+ * Editor ruler representation of a location marker or range on the timeline.
+ */
+class ArdourMarker : public sigc::trackable
 {
   public:
        enum Type {
                Mark,
                Tempo,
                Meter,
-               Start, ///< session start
-               End,   ///< session end
+               SessionStart, ///< session start
+               SessionEnd,   ///< session end
+               RangeStart,
+               RangeEnd,
                LoopStart,
                LoopEnd,
                PunchIn,
@@ -54,72 +60,102 @@ class Marker : public sigc::trackable
        };
 
 
-       Marker (PublicEditor& editor, ArdourCanvas::Group& parent, guint32 rgba, const std::string& text, Type,
-               nframes_t frame = 0, bool handle_events = true);
+       ArdourMarker (PublicEditor& editor, ArdourCanvas::Container &, guint32 rgba, const std::string& text, Type,
+               framepos_t frame = 0, bool handle_events = true);
 
-       virtual ~Marker ();
+       virtual ~ArdourMarker ();
 
-       static PBD::Signal1<void,Marker*> CatchDeletion;
+       static PBD::Signal1<void,ArdourMarker*> CatchDeletion;
+
+       static void setup_sizes (const double timebar_height);
 
        ArdourCanvas::Item& the_item() const;
 
-       void add_line (ArdourCanvas::Group*, double y_origin, double initial_height);
-       void show_line ();
-       void hide_line ();
-       void set_line_vpos (double y_origin, double height);
+       void set_selected (bool);
+       void set_show_line (bool);
+       void canvas_height_set (double);
 
        void set_position (framepos_t);
        void set_name (const std::string&);
+       void set_points_color (uint32_t rgba);
        void set_color_rgba (uint32_t rgba);
+       void setup_line ();
 
        framepos_t position() const { return frame_position; }
 
-       ArdourCanvas::Group * get_parent() { return _parent; }
-       void reparent (ArdourCanvas::Group & parent);
+       ArdourCanvas::Container * get_parent() { return _parent; }
+       void reparent (ArdourCanvas::Container & parent);
 
        void hide ();
        void show ();
 
        Type type () { return _type; }
 
+       void set_left_label_limit (double);
+       void set_right_label_limit (double);
+
+       std::string name () const {
+               return _name;
+       }
+
+       bool label_on_left () const;
+
   protected:
        PublicEditor& editor;
 
-       Pango::FontDescription* name_font;
+       Pango::FontDescription name_font;
 
-       ArdourCanvas::Group * _parent;
-       ArdourCanvas::Group *group;
+       ArdourCanvas::Container* _parent;
+       ArdourCanvas::Container *group;
        ArdourCanvas::Polygon *mark;
-       ArdourCanvas::Pixbuf *name_pixbuf;
+       ArdourCanvas::Text *_name_item;
        ArdourCanvas::Points *points;
-       ArdourCanvas::SimpleLine *line;
-       ArdourCanvas::Points *line_points;
+       ArdourCanvas::Line* _track_canvas_line;
+       ArdourCanvas::Rectangle* _name_background;
 
+       std::string  _name;
        double        unit_position;
-       framepos_t   frame_position;
-       unsigned char shift; /* should be double, but its always small and integral */
-       Type          _type;
+       framepos_t    frame_position;
+       double       _shift;
+       Type         _type;
        int           name_height;
+       bool         _selected;
+       bool         _shown;
+       bool         _line_shown;
+       double       _canvas_height;
+       uint32_t     _color;
+       uint32_t     _points_color;
+       double       _left_label_limit; ///< the number of pixels available to the left of this marker for a label
+       double       _right_label_limit; ///< the number of pixels available to the right of this marker for a label
+       double       _label_offset;
 
        void reposition ();
+       void setup_line_x ();
+       void setup_name_display ();
+
+private:
+       /* disallow copy construction */
+       ArdourMarker (ArdourMarker const &);
+       ArdourMarker & operator= (ArdourMarker const &);
 };
 
-class TempoMarker : public Marker
+class TempoMarker : public ArdourMarker
 {
   public:
-        TempoMarker (PublicEditor& editor, ArdourCanvas::Group& parent, guint32 rgba, const std::string& text, ARDOUR::TempoSection&);
+       TempoMarker (PublicEditor& editor, ArdourCanvas::Container &, guint32 rgba, const std::string& text, ARDOUR::TempoSection&);
        ~TempoMarker ();
 
        ARDOUR::TempoSection& tempo() const { return _tempo; }
 
+       void update_height_mark (const double ratio);
   private:
        ARDOUR::TempoSection& _tempo;
 };
 
-class MeterMarker : public Marker
+class MeterMarker : public ArdourMarker
 {
   public:
-        MeterMarker (PublicEditor& editor, ArdourCanvas::Group& parent, guint32 rgba, const std::string& text, ARDOUR::MeterSection&);
+       MeterMarker (PublicEditor& editor, ArdourCanvas::Container &, guint32 rgba, const std::string& text, ARDOUR::MeterSection&);
        ~MeterMarker ();
 
        ARDOUR::MeterSection& meter() const { return _meter; }