mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 15:25:01 +01:00
update ArdourButton Icon API
This commit is contained in:
parent
62a1a2e086
commit
d25e8f2233
6 changed files with 42 additions and 19 deletions
|
|
@ -59,6 +59,7 @@ ArdourButton::Element ArdourButton::just_led_default_elements = ArdourButton::El
|
||||||
|
|
||||||
ArdourButton::ArdourButton (Element e)
|
ArdourButton::ArdourButton (Element e)
|
||||||
: _elements (e)
|
: _elements (e)
|
||||||
|
, _icon (ArdourButton::NoIcon)
|
||||||
, _tweaks (Tweaks (0))
|
, _tweaks (Tweaks (0))
|
||||||
, _char_pixel_width (0)
|
, _char_pixel_width (0)
|
||||||
, _char_pixel_height (0)
|
, _char_pixel_height (0)
|
||||||
|
|
@ -306,7 +307,7 @@ ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
|
||||||
cairo_fill (cr);
|
cairo_fill (cr);
|
||||||
}
|
}
|
||||||
else // rec-en is exclusive to pixbuf (tape machine mode, rec-en)
|
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 x = get_width() * .5;
|
||||||
const double y = get_height() * .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.
|
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);
|
cairo_restore(cr);
|
||||||
}
|
}
|
||||||
else if (_elements & RecButton) {
|
else if ((_elements & VectorIcon) && _icon == RecButton) {
|
||||||
const double x = get_width() * .5;
|
const double x = get_width() * .5;
|
||||||
const double y = get_height() * .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.
|
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_set_line_width(cr, 1);
|
||||||
cairo_stroke(cr);
|
cairo_stroke(cr);
|
||||||
}
|
}
|
||||||
else if (_elements & CloseCross) {
|
else if ((_elements & VectorIcon) && _icon == CloseCross) {
|
||||||
const double x = get_width() * .5;
|
const double x = get_width() * .5;
|
||||||
const double y = get_height() * .5;
|
const double y = get_height() * .5;
|
||||||
const double o = .5 + std::min(x, y) * .4;
|
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_line_to(cr, x-o, y+o);
|
||||||
cairo_stroke(cr);
|
cairo_stroke(cr);
|
||||||
}
|
}
|
||||||
else if (_elements & StripWidth) {
|
else if ((_elements & VectorIcon) && _icon == StripWidth) {
|
||||||
const double x0 = get_width() * .2;
|
const double x0 = get_width() * .2;
|
||||||
const double x1 = get_width() * .8;
|
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_line_to(cr, xa1, ya1);
|
||||||
cairo_stroke(cr);
|
cairo_stroke(cr);
|
||||||
}
|
}
|
||||||
else if (_elements & DinMidi) {
|
else if ((_elements & VectorIcon) && _icon == DinMidi) {
|
||||||
const double x = get_width() * .5;
|
const double x = get_width() * .5;
|
||||||
const double y = get_height() * .5;
|
const double y = get_height() * .5;
|
||||||
const double r = std::min(x, y) * .75;
|
const double r = std::min(x, y) * .75;
|
||||||
|
|
@ -694,7 +695,7 @@ ArdourButton::on_size_request (Gtk::Requisition* req)
|
||||||
req->width += _diameter + 4;
|
req->width += _diameter + 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_elements & (RecButton | CloseCross | StripWidth | DinMidi)) {
|
if (_elements & VectorIcon) {
|
||||||
assert(!(_elements & Text));
|
assert(!(_elements & Text));
|
||||||
const int wh = std::max (rint (TRACKHEADERBTNW * char_avg_pixel_width()), ceil (char_pixel_height() * BASELINESTRETCH + 1.));
|
const int wh = std::max (rint (TRACKHEADERBTNW * char_avg_pixel_width()), ceil (char_pixel_height() * BASELINESTRETCH + 1.));
|
||||||
req->width += wh;
|
req->width += wh;
|
||||||
|
|
@ -1262,6 +1263,13 @@ ArdourButton::add_elements (Element e)
|
||||||
CairoWidget::set_dirty ();
|
CairoWidget::set_dirty ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ArdourButton::set_icon (Icon i)
|
||||||
|
{
|
||||||
|
_icon = i;
|
||||||
|
CairoWidget::set_dirty ();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ArdourButton::set_custom_led_color (uint32_t c, bool useit)
|
ArdourButton::set_custom_led_color (uint32_t c, bool useit)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -40,11 +40,16 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
|
||||||
unused = 0x10,
|
unused = 0x10,
|
||||||
Menu = 0x20,
|
Menu = 0x20,
|
||||||
Inactive = 0x40, // no _action is defined AND state is not used
|
Inactive = 0x40, // no _action is defined AND state is not used
|
||||||
RecButton = 0x80, // tentative, see commit message
|
VectorIcon = 0x80, // tentative, see commit message
|
||||||
RecTapeMode = 0x100, // tentative
|
};
|
||||||
CloseCross = 0x200, // tentative
|
|
||||||
StripWidth = 0x400, // tentative
|
enum Icon {
|
||||||
DinMidi = 0x800, // tentative
|
NoIcon,
|
||||||
|
RecButton,
|
||||||
|
RecTapeMode,
|
||||||
|
CloseCross,
|
||||||
|
StripWidth,
|
||||||
|
DinMidi,
|
||||||
};
|
};
|
||||||
|
|
||||||
static Element default_elements;
|
static Element default_elements;
|
||||||
|
|
@ -75,6 +80,9 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
|
||||||
void set_elements (Element);
|
void set_elements (Element);
|
||||||
void add_elements (Element);
|
void add_elements (Element);
|
||||||
|
|
||||||
|
Icon icon() const { return _icon; }
|
||||||
|
void set_icon (Icon);
|
||||||
|
|
||||||
void set_corner_radius (float);
|
void set_corner_radius (float);
|
||||||
|
|
||||||
void set_text (const std::string&);
|
void set_text (const std::string&);
|
||||||
|
|
@ -133,6 +141,7 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
|
||||||
Glib::RefPtr<Gdk::Pixbuf> _pixbuf;
|
Glib::RefPtr<Gdk::Pixbuf> _pixbuf;
|
||||||
std::string _text;
|
std::string _text;
|
||||||
Element _elements;
|
Element _elements;
|
||||||
|
Icon _icon;
|
||||||
Tweaks _tweaks;
|
Tweaks _tweaks;
|
||||||
BindingProxy binding_proxy;
|
BindingProxy binding_proxy;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -279,7 +279,8 @@ ARDOUR_UI::setup_transport ()
|
||||||
play_selection_button.set_image (get_icon (X_("transport_range")));
|
play_selection_button.set_image (get_icon (X_("transport_range")));
|
||||||
auto_loop_button.set_image (get_icon (X_("transport_loop")));
|
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")));
|
midi_panic_button.set_image (get_icon (X_("midi_panic")));
|
||||||
/* the icon for this has an odd aspect ratio, so fatten up the button */
|
/* the icon for this has an odd aspect ratio, so fatten up the button */
|
||||||
|
|
|
||||||
|
|
@ -149,7 +149,8 @@ AutomationTimeAxisView::AutomationTimeAxisView (
|
||||||
_base_rect->lower_to_bottom();
|
_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);
|
hide_button.set_tweaks(ArdourButton::TrackHeader);
|
||||||
|
|
||||||
auto_button.set_name ("route button");
|
auto_button.set_name ("route button");
|
||||||
|
|
|
||||||
|
|
@ -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 ());
|
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);
|
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"));
|
ARDOUR_UI::instance()->set_tip (&hide_button, _("Hide this mixer strip"));
|
||||||
|
|
||||||
input_button_box.set_spacing(2);
|
input_button_box.set_spacing(2);
|
||||||
|
|
@ -518,7 +520,8 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
|
||||||
if (midi_input_enable_button == 0) {
|
if (midi_input_enable_button == 0) {
|
||||||
midi_input_enable_button = manage (new ArdourButton);
|
midi_input_enable_button = manage (new ArdourButton);
|
||||||
midi_input_enable_button->set_name ("midi input button");
|
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_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);
|
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"));
|
ARDOUR_UI::instance()->set_tip (midi_input_enable_button, _("Enable/Disable MIDI input"));
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,8 @@ RouteUI::init ()
|
||||||
|
|
||||||
rec_enable_button = manage (new ArdourButton);
|
rec_enable_button = manage (new ArdourButton);
|
||||||
rec_enable_button->set_name ("record enable button");
|
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"), "");
|
UI::instance()->set_tip (rec_enable_button, _("Enable recording on this track"), "");
|
||||||
|
|
||||||
if (ARDOUR_UI::config()->get_blink_rec_arm()) {
|
if (ARDOUR_UI::config()->get_blink_rec_arm()) {
|
||||||
|
|
@ -2121,10 +2122,10 @@ RouteUI::track_mode_changed (void)
|
||||||
switch (track()->mode()) {
|
switch (track()->mode()) {
|
||||||
case ARDOUR::NonLayered:
|
case ARDOUR::NonLayered:
|
||||||
case ARDOUR::Normal:
|
case ARDOUR::Normal:
|
||||||
rec_enable_button->set_elements ((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::RecButton));
|
rec_enable_button->set_icon (ArdourButton::RecButton);
|
||||||
break;
|
break;
|
||||||
case ARDOUR::Destructive:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
rec_enable_button->queue_draw();
|
rec_enable_button->queue_draw();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue