X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gtk2_ardour%2Fnote_base.cc;h=915866ef61237e3ed751ac4851aa1f085783a869;hb=20fb871d5ac252c820bc8dc38403b2fbb4e4aca8;hp=52ee88a2d6794b4766a96b5fdc10b8b3018cf4f4;hpb=44c40bc06529c4c1b6a3dca6fec96f1515f19fc9;p=ardour.git diff --git a/gtk2_ardour/note_base.cc b/gtk2_ardour/note_base.cc index 52ee88a2d6..915866ef61 100644 --- a/gtk2_ardour/note_base.cc +++ b/gtk2_ardour/note_base.cc @@ -44,23 +44,19 @@ 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; +bool NoteBase::_color_init = false; +Gtkmm2ext::Color NoteBase::_selected_col = 0; +Gtkmm2ext::SVAModifier NoteBase::color_modifier; +Gtkmm2ext::Color NoteBase::velocity_color_table[128]; 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"); + for (uint8_t i = 0; i < 128; ++i) { + velocity_color_table[i] = 0; /* out of bounds because zero alpha makes no sense */ + } + _selected_col = UIConfiguration::instance().color ("midi note selected outline"); + color_modifier = UIConfiguration::instance().modifier ("midi note"); } NoteBase::NoteBase(MidiRegionView& region, bool with_events, const boost::shared_ptr note) @@ -331,20 +327,38 @@ NoteBase::big_enough_to_trim () const } -uint32_t -NoteBase::meter_style_fill_color(uint8_t vel, bool selected) +Gtkmm2ext::Color +NoteBase::meter_style_fill_color(uint8_t vel, bool /* selected */) { - if (vel < 32) { - return UINT_INTERPOLATE(UIConfiguration::instance().color ("midi meter color0"), UIConfiguration::instance().color ("midi meter color1"), (vel / 32.0)); - } else if (vel < 64) { - return UINT_INTERPOLATE(UIConfiguration::instance().color ("midi meter color2"), UIConfiguration::instance().color ("midi meter color3"), ((vel-32) / 32.0)); - } else if (vel < 100) { - return UINT_INTERPOLATE(UIConfiguration::instance().color ("midi meter color4"), UIConfiguration::instance().color ("midi meter color5"), ((vel-64) / 32.0)); - } else if (vel < 112) { - return UINT_INTERPOLATE(UIConfiguration::instance().color ("midi meter color6"), UIConfiguration::instance().color ("midi meter color7"), ((vel-100) / 36.0)); - } else { - return UINT_INTERPOLATE(UIConfiguration::instance().color ("midi meter color8"), UIConfiguration::instance().color ("midi meter color9"), ((vel-112) / 17.0)); + /* note that because vel is uint8_t, we don't need bounds checking for + the color lookup table. + */ + + if (velocity_color_table[vel] == 0) { + + Gtkmm2ext::Color col; + + if (vel < 32) { + col = UINT_INTERPOLATE(UIConfiguration::instance().color ("midi meter color0"), UIConfiguration::instance().color ("midi meter color1"), (vel / 32.0)); + col = Gtkmm2ext::change_alpha (col, color_modifier.a()); + } else if (vel < 64) { + col = UINT_INTERPOLATE(UIConfiguration::instance().color ("midi meter color2"), UIConfiguration::instance().color ("midi meter color3"), ((vel-32) / 32.0)); + col = Gtkmm2ext::change_alpha (col, color_modifier.a()); + } else if (vel < 100) { + col = UINT_INTERPOLATE(UIConfiguration::instance().color ("midi meter color4"), UIConfiguration::instance().color ("midi meter color5"), ((vel-64) / 36.0)); + col = Gtkmm2ext::change_alpha (col, color_modifier.a()); + } else if (vel < 112) { + col = UINT_INTERPOLATE(UIConfiguration::instance().color ("midi meter color6"), UIConfiguration::instance().color ("midi meter color7"), ((vel-100) / 12.0)); + col = Gtkmm2ext::change_alpha (col, color_modifier.a()); + } else { + col = UINT_INTERPOLATE(UIConfiguration::instance().color ("midi meter color8"), UIConfiguration::instance().color ("midi meter color9"), ((vel-112) / 17.0)); + col = Gtkmm2ext::change_alpha (col, color_modifier.a()); + } + + velocity_color_table[vel] = col; + return col; } -} + return velocity_color_table[vel]; +}