X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fardour_button.cc;h=03c9f562366697fa3fe59669344ae867ad613677;hb=1296b7fe89129e17b76f4b8c4adebef21f04b429;hp=77cac188a238f99e4c2cf0de544891c3664ef0da;hpb=1fa9edd872bdbfe7651c822698235434ffe59540;p=ardour.git diff --git a/gtk2_ardour/ardour_button.cc b/gtk2_ardour/ardour_button.cc index 77cac188a2..03c9f56236 100644 --- a/gtk2_ardour/ardour_button.cc +++ b/gtk2_ardour/ardour_button.cc @@ -77,6 +77,8 @@ ArdourButton::ArdourButton (Element e) , text_inactive_color(0) , led_active_color(0) , led_inactive_color(0) + , led_custom_color (0) + , use_custom_led_color (false) , convex_pattern (0) , concave_pattern (0) , led_inset_pattern (0) @@ -113,6 +115,8 @@ ArdourButton::ArdourButton (const std::string& str, Element e) , text_inactive_color(0) , led_active_color(0) , led_inactive_color(0) + , led_custom_color (0) + , use_custom_led_color (false) , convex_pattern (0) , concave_pattern (0) , led_inset_pattern (0) @@ -209,6 +213,10 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *) led_color = led_inactive_color; } + if (use_custom_led_color) { + led_color = led_custom_color; + } + void (*rounded_function)(cairo_t*, double, double, double, double, double); switch (_corner_mask) { @@ -264,7 +272,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *) //show the "convex" or "concave" gradient if (!_flat_buttons) { - if ( active_state() == Gtkmm2ext::ExplicitActive && !((_elements & Indicator)==Indicator) ) { + if ( active_state() == Gtkmm2ext::ExplicitActive && ( !((_elements & Indicator)==Indicator) || use_custom_led_color) ) { //concave cairo_set_source (cr, concave_pattern); Gtkmm2ext::rounded_rectangle (cr, 1, 1, get_width() - 2, get_height() - 2, _corner_radius); @@ -520,7 +528,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *) } // if requested, show hovering - if (ARDOUR::Config->get_widget_prelight() + if (ARDOUR_UI::config()->get_widget_prelight() && !((visual_state() & Gtkmm2ext::Insensitive))) { if (_hovering) { rounded_function (cr, 1, 1, get_width() - 2, get_height() - 2, _corner_radius); @@ -587,7 +595,7 @@ ArdourButton::on_size_request (Gtk::Requisition* req) CairoWidget::on_size_request (req); if (_diameter == 0) { - const float newdia = rint (ARDOUR::Config->get_font_scale () / 1024. / 7.5); // 11px with 80% font-scaling + const float newdia = rint (ARDOUR_UI::config()->get_font_scale () / 9600.0); // 11px with 100% font-scaling if (_diameter != newdia) { _pattern_height = 0; _diameter = newdia; @@ -785,7 +793,7 @@ ArdourButton::on_button_press_event (GdkEventButton *ev) { focus_handler (); - if ((_elements & Indicator) && _led_rect && _distinct_led_click) { + if (ev->button == 1 && (_elements & Indicator) && _led_rect && _distinct_led_click) { if (ev->x >= _led_rect->x && ev->x < _led_rect->x + _led_rect->width && ev->y >= _led_rect->y && ev->y < _led_rect->y + _led_rect->height) { return true; @@ -799,7 +807,7 @@ ArdourButton::on_button_press_event (GdkEventButton *ev) _grabbed = true; CairoWidget::set_dirty (); - if (!_act_on_release) { + if (ev->button == 1 && !_act_on_release) { if (_action) { _action->activate (); return true; @@ -815,7 +823,7 @@ ArdourButton::on_button_press_event (GdkEventButton *ev) bool ArdourButton::on_button_release_event (GdkEventButton *ev) { - if (_hovering && (_elements & Indicator) && _led_rect && _distinct_led_click) { + if (ev->button == 1 && _hovering && (_elements & Indicator) && _led_rect && _distinct_led_click) { if (ev->x >= _led_rect->x && ev->x < _led_rect->x + _led_rect->width && ev->y >= _led_rect->y && ev->y < _led_rect->y + _led_rect->height) { signal_led_clicked(); /* EMIT SIGNAL */ @@ -826,7 +834,7 @@ ArdourButton::on_button_release_event (GdkEventButton *ev) _grabbed = false; CairoWidget::set_dirty (); - if (_hovering) { + if (ev->button == 1 && _hovering) { signal_clicked (); if (_act_on_release) { if (_action) { @@ -1044,7 +1052,7 @@ ArdourButton::on_enter_notify_event (GdkEventCrossing* ev) { _hovering = (_elements & Inactive) ? false : true; - if (ARDOUR::Config->get_widget_prelight()) { + if (ARDOUR_UI::config()->get_widget_prelight()) { CairoWidget::set_dirty (); } @@ -1056,7 +1064,7 @@ ArdourButton::on_leave_notify_event (GdkEventCrossing* ev) { _hovering = false; - if (ARDOUR::Config->get_widget_prelight()) { + if (ARDOUR_UI::config()->get_widget_prelight()) { CairoWidget::set_dirty (); } @@ -1085,7 +1093,7 @@ ArdourButton::action_sensitivity_changed () } void -ArdourButton::set_layout_ellisize_width (int w) +ArdourButton::set_layout_ellipsize_width (int w) { if (_layout_ellipsize_width == w) { return; @@ -1094,8 +1102,11 @@ ArdourButton::set_layout_ellisize_width (int w) if (!_layout) { return; } - if (_layout_ellipsize_width > 0) { - _layout->set_width (_layout_ellipsize_width); + if (_layout_ellipsize_width > 3 * PANGO_SCALE) { + _layout->set_width (_layout_ellipsize_width - 3 * PANGO_SCALE); + } + if (is_realized ()) { + queue_resize (); } } @@ -1110,8 +1121,8 @@ ArdourButton::set_text_ellipsize (Pango::EllipsizeMode e) return; } _layout->set_ellipsize(_ellipsis); - if (_layout_ellipsize_width > 0) { - _layout->set_width (_layout_ellipsize_width); + if (_layout_ellipsize_width > 3 * PANGO_SCALE) { + _layout->set_width (_layout_ellipsize_width - 3 * PANGO_SCALE); } if (is_realized ()) { queue_resize (); @@ -1125,8 +1136,8 @@ ArdourButton::ensure_layout () ensure_style (); _layout = Pango::Layout::create (get_pango_context()); _layout->set_ellipsize(_ellipsis); - if (_layout_ellipsize_width > 0) { - _layout->set_width (_layout_ellipsize_width); + if (_layout_ellipsize_width > 3 * PANGO_SCALE) { + _layout->set_width (_layout_ellipsize_width - 3* PANGO_SCALE); } } } @@ -1183,3 +1194,15 @@ ArdourButton::add_elements (Element e) _elements = (ArdourButton::Element) (_elements | e); CairoWidget::set_dirty (); } + +void +ArdourButton::set_custom_led_color (uint32_t c, bool useit) +{ + if (led_custom_color == c && use_custom_led_color == useit) { + return; + } + + led_custom_color = c; + use_custom_led_color = useit; + CairoWidget::set_dirty (); +}