diff --git a/src/controller/genericmidi.cxx b/src/controller/genericmidi.cxx index 7976ff8..b729678 100644 --- a/src/controller/genericmidi.cxx +++ b/src/controller/genericmidi.cxx @@ -495,10 +495,16 @@ void GenericMIDI::midi(unsigned char* midi) jack->getLogic()->trackJackSendActivate(b->track,b->active); break; case Event::GRID_EVENT: - if ( b->active ) + if ( b->active == 1 ) { + /* press */ jack->getGridLogic()->pressed( b->track, b->scene ); - else + } else if ( b->active == -1 ) { + /* clear */ + jack->getGridLogic()->clear( b->track, b->scene ); + } else { + /* release */ jack->getGridLogic()->released( b->track, b->scene ); + } break; case Event::GRID_SELECT_CLIP_EVENT: diff --git a/src/eventhandlerdsp.cxx b/src/eventhandlerdsp.cxx index 279d129..bbfd06b 100644 --- a/src/eventhandlerdsp.cxx +++ b/src/eventhandlerdsp.cxx @@ -176,12 +176,8 @@ void handleDspEvents() if ( availableRead >= sizeof(EventGridState) ) { EventGridState ev; jack_ringbuffer_read( rbToDsp, (char*)&ev, sizeof(EventGridState) ); - // clear clips in Controllers - if ( ev.state == GridLogic::STATE_EMPTY ) { - jack->getLooper( ev.track )->getClip( ev.scene )->init(); - jack->getControllerUpdater()->setTrackSceneProgress(ev.track, ev.scene, 0 ); - jack->getControllerUpdater()->setSceneState( ev.track, ev.scene, GridLogic::STATE_EMPTY ); - } + if ( ev.state == GridLogic::STATE_EMPTY ) + jack->getGridLogic()->clear( ev.track, ev.scene ); } break; } diff --git a/src/gridlogic.cxx b/src/gridlogic.cxx index 721723b..7302b76 100644 --- a/src/gridlogic.cxx +++ b/src/gridlogic.cxx @@ -211,6 +211,12 @@ void GridLogic::pressed( int track, int scene ) jack->getControllerUpdater()->setSceneState(track, scene, s ); } +void GridLogic::clear( int track, int scene ) +{ + jack->getLooper( track )->getClip( scene )->init(); + jack->getControllerUpdater()->setTrackSceneProgress(track, scene, 0 ); + jack->getControllerUpdater()->setSceneState( track, scene, GridLogic::STATE_EMPTY ); +} void GridLogic::released( int track, int scene ) { diff --git a/src/gridlogic.hxx b/src/gridlogic.hxx index 691bfc8..91ce02a 100644 --- a/src/gridlogic.hxx +++ b/src/gridlogic.hxx @@ -61,6 +61,9 @@ public: /// button press / click event void pressed( int track, int scene ); + /// clears the clip at this location + void clear( int track, int scene ); + /// button release / click-release event void released( int track, int scene );