Skip to content

Commit b31c482

Browse files
committed
Added hover note coloring
1 parent 2eac1d7 commit b31c482

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

include/lsp-plug.in/tk/widgets/specific/PianoKeys.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ namespace lsp
163163
protected:
164164
lltl::darray<key_t> vKeys;
165165
key_t vSplit[2];
166-
ssize_t nCurrNote; // Currently selected note
166+
ssize_t nHoverNote; // Hover note
167167
size_t nMBState; // Mouse button state
168168
work_mode_t enWorkMode; // Current work mode
169169

@@ -199,6 +199,7 @@ namespace lsp
199199
void draw_split(ws::ISurface *s, const key_t * key, const lsp::Color & c, const lsp::Color & oc, size_t angle, float split);
200200
key_t *find_key(ssize_t x, ssize_t y);
201201
void handle_note_press(ssize_t note);
202+
void set_hover_note(ssize_t note);
202203

203204
protected:
204205
virtual void property_changed(Property *prop) override;

src/main/widgets/specific/PianoKeys.cpp

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)