diff options
Diffstat (limited to 'libs/surfaces/push2/knob.h')
-rw-r--r-- | libs/surfaces/push2/knob.h | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/libs/surfaces/push2/knob.h b/libs/surfaces/push2/knob.h new file mode 100644 index 0000000000..54b0236155 --- /dev/null +++ b/libs/surfaces/push2/knob.h @@ -0,0 +1,90 @@ +#ifndef __ardour_push2_knob_h__ +#define __ardour_push2_knob_h__ + +#include <boost/shared_ptr.hpp> +#include <sigc++/trackable.h> + +#include <cairomm/refptr.h> + +#include "pbd/signals.h" + +#include "canvas/item.h" +#include "canvas/text.h" + +namespace ARDOUR { + class AutomationControl; +} + +namespace Cairo { + class Context; + class Region; +} + +namespace ArdourSurface { + +class Push2; + +class Push2Knob : public sigc::trackable, public ArdourCanvas::Item +{ +public: + enum Element { + Arc = 0x1, + Bevel = 0x2, + unused2 = 0x4, + unused3 = 0x8, + unused4 = 0x10, + unused5 = 0x20, + }; + + enum Flags { + NoFlags = 0, + Detent = 0x1, + ArcToZero = 0x2, + }; + + Push2Knob (Push2& p, ArdourCanvas::Item*, Element e = default_elements, Flags flags = NoFlags); + virtual ~Push2Knob (); + + static Element default_elements; + + void add_flag (Flags); + void remove_flag (Flags); + + void set_controllable (boost::shared_ptr<ARDOUR::AutomationControl> c); + boost::shared_ptr<ARDOUR::AutomationControl> controllable() const { return _controllable; } + + void set_text_color (ArdourCanvas::Color); + void set_arc_start_color (ArdourCanvas::Color); + void set_arc_end_color (ArdourCanvas::Color); + void set_position (double x, double y); + void set_radius (double r); + + void render (ArdourCanvas::Rect const &, Cairo::RefPtr<Cairo::Context>) const; + void compute_bounding_box() const; + + protected: + void controllable_changed (); + PBD::ScopedConnection watch_connection; + boost::shared_ptr<ARDOUR::AutomationControl> _controllable; + + private: + Push2& p2; + Element _elements; + Flags _flags; + double _r; + float _val; // current value [0..1] + float _normal; // default value, arc + + ArdourCanvas::Color text_color; + ArdourCanvas::Color arc_start_color; + ArdourCanvas::Color arc_end_color; + ArdourCanvas::Text text; + + void set_pan_azimuth_text (double); + void set_pan_width_text (double); + void set_gain_text (double); +}; + +} // namespace + +#endif /* __ardour_push2_knob_h__ */ |