, _fixed_diameter (true)
, _distinct_led_click (false)
, _hovering (false)
+ , _focused (false)
+ , _fixed_colors_set (false)
{
- ColorsChanged.connect (sigc::mem_fun (*this, &ArdourButton::color_handler));
+ ARDOUR_UI_UTILS::ColorsChanged.connect (sigc::mem_fun (*this, &ArdourButton::color_handler));
}
ArdourButton::ArdourButton (const std::string& str, Element e)
, _fixed_diameter (true)
, _distinct_led_click (false)
, _hovering (false)
+ , _focused (false)
+ , _fixed_colors_set (false)
{
set_text (str);
}
}
}
- if ( ((_elements & FlatFace)==FlatFace) && (active_state() != Gtkmm2ext::ExplicitActive) ) {
+ if ( ((_elements & Inset)==Inset) && (active_state() != Gtkmm2ext::ExplicitActive) ) {
if ( !_flat_buttons ) {
float rheight = get_height()*0.5-REFLECTION_HEIGHT;
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
void
ArdourButton::set_colors ()
{
+ if (_fixed_colors_set) {
+ return;
+ }
std::string name = get_name();
border_color = ARDOUR_UI::config()->color_by_name ("button border");
*/
void ArdourButton::set_fixed_colors (const uint32_t color_active, const uint32_t color_inactive)
{
- set_name (""); /* this will trigger a "style-changed" message and then
- set_colors()
- */
+ _fixed_colors_set = true;
fill_start_active_color = fill_end_active_color = color_active;
/* XXX what about led colors ? */
build_patterns ();
+ set_name (""); /* this will trigger a "style-changed" message and then set_colors() */
}
void
}
}
+
+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)
{