summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-04-07 21:47:04 +0200
committerRobin Gareus <robin@gareus.org>2015-04-07 22:34:09 +0200
commitd25e8f22333ff00b51fbadb1892ba63cb90bb918 (patch)
tree6e65c5fcfbb7d8fe51d88e2b2b65461c4f2c30c3
parent62a1a2e086bc0dba9d4389622db2c000d36308e1 (diff)
update ArdourButton Icon API
-rw-r--r--gtk2_ardour/ardour_button.cc20
-rw-r--r--gtk2_ardour/ardour_button.h19
-rw-r--r--gtk2_ardour/ardour_ui2.cc3
-rw-r--r--gtk2_ardour/automation_time_axis.cc3
-rw-r--r--gtk2_ardour/mixer_strip.cc9
-rw-r--r--gtk2_ardour/route_ui.cc7
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();