summaryrefslogtreecommitdiff
path: root/gtk2_ardour/ardour_knob.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-04-25 01:04:19 +0200
committerRobin Gareus <robin@gareus.org>2015-04-25 01:04:19 +0200
commit848864f8c97c6a74eb2e6d69f48d2f439401a0ca (patch)
tree9357b490f746216ea19e03fd9e5fd7a45c17c097 /gtk2_ardour/ardour_knob.cc
parenta33cc511765f28921df1aeb39d8bdc95eceb8c7b (diff)
persistent tooltip for [trim] knob
Diffstat (limited to 'gtk2_ardour/ardour_knob.cc')
-rw-r--r--gtk2_ardour/ardour_knob.cc48
1 files changed, 41 insertions, 7 deletions
diff --git a/gtk2_ardour/ardour_knob.cc b/gtk2_ardour/ardour_knob.cc
index a960b8ec5d..96fd2bb96f 100644
--- a/gtk2_ardour/ardour_knob.cc
+++ b/gtk2_ardour/ardour_knob.cc
@@ -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;
+}