diff --git a/src/music.c b/src/music.c index dd883a4..799b639 100644 --- a/src/music.c +++ b/src/music.c @@ -1495,6 +1495,37 @@ static void drawPianoLayout(Music* music) music->tic->api.fixed_text(music->tic, Wip, (TIC80_WIDTH - (sizeof Wip - 1) * TIC_FONT_WIDTH) / 2, TIC80_HEIGHT / 2, systemColor(tic_color_white)); } +static void scrollNotes(Music* music, s32 delta) +{ + tic_track_pattern* pattern = getChannelPattern(music); + + if(pattern) + { + SDL_Rect rect = music->tracker.select.rect; + + if(rect.h <= 0) + { + rect.y = music->tracker.row; + rect.h = 1; + } + + for(s32 i = rect.y; i < rect.y + rect.h; i++) + { + s32 note = pattern->rows[i].note + pattern->rows[i].octave * NOTES - NoteStart; + + note += delta; + + if(note >= 0 && note < NOTES*OCTAVES) + { + pattern->rows[i].note = note % NOTES + NoteStart; + pattern->rows[i].octave = note / NOTES; + } + } + + history_add(music->history); + } +} + static void drawTrackerLayout(Music* music) { SDL_Event* event = NULL; @@ -1503,6 +1534,11 @@ static void drawTrackerLayout(Music* music) switch (event->type) { case SDL_MOUSEWHEEL: + if(SDL_GetModState() & TIC_MOD_CTRL) + { + scrollNotes(music, event->wheel.y > 0 ? 1 : -1); + } + else { enum{Scroll = NOTES_PER_BEET}; s32 delta = event->wheel.y > 0 ? -Scroll : Scroll;