|
@@ -7,19 +7,29 @@
|
|
|
PlaybackScreen::PlaybackScreen(Sequencer& seq)
|
|
|
: sequencer(seq)
|
|
|
{
|
|
|
- setColorAll(midi::LaunchpadColor(0, 0));
|
|
|
+}
|
|
|
+
|
|
|
+void PlaybackScreen::enable()
|
|
|
+{
|
|
|
+ refreshAll();
|
|
|
+ parent::enable();
|
|
|
}
|
|
|
|
|
|
void PlaybackScreen::beforeBeat(Player::BeatIndex beat)
|
|
|
{
|
|
|
std::cout << "before beat #" << beat << std::endl;
|
|
|
- setColor(beat, 0, colors::activeMessage);
|
|
|
- setColor((beat - 1) % 8, 0, colors::dark);
|
|
|
+ for(unsigned char y = 0; y < midi::Launchpad::height - 1; y++) {
|
|
|
+ refresh(beat, y);
|
|
|
+ refresh((beat - 1) % (midi::Launchpad::width - 1), y);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void PlaybackScreen::afterBeat(Player::BeatIndex beat)
|
|
|
{
|
|
|
std::cout << "after beat #" << beat << std::endl;
|
|
|
+ for(unsigned char y = 0; y < midi::Launchpad::height; y++) {
|
|
|
+ //refreshColor(beat, y);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void PlaybackScreen::keyPressed(unsigned char x, unsigned char y)
|
|
@@ -27,30 +37,63 @@ void PlaybackScreen::keyPressed(unsigned char x, unsigned char y)
|
|
|
std::cout << "clicked x=" << (int)x << ", y=" << (int)y << std::endl;
|
|
|
|
|
|
if(x == 8) { // very right
|
|
|
- setColor(x, y, colors::activeMessage);
|
|
|
- std::shared_ptr<midi::Message> msg_ptr = sequencer.messages[y];
|
|
|
- msg_ptr->print(std::cout);
|
|
|
- sequencer.midiOut.sendMessage(*msg_ptr);
|
|
|
+ if(y < sequencer.messages.size()) {
|
|
|
+ std::shared_ptr<midi::Message> msg_ptr = sequencer.messages[y];
|
|
|
+ msg_ptr->print(std::cout);
|
|
|
+ sequencer.midiOut.sendMessage(*msg_ptr);
|
|
|
+ }
|
|
|
} else if(y == 8) { // very top
|
|
|
if(x == 0) {
|
|
|
if(sequencer.player.isPlaying()) {
|
|
|
sequencer.player.stop();
|
|
|
- setColor(x, y, colors::inactiveOption);
|
|
|
} else {
|
|
|
sequencer.player.loop();
|
|
|
- setColor(x, y, colors::activeOption);
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
}
|
|
|
+
|
|
|
+ refresh(x, y);
|
|
|
}
|
|
|
|
|
|
void PlaybackScreen::keyReleased(unsigned char x, unsigned char y)
|
|
|
+{
|
|
|
+ refresh(x, y);
|
|
|
+}
|
|
|
+
|
|
|
+void PlaybackScreen::refresh(unsigned char x, unsigned char y)
|
|
|
{
|
|
|
if(x == 8) { // very right
|
|
|
- setColor(x, y, colors::inactiveMessage);
|
|
|
+ if(y < sequencer.messages.size()) {
|
|
|
+ setColor(x, y, getKeyPressed(x, y) ? colors::activeOption : colors::inactiveOption);
|
|
|
+ } else {
|
|
|
+ setColor(x, y, colors::dark);
|
|
|
+ }
|
|
|
} else if(y == 8) { // very top
|
|
|
+ if(x == 0) {
|
|
|
+ // start / stop
|
|
|
+ if(sequencer.player.isPlaying()) {
|
|
|
+ setColor(x, y, colors::activeOption);
|
|
|
+ } else {
|
|
|
+ setColor(x, y, colors::inactiveOption);
|
|
|
+ }
|
|
|
+ }
|
|
|
} else {
|
|
|
+ if(sequencer.player.getNextBeat() == x) {
|
|
|
+ setColor(x, y, colors::activeMessage);
|
|
|
+ } else {
|
|
|
+ setColor(x, y, colors::inactiveMessage);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void PlaybackScreen::refreshAll()
|
|
|
+{
|
|
|
+ for(unsigned char x = 0; x < midi::Launchpad::width; x++) {
|
|
|
+ for(unsigned char y = 0; y < midi::Launchpad::height; y++) {
|
|
|
+ if(x != 8 || y != 8) {
|
|
|
+ refresh(x, y);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|