summaryrefslogtreecommitdiff
path: root/libs/surfaces/push2/knob.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/surfaces/push2/knob.h')
-rw-r--r--libs/surfaces/push2/knob.h90
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__ */