ssize_t remaining;
snd_seq_event_t event;
score_note_t *note;
+ int need_redraw = FALSE;
remaining = read (scherzo->midi_fd, buf, MIDI_BUF_SIZE);
next, remaining, &event);
remaining -= consumed;
+ next += consumed;
switch (event.type) {
case SND_SEQ_EVENT_NONE:
case SND_SEQ_EVENT_NOTEON:
note = scherzo_add_note_midi (scherzo, event.data.note.note);
_judge_note (scherzo, note);
- gtk_widget_queue_draw (scherzo->window);
+ need_redraw = TRUE;
break;
case SND_SEQ_EVENT_NOTEOFF:
scherzo_remove_note_midi (scherzo, event.data.note.note);
_score_challenge (scherzo);
- gtk_widget_queue_draw (scherzo->window);
+ need_redraw = TRUE;
break;
case SND_SEQ_EVENT_CLOCK:
/* Ignore for now as my piano sends a constant stream of these. */
break;
}
}
-
+
+ if (need_redraw)
+ gtk_widget_queue_draw (scherzo->window);
+
/* Return TRUE to continue to get called in the future. */
return TRUE;
}