diff options
Diffstat (limited to 'muse2/muse/midiedit/prcanvas.cpp')
-rw-r--r-- | muse2/muse/midiedit/prcanvas.cpp | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/muse2/muse/midiedit/prcanvas.cpp b/muse2/muse/midiedit/prcanvas.cpp index 9489c4ab..84e19e86 100644 --- a/muse2/muse/midiedit/prcanvas.cpp +++ b/muse2/muse/midiedit/prcanvas.cpp @@ -658,15 +658,36 @@ void PianoCanvas::pianoCmd(int cmd) switch(cmd) { case CMD_LEFT: { - int frames = pos[0] - editor->rasterStep(pos[0]); - if (frames < 0) - frames = 0; - Pos p(frames,true); - song->setPos(0, p, true, true, true); //CDW + int spos = pos[0]; + if(spos > 0) + { + spos -= 1; // Nudge by -1, then snap down with raster1. + spos = AL::sigmap.raster1(spos, editor->rasterStep(pos[0])); + } + if(spos < 0) + spos = 0; + Pos p(spos,true); + song->setPos(0, p, true, true, true); } break; case CMD_RIGHT: { + int spos = AL::sigmap.raster2(pos[0] + 1, editor->rasterStep(pos[0])); // Nudge by +1, then snap up with raster2. + Pos p(spos,true); + song->setPos(0, p, true, true, true); + } + break; + case CMD_LEFT_NOSNAP: + { + int spos = pos[0] - editor->rasterStep(pos[0]); + if (spos < 0) + spos = 0; + Pos p(spos,true); + song->setPos(0, p, true, true, true); //CDW + } + break; + case CMD_RIGHT_NOSNAP: + { Pos p(pos[0] + editor->rasterStep(pos[0]), true); //if (p > part->tick()) // p = part->tick(); |