persistent tooltip for [trim] knob
This commit is contained in:
parent
a33cc51176
commit
848864f8c9
@ -57,6 +57,7 @@ ArdourKnob::Element ArdourKnob::default_elements = ArdourKnob::Element (ArdourKn
|
|||||||
ArdourKnob::ArdourKnob (Element e)
|
ArdourKnob::ArdourKnob (Element e)
|
||||||
: _elements (e)
|
: _elements (e)
|
||||||
, _hovering (false)
|
, _hovering (false)
|
||||||
|
, _tooltip (this)
|
||||||
{
|
{
|
||||||
ARDOUR_UI_UTILS::ColorsChanged.connect (sigc::mem_fun (*this, &ArdourKnob::color_handler));
|
ARDOUR_UI_UTILS::ColorsChanged.connect (sigc::mem_fun (*this, &ArdourKnob::color_handler));
|
||||||
}
|
}
|
||||||
@ -239,7 +240,7 @@ ArdourKnob::render (cairo_t* cr, cairo_rectangle_t *)
|
|||||||
cairo_stroke (cr);
|
cairo_stroke (cr);
|
||||||
|
|
||||||
//highlight if grabbed or if mouse is hovering over me
|
//highlight if grabbed or if mouse is hovering over me
|
||||||
if ( _grabbed || (_hovering && ARDOUR_UI::config()->get_widget_prelight() ) ) {
|
if (_tooltip.dragging() || (_hovering && ARDOUR_UI::config()->get_widget_prelight() ) ) {
|
||||||
cairo_set_source_rgba (cr, 1,1,1, 0.12 );
|
cairo_set_source_rgba (cr, 1,1,1, 0.12 );
|
||||||
cairo_arc (cr, 0, 0, center_radius, 0, 2.0*G_PI);
|
cairo_arc (cr, 0, 0, center_radius, 0, 2.0*G_PI);
|
||||||
cairo_fill (cr);
|
cairo_fill (cr);
|
||||||
@ -251,9 +252,16 @@ ArdourKnob::render (cairo_t* cr, cairo_rectangle_t *)
|
|||||||
void
|
void
|
||||||
ArdourKnob::on_size_request (Gtk::Requisition* req)
|
ArdourKnob::on_size_request (Gtk::Requisition* req)
|
||||||
{
|
{
|
||||||
CairoWidget::on_size_request (req);
|
// see ardour-button VectorIcon size, use font scaling as default
|
||||||
|
CairoWidget::on_size_request (req); // allow to override
|
||||||
|
|
||||||
//perhaps render the knob base into a cached image here?
|
// we're square
|
||||||
|
if (req->width < req->height) {
|
||||||
|
req->width = req->height;
|
||||||
|
}
|
||||||
|
if (req->height < req->width) {
|
||||||
|
req->height = req->width;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@ -321,7 +329,7 @@ bool
|
|||||||
ArdourKnob::on_button_press_event (GdkEventButton *ev)
|
ArdourKnob::on_button_press_event (GdkEventButton *ev)
|
||||||
{
|
{
|
||||||
_grabbed_y = ev->y;
|
_grabbed_y = ev->y;
|
||||||
_grabbed = true;
|
_tooltip.start_drag();
|
||||||
|
|
||||||
set_active_state (Gtkmm2ext::ExplicitActive);
|
set_active_state (Gtkmm2ext::ExplicitActive);
|
||||||
|
|
||||||
@ -342,7 +350,8 @@ ArdourKnob::on_button_release_event (GdkEventButton *ev)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
_grabbed = false;
|
//_tooltip.target_stop_drag ();
|
||||||
|
_tooltip.stop_drag();
|
||||||
unset_active_state ();
|
unset_active_state ();
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -383,7 +392,7 @@ ArdourKnob::controllable_changed ()
|
|||||||
_val = min( max(0.0f, _val), 1.0f); //range check
|
_val = min( max(0.0f, _val), 1.0f); //range check
|
||||||
|
|
||||||
if (!_tooltip_prefix.empty()) {
|
if (!_tooltip_prefix.empty()) {
|
||||||
ARDOUR_UI::instance()->set_tip (*this, _tooltip_prefix + c->get_user_string());
|
_tooltip.set_tip (_tooltip_prefix + c->get_user_string());
|
||||||
}
|
}
|
||||||
set_dirty();
|
set_dirty();
|
||||||
}
|
}
|
||||||
@ -461,3 +470,28 @@ ArdourKnob::add_elements (Element e)
|
|||||||
{
|
{
|
||||||
_elements = (ArdourKnob::Element) (_elements | e);
|
_elements = (ArdourKnob::Element) (_elements | e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
KnobPersistentTooltip::KnobPersistentTooltip (Gtk::Widget* w)
|
||||||
|
: PersistentTooltip (w)
|
||||||
|
, _dragging (false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
KnobPersistentTooltip::start_drag ()
|
||||||
|
{
|
||||||
|
_dragging = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
KnobPersistentTooltip::stop_drag ()
|
||||||
|
{
|
||||||
|
_dragging = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
KnobPersistentTooltip::dragging () const
|
||||||
|
{
|
||||||
|
return _dragging;
|
||||||
|
}
|
||||||
|
@ -28,6 +28,21 @@
|
|||||||
#include "gtkmm2ext/binding_proxy.h"
|
#include "gtkmm2ext/binding_proxy.h"
|
||||||
#include "gtkmm2ext/activatable.h"
|
#include "gtkmm2ext/activatable.h"
|
||||||
#include "gtkmm2ext/cairo_widget.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
|
class ArdourKnob : public CairoWidget , public Gtkmm2ext::Activatable
|
||||||
{
|
{
|
||||||
@ -95,6 +110,7 @@ public:
|
|||||||
void action_tooltip_changed ();
|
void action_tooltip_changed ();
|
||||||
|
|
||||||
std::string _tooltip_prefix;
|
std::string _tooltip_prefix;
|
||||||
|
KnobPersistentTooltip _tooltip;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __gtk2_ardour_ardour_knob_h__ */
|
#endif /* __gtk2_ardour_ardour_knob_h__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user