13
0

persistent tooltip for [trim] knob

This commit is contained in:
Robin Gareus 2015-04-25 01:04:19 +02:00
parent a33cc51176
commit 848864f8c9
2 changed files with 57 additions and 7 deletions

View File

@ -57,6 +57,7 @@ ArdourKnob::Element ArdourKnob::default_elements = ArdourKnob::Element (ArdourKn
ArdourKnob::ArdourKnob (Element e)
: _elements (e)
, _hovering (false)
, _tooltip (this)
{
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);
//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_arc (cr, 0, 0, center_radius, 0, 2.0*G_PI);
cairo_fill (cr);
@ -251,9 +252,16 @@ ArdourKnob::render (cairo_t* cr, cairo_rectangle_t *)
void
ArdourKnob::on_size_request (Gtk::Requisition* req)
{
CairoWidget::on_size_request (req);
//perhaps render the knob base into a cached image here?
// see ardour-button VectorIcon size, use font scaling as default
CairoWidget::on_size_request (req); // allow to override
// we're square
if (req->width < req->height) {
req->width = req->height;
}
if (req->height < req->width) {
req->height = req->width;
}
}
bool
@ -321,7 +329,7 @@ bool
ArdourKnob::on_button_press_event (GdkEventButton *ev)
{
_grabbed_y = ev->y;
_grabbed = true;
_tooltip.start_drag();
set_active_state (Gtkmm2ext::ExplicitActive);
@ -342,7 +350,8 @@ ArdourKnob::on_button_release_event (GdkEventButton *ev)
return true;
}
_grabbed = false;
//_tooltip.target_stop_drag ();
_tooltip.stop_drag();
unset_active_state ();
return false;
@ -383,7 +392,7 @@ ArdourKnob::controllable_changed ()
_val = min( max(0.0f, _val), 1.0f); //range check
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();
}
@ -461,3 +470,28 @@ ArdourKnob::add_elements (Element 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;
}

View File

@ -28,6 +28,21 @@
#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
{
@ -95,6 +110,7 @@ public:
void action_tooltip_changed ();
std::string _tooltip_prefix;
KnobPersistentTooltip _tooltip;
};
#endif /* __gtk2_ardour_ardour_knob_h__ */