X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fardour_button.cc;h=cc36fa483d902793218ad3eebd0fd6ec6557cc9e;hb=237741d18722252abd4a6a20d3422315481ccffe;hp=47c98710150c1e984acdd9c374c72db2b9e58477;hpb=4c2e846126890a5ad64fcf177d5f746eb162a234;p=ardour.git diff --git a/gtk2_ardour/ardour_button.cc b/gtk2_ardour/ardour_button.cc index 47c9871015..cc36fa483d 100644 --- a/gtk2_ardour/ardour_button.cc +++ b/gtk2_ardour/ardour_button.cc @@ -86,6 +86,7 @@ ArdourButton::ArdourButton (Element e) , _fixed_diameter (true) , _distinct_led_click (false) , _hovering (false) + , _focused (false) { ColorsChanged.connect (sigc::mem_fun (*this, &ArdourButton::color_handler)); } @@ -122,6 +123,7 @@ ArdourButton::ArdourButton (const std::string& str, Element e) , _fixed_diameter (true) , _distinct_led_click (false) , _hovering (false) + , _focused (false) { set_text (str); } @@ -447,6 +449,16 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *) cairo_fill (cr); } } + if (_focused) { + rounded_function (cr, 1.5, 1.5, get_width() - 3, get_height() - 3, _corner_radius); + cairo_set_source_rgba (cr, 0.905, 0.917, 0.925, 0.8); + double dashes = 1; + cairo_set_dash (cr, &dashes, 1, 0); + cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT); + cairo_set_line_width (cr, 1.0); + cairo_stroke (cr); + cairo_set_dash (cr, 0, 0, 0); + } } void @@ -921,6 +933,37 @@ ArdourButton::set_visual_state (Gtkmm2ext::VisualState s) } } + +bool +ArdourButton::on_focus_in_event (GdkEventFocus* ev) +{ + _focused = true; + queue_draw (); + return CairoWidget::on_focus_in_event (ev); +} + +bool +ArdourButton::on_focus_out_event (GdkEventFocus* ev) +{ + _focused = false; + queue_draw (); + return CairoWidget::on_focus_out_event (ev); +} + +bool +ArdourButton::on_key_release_event (GdkEventKey *ev) { + if (_focused && + (ev->keyval == GDK_KEY_space || ev->keyval == GDK_Return)) + { + signal_clicked(); + if (_action) { + _action->activate (); + } + return true; + } + return CairoWidget::on_key_release_event (ev); +} + bool ArdourButton::on_enter_notify_event (GdkEventCrossing* ev) {