@@ -286,7 +286,7 @@ namespace lsp
286286 {
287287 pClass = &metadata;
288288
289- nCurrNote = -1 ;
289+ nHoverNote = -1 ;
290290 nMBState = 0 ;
291291 enWorkMode = WMODE_OFF;
292292
@@ -787,7 +787,7 @@ namespace lsp
787787 const ssize_t code = key->nKey ;
788788 const bool selected = (code >= sel_first) && (code <= sel_last);
789789 const bool pressed = (sMousePressed .get () == code) || (sPressed .get (code));
790- const bool hover = (code == nCurrNote );
790+ const bool hover = (code == nHoverNote );
791791
792792 lsp::Color col;
793793 const style::PianoKeyColors *c = get_key_colors (pressed, selected, hover);
@@ -1032,10 +1032,26 @@ namespace lsp
10321032 }
10331033 }
10341034
1035+ void PianoKeys::set_hover_note (ssize_t note)
1036+ {
1037+ if (((sEditable .get ()) || (sSelectable .get ())) && (note != nHoverNote))
1038+ {
1039+ nHoverNote = note;
1040+ query_draw ();
1041+ }
1042+ else if ((note < 0 ) && (note != nHoverNote))
1043+ {
1044+ nHoverNote = note;
1045+ query_draw ();
1046+ }
1047+ }
1048+
10351049 status_t PianoKeys::on_mouse_down (const ws::event_t *e)
10361050 {
10371051 const size_t mb_state = nMBState;
10381052 nMBState |= 1 << e->nCode ;
1053+ if (nMBState != 0 )
1054+ set_hover_note (-1 );
10391055
10401056 key_t *key = find_key (e->nLeft , e->nTop );
10411057 const ssize_t note = (key != NULL ) ? key->nKey : -1 ;
@@ -1105,6 +1121,8 @@ namespace lsp
11051121
11061122 lsp_trace (" note = %d" , int (note));
11071123
1124+ set_hover_note ((enWorkMode == WMODE_OFF) ? note : -1 );
1125+
11081126 if (nMBState != ws::MCF_LEFT)
11091127 return STATUS_OK;
11101128
@@ -1146,6 +1164,10 @@ namespace lsp
11461164 {
11471165 enWorkMode = WMODE_OFF;
11481166 handle_note_press (-1 );
1167+
1168+ // Set hover note
1169+ key_t *key = find_key (e->nLeft , e->nTop );
1170+ set_hover_note ((key != NULL ) ? key->nKey : -1 );
11491171 }
11501172
11511173 return STATUS_OK;
0 commit comments