diff options
Diffstat (limited to 'src/Legend.hpp')
-rw-r--r-- | src/Legend.hpp | 62 |
1 files changed, 8 insertions, 54 deletions
diff --git a/src/Legend.hpp b/src/Legend.hpp index cb05faf..c1563e9 100644 --- a/src/Legend.hpp +++ b/src/Legend.hpp @@ -1,5 +1,5 @@ /* This file is part of Patchage. - * Copyright 2014 David Robillard <http://drobilla.net> + * Copyright 2014-2020 David Robillard <d@drobilla.net> * * Patchage is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free @@ -21,66 +21,20 @@ #include <gtkmm/box.h> #include <gtkmm/colorbutton.h> -#include <gtkmm/label.h> +#include <sigc++/sigc++.h> + +#include <string> class Legend : public Gtk::HBox { public: - explicit Legend(const Configuration& configuration) - { - add_button(PortType::jack_audio, - "Audio", - configuration.get_port_color(PortType::jack_audio)); - -#ifdef HAVE_JACK_METADATA - add_button(PortType::jack_cv, - "CV", - configuration.get_port_color(PortType::jack_cv)); - add_button(PortType::jack_osc, - "OSC", - configuration.get_port_color(PortType::jack_osc)); -#endif - - add_button(PortType::jack_midi, - "MIDI", - configuration.get_port_color(PortType::jack_midi)); - - add_button(PortType::alsa_midi, - "ALSA MIDI", - configuration.get_port_color(PortType::alsa_midi)); + explicit Legend(const Configuration& configuration); - show_all_children(); - } + void add_button(PortType id, const std::string& label, uint32_t rgba); - void add_button(const PortType id, const std::string& label, uint32_t rgba) - { - Gdk::Color col; - col.set_rgb(((rgba >> 24) & 0xFF) * 0x100, - ((rgba >> 16) & 0xFF) * 0x100, - ((rgba >> 8) & 0xFF) * 0x100); - auto* box = new Gtk::HBox(); - auto* but = new Gtk::ColorButton(col); - but->set_use_alpha(false); - but->signal_color_set().connect(sigc::bind( - sigc::mem_fun(this, &Legend::on_color_set), id, label, but)); - - box->pack_end(*Gtk::manage(but)); - box->pack_end(*Gtk::manage(new Gtk::Label(label)), false, false, 2); - - this->pack_start(*Gtk::manage(box), false, false, 6); - } - - void on_color_set(const PortType id, + void on_color_set(PortType id, const std::string& label, - const Gtk::ColorButton* but) - { - const Gdk::Color col = but->get_color(); - const uint32_t rgba = (((col.get_red() / 0x100) << 24) | - ((col.get_green() / 0x100) << 16) | - ((col.get_blue() / 0x100) << 8) | 0xFF); - - signal_color_changed.emit(id, label, rgba); - } + const Gtk::ColorButton* but); sigc::signal<void, PortType, std::string, uint32_t> signal_color_changed; }; |