diff options
-rw-r--r-- | gtk2_ardour/ardour_button.cc | 59 | ||||
-rw-r--r-- | gtk2_ardour/ardour_button.h | 1 |
2 files changed, 56 insertions, 4 deletions
diff --git a/gtk2_ardour/ardour_button.cc b/gtk2_ardour/ardour_button.cc index 71c90d1a64..ccf1b3f3fa 100644 --- a/gtk2_ardour/ardour_button.cc +++ b/gtk2_ardour/ardour_button.cc @@ -290,15 +290,66 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *) } } else // rec-en is exclusive to pixbuf (tape machine mode, rec-en) - if ((_elements & RecButton)) { + if ((_elements & (RecButton|RecTapeMode)) == (RecButton|RecTapeMode)) { + const double h = get_height(); const double x = get_width() * .5; const double y = get_height() * .5; - cairo_arc (cr, x, y, get_height () *.2 , 0, 2 * M_PI); + const double slit = .11 * M_PI; + cairo_save(cr); + cairo_translate(cr, x, y); + + cairo_arc (cr, 0, 0, y *.6, 0, 2 * M_PI); cairo_set_source_rgba (cr, .95, .44, .44, 1.); // #f46f6f cairo_fill_preserve(cr); - cairo_set_source_rgba (cr, .0, .0, .0, 1.); + cairo_set_source_rgba (cr, .0, .0, .0, .5); cairo_set_line_width(cr, 1); - cairo_stroke (cr); + cairo_stroke(cr); + + cairo_save(cr); + cairo_set_source_rgba (cr, .15, .07, .07, 1.0); + + cairo_rotate (cr, -.5 * M_PI); + cairo_move_to(cr, 0, 0); + cairo_arc (cr, 0, 0, h *.25, -slit, slit); + cairo_line_to(cr, 0, 0); + cairo_close_path(cr); + + cairo_fill(cr); + cairo_rotate (cr, 2. * M_PI / 3.); + + cairo_move_to(cr, 0, 0); + cairo_arc (cr, 0, 0, h *.25, -slit, slit); + cairo_line_to(cr, 0, 0); + cairo_close_path(cr); + cairo_fill(cr); + + cairo_rotate (cr, 2. * M_PI / 3.); + cairo_move_to(cr, 0, 0); + cairo_arc (cr, 0, 0, h *.25, -slit, slit); + cairo_line_to(cr, 0, 0); + cairo_close_path(cr); + cairo_fill(cr); + + cairo_restore(cr); + + cairo_arc (cr, 0, 0, h * .09, 0, 2 * M_PI); + cairo_set_source_rgba (cr, .95, .44, .44, 1.); // #f46f6f + cairo_fill(cr); + cairo_set_source_rgba (cr, .0, .0, .0, 1.0); + cairo_arc (cr, 0, 0, h *.05, 0, 2 * M_PI); // hole in the middle + cairo_fill(cr); + + cairo_restore(cr); + } + else if (_elements & RecButton) { + const double x = get_width() * .5; + const double y = get_height() * .5; + cairo_arc (cr, x, y, y *.55, 0, 2 * M_PI); + cairo_set_source_rgba (cr, .95, .44, .44, 1.); // #f46f6f + cairo_fill_preserve(cr); + cairo_set_source_rgba (cr, .0, .0, .0, .5); + cairo_set_line_width(cr, 1); + cairo_stroke(cr); } int text_margin; diff --git a/gtk2_ardour/ardour_button.h b/gtk2_ardour/ardour_button.h index ec79742782..7726352a9a 100644 --- a/gtk2_ardour/ardour_button.h +++ b/gtk2_ardour/ardour_button.h @@ -41,6 +41,7 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable Menu = 0x20, Inactive = 0x40, // no _action is defined AND state is not used RecButton = 0x80, // tenative, see commit message + RecTapeMode = 0x100, // tenative }; static Element default_elements; |