diff options
-rw-r--r-- | gtk2_ardour/editor_canvas.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/note_base.cc | 28 | ||||
-rw-r--r-- | gtk2_ardour/note_base.h | 22 |
3 files changed, 42 insertions, 11 deletions
diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index 4fbe0d8444..6f0e26aef6 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -51,6 +51,7 @@ #include "keyboard.h" #include "editor_cursors.h" #include "mouse_cursors.h" +#include "note_base.h" #include "ui_config.h" #include "verbose_cursor.h" @@ -943,6 +944,8 @@ Editor::color_handler() refresh_location_display (); + NoteBase::set_colors (); + /* redraw the whole thing */ _track_canvas->set_background_color (UIConfiguration::instance().color ("arrange base")); _track_canvas->queue_draw (); diff --git a/gtk2_ardour/note_base.cc b/gtk2_ardour/note_base.cc index ff0ec34dfb..3852673e60 100644 --- a/gtk2_ardour/note_base.cc +++ b/gtk2_ardour/note_base.cc @@ -44,6 +44,25 @@ const uint32_t NoteBase::midi_channel_colors[16] = { 0x832dd3ff, 0xa92dd3ff, 0xd32dbfff, 0xd32d67ff }; +bool NoteBase::_color_init = false; +uint32_t NoteBase::_selected_mod_col = 0; +uint32_t NoteBase::_selected_outline_col = 0; +uint32_t NoteBase::_selected_col = 0; +uint32_t NoteBase::_min_col = 0; +uint32_t NoteBase::_mid_col = 0; +uint32_t NoteBase::_max_col = 0; + +void +NoteBase::set_colors () +{ + _selected_mod_col = UIConfiguration::instance().color_mod ("midi note selected", "midi note"); + _selected_outline_col = UIConfiguration::instance().color ("midi note selected outline"); + _selected_col = UIConfiguration::instance().color ("midi note selected"); + _min_col = UIConfiguration::instance().color_mod ("midi note min", "midi note"); + _mid_col = UIConfiguration::instance().color_mod ("midi note mid", "midi note"); + _max_col = UIConfiguration::instance().color_mod ("midi note max", "midi note"); +} + NoteBase::NoteBase(MidiRegionView& region, bool with_events, const boost::shared_ptr<NoteType> note) : _region(region) , _item (0) @@ -56,6 +75,10 @@ NoteBase::NoteBase(MidiRegionView& region, bool with_events, const boost::shared , _mouse_x_fraction (-1.0) , _mouse_y_fraction (-1.0) { + if (!_color_init) { + NoteBase::set_colors(); + _color_init = true; + } } NoteBase::~NoteBase() @@ -169,14 +192,13 @@ NoteBase::base_color() case TrackColor: { const uint32_t region_color = _region.midi_stream_view()->get_region_color(); - return UINT_INTERPOLATE (UINT_RGBA_CHANGE_A (region_color, opacity), - UIConfiguration::instance().color ("midi note selected"), + return UINT_INTERPOLATE (UINT_RGBA_CHANGE_A (region_color, opacity), _selected_col, 0.5); } case ChannelColors: return UINT_INTERPOLATE (UINT_RGBA_CHANGE_A (NoteBase::midi_channel_colors[_note->channel()], opacity), - UIConfiguration::instance().color ("midi note selected"), 0.5); + _selected_col, 0.5); default: return meter_style_fill_color(_note->velocity(), selected()); diff --git a/gtk2_ardour/note_base.h b/gtk2_ardour/note_base.h index d55f87c552..54c53ff6d2 100644 --- a/gtk2_ardour/note_base.h +++ b/gtk2_ardour/note_base.h @@ -100,18 +100,16 @@ class NoteBase : public sigc::trackable const boost::shared_ptr<NoteType> note() const { return _note; } MidiRegionView& region_view() const { return _region; } + static void set_colors (); + inline static uint32_t meter_style_fill_color(uint8_t vel, bool selected) { if (selected) { - return UIConfiguration::instance().color_mod ("midi note selected", "midi note"); + return _selected_mod_col; } else if (vel < 64) { - return UINT_INTERPOLATE( - UIConfiguration::instance().color_mod ("midi note min", "midi note"), - UIConfiguration::instance().color_mod ("midi note mid", "midi note"), + return UINT_INTERPOLATE(_min_col, _mid_col, (vel / (double)63.0)); } else { - return UINT_INTERPOLATE( - UIConfiguration::instance().color_mod ("midi note mid", "midi note"), - UIConfiguration::instance().color_mod ("midi note max", "midi note"), + return UINT_INTERPOLATE(_mid_col, _max_col, ((vel-64) / (double)63.0)); } } @@ -119,7 +117,7 @@ class NoteBase : public sigc::trackable /// calculate outline colors from fill colors of notes inline static uint32_t calculate_outline(uint32_t color, bool selected=false) { if (selected) { - return UIConfiguration::instance().color ("midi note selected outline"); + return _selected_outline_col; } else { return UINT_INTERPOLATE(color, 0x000000ff, 0.5); } @@ -150,6 +148,14 @@ protected: private: bool event_handler (GdkEvent *); + + static uint32_t _selected_mod_col; + static uint32_t _selected_outline_col; + static uint32_t _selected_col; + static uint32_t _min_col; + static uint32_t _mid_col; + static uint32_t _max_col; + static bool _color_init; }; #endif /* __gtk_ardour_note_h__ */ |