diff options
author | Robin Gareus <robin@gareus.org> | 2015-04-07 21:47:04 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-04-07 22:34:09 +0200 |
commit | d25e8f22333ff00b51fbadb1892ba63cb90bb918 (patch) | |
tree | 6e65c5fcfbb7d8fe51d88e2b2b65461c4f2c30c3 | |
parent | 62a1a2e086bc0dba9d4389622db2c000d36308e1 (diff) |
update ArdourButton Icon API
-rw-r--r-- | gtk2_ardour/ardour_button.cc | 20 | ||||
-rw-r--r-- | gtk2_ardour/ardour_button.h | 19 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui2.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/automation_time_axis.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/mixer_strip.cc | 9 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.cc | 7 |
6 files changed, 42 insertions, 19 deletions
diff --git a/gtk2_ardour/ardour_button.cc b/gtk2_ardour/ardour_button.cc index faba44fee6..d4fee88fee 100644 --- a/gtk2_ardour/ardour_button.cc +++ b/gtk2_ardour/ardour_button.cc @@ -59,6 +59,7 @@ ArdourButton::Element ArdourButton::just_led_default_elements = ArdourButton::El ArdourButton::ArdourButton (Element e) : _elements (e) + , _icon (ArdourButton::NoIcon) , _tweaks (Tweaks (0)) , _char_pixel_width (0) , _char_pixel_height (0) @@ -306,7 +307,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *) cairo_fill (cr); } else // rec-en is exclusive to pixbuf (tape machine mode, rec-en) - if ((_elements & (RecButton|RecTapeMode)) == (RecButton|RecTapeMode)) { + if ((_elements & VectorIcon) && _icon == RecTapeMode) { const double x = get_width() * .5; const double y = get_height() * .5; const double r = std::min(10., std::min(x, y) * .6); // TODO we need a better way to limit max. radius. @@ -363,7 +364,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *) cairo_restore(cr); } - else if (_elements & RecButton) { + else if ((_elements & VectorIcon) && _icon == RecButton) { const double x = get_width() * .5; const double y = get_height() * .5; const double r = std::min(10., std::min(x, y) * .55); // TODO we need a better way to limit max. radius. @@ -377,7 +378,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *) cairo_set_line_width(cr, 1); cairo_stroke(cr); } - else if (_elements & CloseCross) { + else if ((_elements & VectorIcon) && _icon == CloseCross) { const double x = get_width() * .5; const double y = get_height() * .5; const double o = .5 + std::min(x, y) * .4; @@ -389,7 +390,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *) cairo_line_to(cr, x-o, y+o); cairo_stroke(cr); } - else if (_elements & StripWidth) { + else if ((_elements & VectorIcon) && _icon == StripWidth) { const double x0 = get_width() * .2; const double x1 = get_width() * .8; @@ -430,7 +431,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *) cairo_line_to(cr, xa1, ya1); cairo_stroke(cr); } - else if (_elements & DinMidi) { + else if ((_elements & VectorIcon) && _icon == DinMidi) { const double x = get_width() * .5; const double y = get_height() * .5; const double r = std::min(x, y) * .75; @@ -694,7 +695,7 @@ ArdourButton::on_size_request (Gtk::Requisition* req) req->width += _diameter + 4; } - if (_elements & (RecButton | CloseCross | StripWidth | DinMidi)) { + if (_elements & VectorIcon) { assert(!(_elements & Text)); const int wh = std::max (rint (TRACKHEADERBTNW * char_avg_pixel_width()), ceil (char_pixel_height() * BASELINESTRETCH + 1.)); req->width += wh; @@ -1263,6 +1264,13 @@ ArdourButton::add_elements (Element e) } void +ArdourButton::set_icon (Icon i) +{ + _icon = i; + CairoWidget::set_dirty (); +} + +void ArdourButton::set_custom_led_color (uint32_t c, bool useit) { if (led_custom_color == c && use_custom_led_color == useit) { diff --git a/gtk2_ardour/ardour_button.h b/gtk2_ardour/ardour_button.h index 6fbb799f37..8a1055d4ee 100644 --- a/gtk2_ardour/ardour_button.h +++ b/gtk2_ardour/ardour_button.h @@ -40,11 +40,16 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable unused = 0x10, Menu = 0x20, Inactive = 0x40, // no _action is defined AND state is not used - RecButton = 0x80, // tentative, see commit message - RecTapeMode = 0x100, // tentative - CloseCross = 0x200, // tentative - StripWidth = 0x400, // tentative - DinMidi = 0x800, // tentative + VectorIcon = 0x80, // tentative, see commit message + }; + + enum Icon { + NoIcon, + RecButton, + RecTapeMode, + CloseCross, + StripWidth, + DinMidi, }; static Element default_elements; @@ -75,6 +80,9 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable void set_elements (Element); void add_elements (Element); + Icon icon() const { return _icon; } + void set_icon (Icon); + void set_corner_radius (float); void set_text (const std::string&); @@ -133,6 +141,7 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable Glib::RefPtr<Gdk::Pixbuf> _pixbuf; std::string _text; Element _elements; + Icon _icon; Tweaks _tweaks; BindingProxy binding_proxy; diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc index 357067dc6e..dc2bcb2b1f 100644 --- a/gtk2_ardour/ardour_ui2.cc +++ b/gtk2_ardour/ardour_ui2.cc @@ -279,7 +279,8 @@ ARDOUR_UI::setup_transport () play_selection_button.set_image (get_icon (X_("transport_range"))); auto_loop_button.set_image (get_icon (X_("transport_loop"))); - rec_button.set_elements ((ArdourButton::Element) (ArdourButton::Edge|ArdourButton::Body|ArdourButton::RecButton)); + rec_button.set_elements ((ArdourButton::Element) (ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon)); + rec_button.set_icon (ArdourButton::RecButton); midi_panic_button.set_image (get_icon (X_("midi_panic"))); /* the icon for this has an odd aspect ratio, so fatten up the button */ diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc index b486d54840..56bf61dc8b 100644 --- a/gtk2_ardour/automation_time_axis.cc +++ b/gtk2_ardour/automation_time_axis.cc @@ -149,7 +149,8 @@ AutomationTimeAxisView::AutomationTimeAxisView ( _base_rect->lower_to_bottom(); } - hide_button.set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::CloseCross)); + hide_button.set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon)); + hide_button.set_icon (ArdourButton::CloseCross); hide_button.set_tweaks(ArdourButton::TrackHeader); auto_button.set_name ("route button"); diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 7063e70a12..213c72ecab 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -151,10 +151,12 @@ MixerStrip::init () t += string_compose (_("\n%1-%2-click to toggle the width of all strips."), Keyboard::primary_modifier_name(), Keyboard::tertiary_modifier_name ()); } - width_button.set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::StripWidth)); + width_button.set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon)); + width_button.set_icon (ArdourButton::StripWidth); ARDOUR_UI::instance()->set_tip (width_button, t); - hide_button.set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::CloseCross)); + hide_button.set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon)); + hide_button.set_icon (ArdourButton::CloseCross); ARDOUR_UI::instance()->set_tip (&hide_button, _("Hide this mixer strip")); input_button_box.set_spacing(2); @@ -518,7 +520,8 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt) if (midi_input_enable_button == 0) { midi_input_enable_button = manage (new ArdourButton); midi_input_enable_button->set_name ("midi input button"); - midi_input_enable_button->set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::DinMidi)); + midi_input_enable_button->set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon)); + midi_input_enable_button->set_icon (ArdourButton::DinMidi); midi_input_enable_button->signal_button_press_event().connect (sigc::mem_fun (*this, &MixerStrip::input_active_button_press), false); midi_input_enable_button->signal_button_release_event().connect (sigc::mem_fun (*this, &MixerStrip::input_active_button_release), false); ARDOUR_UI::instance()->set_tip (midi_input_enable_button, _("Enable/Disable MIDI input")); diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index 9f1acf49ed..9b6e800072 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -148,7 +148,8 @@ RouteUI::init () rec_enable_button = manage (new ArdourButton); rec_enable_button->set_name ("record enable button"); - rec_enable_button->set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::RecButton)); + rec_enable_button->set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::VectorIcon)); + rec_enable_button->set_icon (ArdourButton::RecButton); UI::instance()->set_tip (rec_enable_button, _("Enable recording on this track"), ""); if (ARDOUR_UI::config()->get_blink_rec_arm()) { @@ -2121,10 +2122,10 @@ RouteUI::track_mode_changed (void) switch (track()->mode()) { case ARDOUR::NonLayered: case ARDOUR::Normal: - rec_enable_button->set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::RecButton)); + rec_enable_button->set_icon (ArdourButton::RecButton); break; case ARDOUR::Destructive: - rec_enable_button->set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::RecButton|ArdourButton::RecTapeMode)); + rec_enable_button->set_icon (ArdourButton::RecTapeMode); break; } rec_enable_button->queue_draw(); |