From bf5933add60846818219402ebef0b0b47c7ce5f5 Mon Sep 17 00:00:00 2001 From: nick_m Date: Mon, 17 Oct 2016 03:19:02 +1100 Subject: Performance: store NoteBase UIConfiguration colors between config changes. Cumulative time in percent while wiggling the tempo lines rapidly. Before: MidiRegionview::update_sustained 12.02 NoteBase::base_color 6.43 MidiGhostRegion::update_note 3.12 Note::set 1.27 TempoMap::frame_at_quarter_note 0.59 _dynamic_cast 0.13 After: MidiRegionview::update_sustained 10.49 MidiGhostRegion::update_note 5.57 Note::set 2.52 TempoMap::frame_at_quarter_note 1.13 NoteBase::base_color 0.17 _dynamic_cast 0.17 --- gtk2_ardour/note_base.cc | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'gtk2_ardour/note_base.cc') 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 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()); -- cgit v1.2.3