Use PBD::to_string to convert period count in EngineControl class
[ardour.git] / gtk2_ardour / ardour_button.cc
index 3395486d35c060013197b07d38997c7d6e0edf6b..98c54e409f2ab9311303e0e5445168679dde483f 100644 (file)
@@ -44,7 +44,6 @@
 #define BASELINESTRETCH (1.25)
 #define TRACKHEADERBTNW (3.10)
 
-using namespace Gdk;
 using namespace Gtk;
 using namespace Glib;
 using namespace PBD;
@@ -256,8 +255,10 @@ ArdourButton::set_alignment (const float xa, const float ya)
  * ARDOUR_UI_UTILS::render_vector_icon()
  */
 void
-ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
+ArdourButton::render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t*)
 {
+       cairo_t* cr = ctx->cobj();
+
        uint32_t text_color;
        uint32_t led_color;
 
@@ -624,7 +625,7 @@ ArdourButton::on_size_request (Gtk::Requisition* req)
                         * of text.
                         */
 
-               } else { //if (!_text.empty() || !_sizing_text.empty()) {
+               } else /*if (!_text.empty() || !_sizing_text.empty()) */ {
 
                        req->height = std::max(req->height, (int) ceil(char_pixel_height() * BASELINESTRETCH + 1.0));
                        req->width += rint(1.75 * char_pixel_width()); // padding
@@ -671,7 +672,7 @@ ArdourButton::on_size_request (Gtk::Requisition* req)
                req->width += _diameter + 4;
        }
 
-       if (_elements & VectorIcon) {
+       if (_elements & (VectorIcon | IconRenderCallback)) {
                assert(!(_elements & Text));
                const int wh = std::max (6., std::max (rint (TRACKHEADERBTNW * char_avg_pixel_width()), ceil (char_pixel_height() * BASELINESTRETCH + 1.)));
                req->width += wh;
@@ -1107,7 +1108,21 @@ ArdourButton::on_focus_out_event (GdkEventFocus* ev)
 
 bool
 ArdourButton::on_key_release_event (GdkEventKey *ev) {
-       if (_focused &&
+       if (_act_on_release && _focused &&
+                       (ev->keyval == GDK_space || ev->keyval == GDK_Return))
+       {
+               signal_clicked();
+               if (_action) {
+                       _action->activate ();
+               }
+               return true;
+       }
+       return CairoWidget::on_key_release_event (ev);
+}
+
+bool
+ArdourButton::on_key_press_event (GdkEventKey *ev) {
+       if (!_act_on_release && _focused &&
                        (ev->keyval == GDK_space || ev->keyval == GDK_Return))
        {
                signal_clicked();