X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fardour_knob.h;h=f3291270cc6e2cad4c8b5fe8075ae63a445a1267;hb=af2ee3c8564c7d60cadb130b8c7ad1f4cddd2216;hp=3a9c2bd7ff726a16764500a20417feac7d063a95;hpb=a7226133a990afa294339ffa735f9dee8eff97e4;p=ardour.git diff --git a/gtk2_ardour/ardour_knob.h b/gtk2_ardour/ardour_knob.h index 3a9c2bd7ff..f3291270cc 100644 --- a/gtk2_ardour/ardour_knob.h +++ b/gtk2_ardour/ardour_knob.h @@ -25,9 +25,26 @@ #include #include "pbd/signals.h" +#include "ardour/automatable.h" + #include "gtkmm2ext/binding_proxy.h" #include "gtkmm2ext/activatable.h" #include "gtkmm2ext/cairo_widget.h" +#include "gtkmm2ext/persistent_tooltip.h" + +class KnobPersistentTooltip : public Gtkmm2ext::PersistentTooltip +{ +public: + KnobPersistentTooltip (Gtk::Widget* w); + + void start_drag (); + void stop_drag (); + bool dragging () const; + +private: + bool _dragging; +}; + class ArdourKnob : public CairoWidget , public Gtkmm2ext::Activatable { @@ -42,7 +59,13 @@ public: unused5 = 0x20, }; - ArdourKnob (Element e = default_elements); + enum Flags { + NoFlags = 0, + Detent = 0x1, + ArcToZero = 0x2, + }; + + ArdourKnob (Element e = default_elements, Flags flags = NoFlags); virtual ~ArdourKnob (); void set_active_state (Gtkmm2ext::ActiveState); @@ -53,6 +76,8 @@ public: void add_elements (Element); static Element default_elements; + void set_tooltip_prefix (std::string pfx) { _tooltip_prefix = pfx; controllable_changed (true); } + boost::shared_ptr get_controllable() { return binding_proxy.get_controllable(); } void set_controllable (boost::shared_ptr c); @@ -64,7 +89,7 @@ public: void color_handler (); protected: - void render (cairo_t *, cairo_rectangle_t *); + void render (Cairo::RefPtr const&, cairo_rectangle_t*); void on_size_request (Gtk::Requisition* req); void on_size_allocate (Gtk::Allocation&); void on_style_changed (const Glib::RefPtr&); @@ -74,23 +99,30 @@ public: bool on_focus_in_event (GdkEventFocus*); bool on_focus_out_event (GdkEventFocus*); - void controllable_changed (); + void controllable_changed (bool force_update = false); PBD::ScopedConnection watch_connection; private: - Element _elements; - - BindingProxy binding_proxy; + Element _elements; + BindingProxy binding_proxy; bool _hovering; + float _grabbed_x; float _grabbed_y; - float _val; //percent of knob travel + float _val; // current value [0..1] + float _normal; // default value, arc + float _dead_zone_delta; + + Flags _flags; void action_sensitivity_changed (); void action_visibility_changed (); void action_tooltip_changed (); + + std::string _tooltip_prefix; + KnobPersistentTooltip _tooltip; }; #endif /* __gtk2_ardour_ardour_knob_h__ */