summaryrefslogtreecommitdiff
path: root/gtk2_ardour/note_base.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2020-05-01 17:39:03 -0600
committerPaul Davis <paul@linuxaudiosystems.com>2020-05-01 17:39:13 -0600
commit044be536168b0ae0dc44390ec3e58b60c4a9b613 (patch)
treef7748f0c6b331e390509a07fec7b2baa54ba9a9e /gtk2_ardour/note_base.cc
parent13c0145890a6d86614482741bf8f486116002737 (diff)
attempt to properly manage MIDI note display of selected status
Whether to display the selected outline depends on BOTH whether the note is selected, and whether we are in an internal editing mode.
Diffstat (limited to 'gtk2_ardour/note_base.cc')
-rw-r--r--gtk2_ardour/note_base.cc32
1 files changed, 27 insertions, 5 deletions
diff --git a/gtk2_ardour/note_base.cc b/gtk2_ardour/note_base.cc
index 3e6bb402da..b525b8bac9 100644
--- a/gtk2_ardour/note_base.cc
+++ b/gtk2_ardour/note_base.cc
@@ -68,7 +68,7 @@ NoteBase::NoteBase(MidiRegionView& region, bool with_events, const boost::shared
, _state(None)
, _note(note)
, _with_events (with_events)
- , _selected(false)
+ , _flags (Flags (0))
, _valid (true)
, _mouse_x_fraction (-1.0)
, _mouse_y_fraction (-1.0)
@@ -142,10 +142,10 @@ NoteBase::on_channel_selection_change(uint16_t selection)
if ( (selection & (1 << _note->channel())) == 0 ) {
const Gtkmm2ext::Color inactive_ch = UIConfiguration::instance().color ("midi note inactive channel");
set_fill_color(inactive_ch);
- set_outline_color(calculate_outline(inactive_ch, _selected));
+ set_outline_color(calculate_outline(inactive_ch, (_flags == Selected)));
} else {
// set the color according to the notes selection state
- set_selected(_selected);
+ set_selected (_flags == Selected);
}
// this forces the item to update..... maybe slow...
_item->hide();
@@ -166,12 +166,16 @@ NoteBase::set_selected(bool selected)
return;
}
- _selected = selected;
+ if (selected) {
+ _flags = Flags (_flags | Selected);
+ } else {
+ _flags = Flags (_flags & ~Selected);
+ }
const uint32_t base_col = base_color();
set_fill_color (base_col);
- set_outline_color(calculate_outline(base_col, _selected));
+ set_outline_color(calculate_outline(base_col, (_flags == Selected)));
}
#define SCALE_USHORT_TO_UINT8_T(x) ((x) / 257)
@@ -364,3 +368,21 @@ NoteBase::meter_style_fill_color(uint8_t vel, bool /* selected */)
return velocity_color_table[vel];
}
+void
+NoteBase::set_hide_selection (bool yn)
+{
+ if (yn) {
+ _flags = Flags (_flags | HideSelection);
+ } else {
+ _flags = Flags (_flags & ~HideSelection);
+ }
+
+ if (_flags & Selected) {
+ /* maybe (?) change outline color */
+ set_outline_color (calculate_outline (base_color(), !yn));
+ }
+
+ /* no need to redo color if it wasn't selected and we just changed
+ * "hide selected" since nothing will change
+ */
+}