mechanism to allow Track (or other Route-derived type) to add its own processors...
[ardour.git] / gtk2_ardour / audio_clock.h
index 51cac850a0199305f40296167eebb6fd0508eed4..9ff8221229c59f7fd7396b56ee16044590c6ed5d 100644 (file)
@@ -34,6 +34,7 @@
 #include "ardour/session_handle.h"
 
 #include "gtkmm2ext/cairo_widget.h"
+#include "widgets/ardour_button.h"
 
 namespace ARDOUR {
        class Session;
@@ -57,6 +58,7 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr
        Mode mode() const { return _mode; }
        void set_off (bool yn);
        bool off() const { return _off; }
+       bool on() const { return !_off; }
        void set_widget_name (const std::string& name);
        void set_active_state (Gtkmm2ext::ActiveState s);
        void set_editable (bool yn);
@@ -80,6 +82,9 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr
        void set_session (ARDOUR::Session *s);
        void set_negative_allowed (bool yn);
 
+       ArdourWidgets::ArdourButton* left_btn () { return &_left_btn; }
+       ArdourWidgets::ArdourButton* right_btn () { return &_right_btn; }
+
        /** Alter cairo scaling during rendering.
         *
         * Used by clocks that resize themselves
@@ -98,7 +103,7 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr
        static std::vector<AudioClock*> clocks;
 
        protected:
-       void render (cairo_t*, cairo_rectangle_t*);
+       void render (Cairo::RefPtr<Cairo::Context> const&, cairo_rectangle_t*);
        bool get_is_duration () const { return is_duration; } ;
 
        virtual void build_ops_menu ();
@@ -106,15 +111,10 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr
 
        bool on_button_press_event (GdkEventButton *ev);
        bool on_button_release_event(GdkEventButton *ev);
-       bool is_lower_layout_click(int y) const {
-               return y > upper_height + separator_height;
-       }
-       bool is_right_layout_click(int x) const {
-               return x > x_leading_padding + get_left_rect_width() + separator_height;
-       }
-       double get_left_rect_width() const {
-              return round (((get_width() - separator_height) * mode_based_info_ratio) + 0.5);
-       }
+
+       ArdourWidgets::ArdourButton _left_btn;
+       ArdourWidgets::ArdourButton _right_btn;
+
        private:
        Mode             _mode;
        std::string      _name;
@@ -130,25 +130,23 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr
        bool             _negative_allowed;
        bool             edit_is_negative;
 
+       framepos_t       _limit_pos;
+
        Glib::RefPtr<Pango::Layout> _layout;
-       Glib::RefPtr<Pango::Layout> _left_layout;
-       Glib::RefPtr<Pango::Layout> _right_layout;
+
+       bool         _with_info;
 
        Pango::AttrColor*    editing_attr;
        Pango::AttrColor*    foreground_attr;
 
        Pango::AttrList normal_attributes;
        Pango::AttrList editing_attributes;
-       Pango::AttrList info_attributes;
 
        int first_height;
        int first_width;
        bool style_resets_first;
        int layout_height;
        int layout_width;
-       int info_height;
-       int upper_height;
-       double mode_based_info_ratio;
        double corner_radius;
        uint32_t font_size;
 
@@ -204,14 +202,14 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr
        void on_style_changed (const Glib::RefPtr<Gtk::Style>&);
        void on_size_request (Gtk::Requisition* req);
        bool on_motion_notify_event (GdkEventMotion *ev);
-       void on_size_allocate (Gtk::Allocation&);
        bool on_focus_out_event (GdkEventFocus*);
 
        void set_slave_info ();
        void set_timecode (framepos_t, bool);
-       void set_bbt (framepos_t, bool);
+       void set_bbt (framepos_t, ARDOUR::framecnt_t, bool);
        void set_minsec (framepos_t, bool);
        void set_frames (framepos_t, bool);
+       void set_out_of_bounds (bool negative);
 
        void set_clock_dimensions (Gtk::Requisition&);
 
@@ -229,7 +227,6 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr
 
        void session_configuration_changed (std::string);
        void session_property_changed (const PBD::PropertyChange&);
-       void metric_position_changed ();
 
        Field index_to_field () const;