Browse Source

config screen: limit expansion by max number of beats

Fabian Peter Hammerle 10 năm trước cách đây
mục cha
commit
4ddb54f9a2
4 tập tin đã thay đổi với 12 bổ sung6 xóa
  1. 1 0
      BeatSequence.h
  2. 8 5
      ConfigurationScreen.cpp
  3. 0 1
      PlaybackScreen.h
  4. 3 0
      Screen.h

+ 1 - 0
BeatSequence.h

@@ -1,3 +1,4 @@
+#pragma once
 #include "midi/BeatSequence.h"
 #include "multiset.h"
 #include <map>

+ 8 - 5
ConfigurationScreen.cpp

@@ -24,6 +24,7 @@ void ConfigurationScreen::keyPressed(unsigned char x, unsigned char y)
     } else {
         Player::Bpm minBpm = 1;
         Player::Bpm maxBpm = (1 << (configWidth * 2)) - 1;
+        BeatIndex maxBeatsCount = (1 << configWidth) - 1;
         switch(y) {
             case 0: { // number of beats
                 unsigned int bit = (1 << (configWidth - x - 1));
@@ -33,11 +34,13 @@ void ConfigurationScreen::keyPressed(unsigned char x, unsigned char y)
                 } break;
             case 1: { // sequence expansion
                 unsigned int factor = x + 2;
-                sequencer.beats.expand(factor);
-                sequencer.player.setBpm(std::min(
-                    sequencer.player.getBpm() * factor,
-                    maxBpm
-                    ));
+                if(sequencer.beats.size() * factor <= maxBeatsCount) {
+                    sequencer.beats.expand(factor);
+                    sequencer.player.setBpm(std::min(
+                        sequencer.player.getBpm() * factor,
+                        maxBpm
+                        ));
+                }
                 } break;
             case 2: { // sequence reduction erasing conflicts
                 unsigned int factor = x + 2;

+ 0 - 1
PlaybackScreen.h

@@ -7,7 +7,6 @@ class PlaybackScreen : public Screen
 {
     typedef Screen parent;
 
-    typedef BeatSequence::BeatIndex BeatIndex;
     typedef BeatSequenceNoteInformation::BeatIndexMultiset BeatIndexMultiset;
 
     Player::BeatIndex beatDisplayOffset;

+ 3 - 0
Screen.h

@@ -1,4 +1,5 @@
 #pragma once
+#include "BeatSequence.h"
 #include "midi/LaunchpadScreen.h"
 
 class Sequencer;
@@ -8,6 +9,8 @@ class Screen : public midi::LaunchpadScreen
     typedef midi::LaunchpadScreen parent;
 
 public:
+    
+    typedef BeatSequence::BeatIndex BeatIndex;
 
     Sequencer& sequencer;