X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fcanvas-note-event.cc;h=94b675b22466990c126da1ddf1b52b07afd81e7f;hb=4c42a77441e74356cd909d994e270d1e1314aad4;hp=8f5a9f5807ad3a09dd5ceae8e393caa51650ca4a;hpb=ed626628b54e67dd9621c08d82a42afaed00c7ac;p=ardour.git diff --git a/gtk2_ardour/canvas-note-event.cc b/gtk2_ardour/canvas-note-event.cc index 8f5a9f5807..94b675b224 100644 --- a/gtk2_ardour/canvas-note-event.cc +++ b/gtk2_ardour/canvas-note-event.cc @@ -55,6 +55,7 @@ CanvasNoteEvent::CanvasNoteEvent(MidiRegionView& region, Item* item, const boost , _valid (true) , _mouse_x_fraction (-1.0) , _mouse_y_fraction (-1.0) + , _channel_selection (0xffff) { } @@ -113,14 +114,11 @@ CanvasNoteEvent::hide_velocity() void CanvasNoteEvent::on_channel_selection_change(uint16_t selection) { - // make note change its color if its channel is not marked active - if ( (selection & (1 << _note->channel())) == 0 ) { - set_fill_color(ARDOUR_UI::config()->canvasvar_MidiNoteInactiveChannel.get()); - set_outline_color(calculate_outline(ARDOUR_UI::config()->canvasvar_MidiNoteInactiveChannel.get())); - } else { - // set the color according to the notes selection state - set_selected(_selected); - } + _channel_selection = selection; + + /* this takes into account whether or not the note should be drawn as inactive */ + set_selected (_selected); + // this forces the item to update..... maybe slow... _item->hide(); _item->show(); @@ -187,20 +185,31 @@ CanvasNoteEvent::set_selected(bool selected) } _selected = selected; - set_fill_color (base_color ()); - if (_selected) { + bool const active = (_channel_selection & (1 << _note->channel())) != 0; + + if (_selected && active) { set_outline_color(calculate_outline(ARDOUR_UI::config()->canvasvar_MidiNoteSelected.get())); if(_region.channel_selector_scoped_note() != 0){ _region.channel_selector_scoped_note()->hide_channel_selector(); _region.set_channel_selector_scoped_note(0); } + + set_fill_color (base_color ()); + } else { - set_outline_color(calculate_outline(base_color())); + + if (active) { + set_fill_color(base_color()); + set_outline_color(calculate_outline(base_color())); + } else { + set_fill_color(ARDOUR_UI::config()->canvasvar_MidiNoteInactiveChannel.get()); + set_outline_color(calculate_outline(ARDOUR_UI::config()->canvasvar_MidiNoteInactiveChannel.get())); + } + hide_channel_selector(); } - } #define SCALE_USHORT_TO_UINT8_T(x) ((x) / 257) @@ -357,7 +366,7 @@ CanvasNoteEvent::mouse_near_ends () const bool CanvasNoteEvent::big_enough_to_trim () const { - return (x2() - x1()) > 10; /* canvas units, really pixels */ + return (x2() - x1()) > 20; /* canvas units, really pixels */ } } // namespace Canvas